日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
reflected_xss檢測(cè)工具的介紹

1.反射型xss的介紹

xss代碼出現(xiàn)在URL中,瀏覽器訪問(wèn)這個(gè)url后,服務(wù)端響應(yīng)的內(nèi)容中包含有這段xss代碼,這樣的xss被稱作反射型xss.

2.工具的介紹

reflected_xss工具目前可以用來(lái)檢測(cè)網(wǎng)站中是否可能存在反射型xss,程序是用python寫(xiě)的.

我用的python版本是2.7.3,系統(tǒng)上需要有python的requests模塊.

工具有四個(gè)文件

spider.py用來(lái)爬取網(wǎng)頁(yè)中的符合規(guī)則的url,可以指定爬取深度,然后生成一個(gè)urllist文件

reflect_xss.py檢測(cè)urllist文件中的每一個(gè)url是否可能存在反射型xss漏洞

filter.py中的函數(shù)會(huì)被spider.py調(diào)用,過(guò)濾掉一些不帶參數(shù)的url和重復(fù)的url.

config文件中,目前只有兩個(gè)選項(xiàng):timeout和sleep.

timeout是請(qǐng)求最多等待響應(yīng)的時(shí)間.發(fā)送響應(yīng)時(shí),超過(guò)timout秒后就當(dāng)作請(qǐng)求超時(shí)了.

sleep是每次請(qǐng)求url的間隔時(shí)間,因?yàn)橛械木W(wǎng)站會(huì)限制ip訪問(wèn)速度.

3.工具工作的流程

spider.py接受一個(gè)url參數(shù),根據(jù)這個(gè)url發(fā)送請(qǐng)求,接收到響應(yīng)后,把響應(yīng)中符合規(guī)則的url提取出來(lái),保存到urllist文件中.如果有指定爬取深度的話,會(huì)遞歸的爬取規(guī)則的url.這個(gè)規(guī)則是用正則寫(xiě)的,目前的規(guī)則是爬取到的url都應(yīng)該是一個(gè)網(wǎng)站下的,并且url必須是帶參數(shù)了的.

比如,spider.py “http://127.0.0.1/test.php?x=1″ 能夠保存的url都是以http://127.0.0.1開(kāi)頭的,并且url中有一個(gè)?號(hào).

reflect_xss.py會(huì)檢查urllist文件中的每一個(gè)url是否存在反射型xss.檢測(cè)流程是:分析每一個(gè)url的參數(shù),將”參數(shù)”挨個(gè)替換成”參數(shù)+xss payload”,然后發(fā)送出去,分析響應(yīng)的內(nèi)容中是否有xss payload字符串.其中的xss payload可以自定義,keywords文件中的每一行都會(huì)被當(dāng)作一個(gè)xss payload.可以向keywords文件添加或刪除xss payload.

4.工具用法演示

先來(lái)大致看下當(dāng)前目錄下的文件吧

再來(lái)看看我用來(lái)在本機(jī)測(cè)試的兩個(gè)文件吧.

只有http://127.0.0.1/rxss.php?a=1&x=2這個(gè)url是符合規(guī)則的,所以一會(huì)兒爬蟲(chóng)爬完了,urllist中應(yīng)該只有這一條url.

spider.py就是我們的小爬蟲(chóng).

直接運(yùn)行spider.py可以看到用法.

爬蟲(chóng)爬完了,生成了一個(gè)urllist文件,文件中只有一條url,一會(huì)兒就來(lái)檢測(cè)這條url是否可能存在反射型xss缺陷

這個(gè)url參數(shù)最好還是要帶上雙引號(hào),就跟用sqlmap的時(shí)候一樣.

reflect_xss.py就是用來(lái)檢測(cè)的.

直接python reflect_xss.py 運(yùn)行程序就可以檢測(cè)了.

如果有發(fā)現(xiàn)可能存在反射型xss,會(huì)在當(dāng)前目錄下生成一個(gè)Found文件,文件記錄了有缺陷的url.

檢測(cè)的時(shí)候,如果發(fā)生了異常,會(huì)被記錄到當(dāng)前目錄下的error.log日志文件.這里沒(méi)什么異常,所以沒(méi)有記錄.這個(gè)日志文件記錄的比較簡(jiǎn)潔明了,我就不多做介紹了.

我的郵箱是:happy7513159@qq.com 歡迎交流

下載地址:http://vdisk.weibo.com/lc/3GawHF1w1aTxKu2BJjr 密碼:CMB6

核心代碼:

spider.py:

 
 
 
 
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. import requests  
  4. import re  
  5. import string  
  6. import sys  
  7. import filter  
  8. headers={'Connection':'keep-alive',"User-Agent":"Mozilla/5.0 (X11; Linux i686) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36","Origin":"http://www.oschina.net",'Accept-Encoding':'gzip,deflate,sdch','Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4','X-Requested-With':'XMLHttpRequest','Accept':'application/json,text/javascript,*/*;q=0.01'}  
  9. def saveurl(urlset):  
  10. try:  
  11. f=open("urllist","a")  
  12. for url in urlset:  
  13. #unicode字符碼寫(xiě)入文件,添加換行  
  14. f.write(url.encode('UTF-8')+"n")  
  15. #except:  
  16. #    print "Failed to write urllist to file!"  
  17. finally:  
  18. f.close()  
  19. def main(requestsurl,depth):  
  20. try:  
  21. #print "%d"%depth  
  22. depth=depth+1 
  23. urlset=parseContent(requests.get(requestsurl,timeout=2,headers=headers).text)  
  24. saveurl(urlset)  
  25. if depth==string.atoi(sys.argv[2]):  
  26. pass 
  27. else:  
  28. for u in urlset:  
  29. main(u,depth)  
  30. except:  
  31. pass 
  32. def parseContent(content):  
  33. strlist = re.split('"',content)  
  34. urlset = set([])  
  35. for strstr in strlist:  
  36. #python正則匹配時(shí),需要\\表示  
  37. #if re.match('http://.*com(/|w)+', str):  
  38. #這個(gè)正則有點(diǎn)簡(jiǎn)單,只匹配了當(dāng)前網(wǎng)站  
  39. #if re.match('http://'+domain, str):  
  40. rules="http://"+domain+"[^,^ ^  ^']*" 
  41. #strstr是unicode對(duì)象  
  42. result=re.compile(rules).findall(strstr.encode("utf-8"))  
  43. #result是一個(gè)數(shù)組  
  44. if len(result)==0:  
  45. pass 
  46. else:  
  47. for i in result:  
  48. urlset.add(i)  
  49. return list(urlset)  
  50. if __name__=="__main__":  
  51. if len(sys.argv)!=3:  
  52. print "usage:"+sys.argv[0]+" http://test.com/"+" depth" 
  53. print "example:"+sys.argv[0]+' "http://127.0.0.1/a.php?c=1"'+" 3" 
  54. else:  
  55. domain=sys.argv[1].split('/')[2]  
  56. #保存最開(kāi)始的url  
  57. tmp=[]  
  58. tmp.insert(0,sys.argv[1]);  
  59. saveurl(tmp)  
  60. #開(kāi)始抓取  
  61. main(sys.argv[1],0)  
  62. filter.filter() 

reflect_xss.py

 
 
 
 
  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. import requests  
  4. import sys  
  5. import time  
  6. import re  
  7. #global payloads  
  8. #payloads=['">','']  
  9. jindu=0 
  10. def readconf(keyname):  
  11. isFound=0 
  12. try:  
  13. f=open("config","r")  
  14. lines=f.readlines()  
  15. for line in lines:  
  16. if line.startswith(keyname):  
  17. isFound=1 
  18. return line.split('=')[1]  
  19. if isFound==0:  
  20. errorlog("Warn:Can not to read key "+keyname+" from configure file")  
  21. return False 
  22. except:  
  23. errorlog("Warn:can not to read configure file ")  
  24. return False 
  25. def errorlog(str):  
  26. str=str+"n" 
  27. t=time.strftime('%m-%d %H.%M.%S--->',time.localtime(time.time()))  
  28. f=open("error.log","a")  
  29. f.write(t+str)  
  30. f.close()  
  31. def findlog(url):  
  32. try:  
  33. f=open("Found","a")  
  34. f.write(url+"n")  
  35. except:  
  36. errorlog("Fail:open 'Found' file")  
  37. finally:  
  38. f.close()  
  39. def main(payload,canshu,checkurl):  
  40. global jindu  
  41. url=checkurl.replace(canshu,canshu+payload)  
  42. #print "checking: "+url  
  43. #TODO timeout,防止ip被屏蔽應(yīng)該有  
  44. if readconf("sleep"):  
  45. time.sleep(float(readconf("sleep")))  
  46. #可能有Timeout異常  
  47. try:  
  48. a=requests.get(url,timeout=1)  
  49. if a.text.find(payload)!=-1:  
  50. #print "Find!!!!"  
  51. #print url  
  52. #print "-----------------------"  
  53. findlog(url)  
  54. else:  
  55. if jindu%10==0:  
  56. print time.strftime('%H:%M.%S->',time.localtime(time.time()))+"checking the "+str(jindu)+"th"+" url:"+url  
  57. except:  
  58. errorlog("Fail:request.get "+url)  
  59. jindu=jindu+1 
  60. def parse(url):  
  61. #url=http://test.com/test.php?a=1&b=2&c=3  
  62. #canshus=["a=1","c=3"]  
  63. #有可能url是http://test.com這種,沒(méi)有參數(shù)  
  64. #這種情況,返回一個(gè)空對(duì)象  
  65. try:  
  66. canshus=url.split("?")[1].split("&")  
  67. return canshus  
  68. except:  
  69. kong=[]  
  70. return kong  
  71. pass 
  72. def readfile(filename):  
  73. #這個(gè)global的位置放在上面效果就不一樣,不懂為什么  
  74. #global payloads  
  75. try:  
  76. aa=open(filename,"r")  
  77. f=aa.readlines();  
  78. for i in range(0,len(f)):  
  79. #過(guò)濾掉n  
  80. f[i]=f[i].rstrip("n")  
  81. return f  
  82. except:  
  83. print "Failed to access "+'"'+filename+'" '"file!" 
  84. finally:  
  85. aa.close()  
  86. if __name__=="__main__":  
  87. if len(sys.argv)!=1:  
  88. print 'usage:'+sys.argv[0]+" url depth" 
  89. print 'example:'+sys.argv[0]+'"http://url/test.php?x=1&y=2" 3' 
  90. else:  
  91. #global payloads  
  92. payloads=readfile("keywords.txt")  
  93. urls=readfile("urllist")  
  94. for checkurl in urls:  
  95. for payload in payloads:  
  96. for canshu in parse(checkurl):  
  97. if len(canshu)!=0:  
  98. main(payload,canshu,checkurl) 

本文題目:reflected_xss檢測(cè)工具的介紹
網(wǎng)址分享:http://www.dlmjj.cn/article/djijjji.html