CSRF自动化检测:

这里主要是对POST型form表单的检测

1. 根据URL获取form表单组成的数组

2. 遍历表单数组,对比不设置cookie与设置了cookie两种情况下的表单是否还存在,如果还存在就去除数组中的该表单。

因为不设置cookie没有登录态也能获取的表单、也能进行的操作对于CSRF来说没有意义。

3. 遍历表单数组,在设置cookie的情况下访问两次页面,检测表单是否有所变化,如果有变化,去除数组中的该表单。

因为变化原因通常是由token引起的。token在每一次的页面中都不同。

接下来就是根据各种黑名单来过滤掉大几率不存在CSRF的form表单。

4. 去除没有提交按钮的表单。

关键字:submit、button等

5. 去除placeholder属性中含有跳、搜、查、找等关键字的数组,placeholder为input中预显示的内容

6. 去除cgi中包含search find login reg等关键字的数组。

7. 去除带有验证码的表单

img标签中带有关键字  vcode,yzm,verifyCode,captcha

8. 去除带有token关键字的表单。

余下的表单可初步判定为该url中存在csrf的表单。

这套程序并不完整,可以说是简陋,只是一天就写出来的东西。

还需要检测GET型重要操作的CSRF,再用chrome-headless webkit检测ajax的GET/POST CSRF,才能够覆盖到大部分业务。

抛砖引玉吧,小伙子给我玉呗

代码如下:

#coding:utf-8
import requests
import re
'''
获取URL中的表单
''' class csrfCheck:
'''
输入原生cookie,返回cookie拆分成的字典类型
'''
def tranCookie(self,rawC):
'''将原生的一大串cookie(从Burpsuite中截取出来)转换为字典'''
cookie={}
cookies=rawC.split("; ")
for i in cookies:
name=i.split("=",1)[0]
value=i.split("=",1)[1]
cookie[name]=value
return cookie def getForms(self,url,cookie):
'''输入url与cookie字典,返回页面中的表单html代码 数组''' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
q=requests.get(url,headers=headers,cookies=cookie)
rep=q.content
#print rep q_nocookie=requests.get(url,headers=headers)
rep_nocookie=q_nocookie.content forms=re.findall("<form[\s\S]*?</form>",rep) # 对比各个表单在没有cookie的情况下是否存在
# 如果不用cookie也能获取表单
# 那么csrf没意义,不是需要检测的form,过滤掉
for i in forms:
link=re.findall("<form[\s\S]*?>",i)[0] if link in rep_nocookie:
forms.remove(i)
print "goout 1" '''
以同样的url和cookie请求,检测在两次请求中表单是否有变化。
如果有变化,则应该是token每次刷新页面都不同的原因引起的。
所以排除掉。
后续如果发现其他引起form变化的非token因素,修改此过滤条件。
'''
q_recheckToken=requests.get(url,headers=headers,cookies=cookie)
rep_recheckToekn=q_recheckToken.content for form in forms:
if form not in rep_recheckToekn:
forms.remove(form)
print "goout 2" return forms def filter(self,forms):
'''根据条件过滤去大概率不存在csrf的表单'''
'''去除没有提交按钮的表单'''
for form in forms:
if "submit" not in form.lower() and "button" not in form.lower():
forms.remove(form)
print "goout 3" '''去除带验证码的表单'''
yzmFile=open("yzm.txt","r")
yzmtext=yzmFile.readlines()
yzmFile.close()
#遍历表单
for form in forms:
#是否有验证码的标记位
ifVcode=0
imgs=re.findall("<img.*?>",form)
#遍历表单中的图片标签
for img in imgs:
if ifVcode==1:
break
#遍历关键字对图片标签进行检测
for key in yzmtext:
#转换为小写字母,不区分大小写
if key.strip() in img.lower():
forms.remove(form)
print "goout 4"
ifVcode=1
break '''去除placeholder(input中的预期信息)符合黑名单的'''
'''在验证cookie有无影响时已经去除了一遍,这里双重验证'''
phFile=open("placeholder.txt","r")
phtext=phFile.readlines()
phFile.close()
for form in forms:
#placeholder是否符合黑名单的标记位
ifPlaceholder=0
phs=re.findall("placeholder=\".*?\"",form)
#遍历表单中的placeholder属性
for ph in phs:
if ifPlaceholder==1:
break
#遍历关键字对placeholder进行检测
for key in phtext:
#转换为小写字母,不区分大小写
if key.strip() in ph.lower():
forms.remove(form)
print "goout 5"
ifPlaceholder=1
break '''去除cgi中存在search login等黑名单的表单'''
'''在验证cookie有无影响时已经去除了一遍,这里双重验证'''
cgiFile=open("cgi.txt","r")
cgitext=cgiFile.readlines()
cgiFile.close()
for form in forms:
#cgi是否符合黑名单的标记位
ifCgi=0
formTitle=re.findall("<form[\s\S]*?>",form)[0]
cgis=re.findall("\".*?\"",formTitle)
for cgi in cgis:
if ifCgi==1:
break
for key in cgitext:
if key.strip() in cgi.lower():
forms.remove(form)
print "goout 6"
ifCgi=1
break '''
检测是否存在token的关键字,后续应该将检测的地方定位到更精确的位置
缩小检测范围,减少漏报
'''
tokenFile=open("token.txt","r")
tokentext=tokenFile.readlines()
tokenFile.close()
#检测token关键字
for form in forms:
for key in tokentext:
if key.strip() in form.lower():
forms.remove(form)
print "goout 7"
break def show(self,forms):
for form in forms:
print form
def main(self,url,rawCookie): cookie=self.tranCookie(rawCookie)
forms=self.getForms(url,cookie)
self.filter(forms)
return forms
if __name__ == '__main__':
url="http://检测的URL"
rawCookie='''你的cookie原生字符串'''
csrf=csrfCheck()
result=csrf.main(url,rawCookie)
if len(result) == 0:
print "NO CSRF"
else:
print "CSRF!!"
print url
print re.findall("<form[\s\S]*?>",result)[0]
#csrf.show(result)

placeholder.txt





登录
注册
search
find
login
reg

cgi.txt

search
find
login
reg

yzm.txt  验证码黑名单

captcha
vcode
yzm
verifyCode
验证码

token.txt   token黑名单

token
g_tk
csrf

CSRF自动化检测的更多相关文章

  1. XSS 自动化检测 Fiddler Watcher & x5s & ccXSScan 初识

    一.标题:XSS 自动化检测 Fiddler Watcher & x5s  & ccXSScan 初识     automated XSS testing assistant 二.引言 ...

  2. 基于Python实现的死链接自动化检测工具

    基于Python实现的死链接自动化检测工具   by:授客 QQ:1033553122 测试环境: win7 python 3.3.2 chardet 2.3.0 脚本作用: 检测系统中访问异常(请求 ...

  3. XSS自动化检测 Fiddler Watcher & x5s & ccXSScan 初识

    一.标题:XSS 自动化检测 Fiddler Watcher & x5s  & ccXSScan 初识     automated XSS testing assistant 二.引言 ...

  4. 移动APP漏洞自动化检测平台建设

    移动APP漏洞自动化检测平台建设   前言:本文是<移动APP客户端安全笔记>系列原创文章中的第一篇,主要讲的是企业移动APP自动化漏洞检测平台建设,移动APP漏洞检测发展史与前沿技术,A ...

  5. LCD显示器缺陷自动化检测方案

    很牛的测试 参考: 1.https://www.radiantvisionsystems.com/ 2.https://www.radiantvisionsystems.com/node/275 LC ...

  6. 《阿里巴巴 Java 开发规约》自动化检测插件安装及体验

    2017 开春之际,有助于提高行业编码规范化水平的<阿里巴巴 Java 开发手册>首次面世.汇聚阿里集团近万名技术精英的经验知识,这套高含金量的手册一经公开,便引起业界普遍关注和学习. 历 ...

  7. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战

    大家好,先自我介绍一下,我是王睿.之前在Facebook/Instagram担任AI技术负责人,现在DataPipeline任Head of AI,负责研发企业级业务异常检测产品,旨在帮助企业一站式解 ...

  8. Python自动化运维 - Django(三)CSRF - Cookie&Session

    CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求 ...

  9. [ 中危 ] 发布处存在CSRF及CSRF设想

    漏洞存在于菜品发布处,使用A账号在添加/发布菜品的时候拦截数据包,使用burpsuite构造 CSRF的POC,再用B账号打开该HTML POC ,生成菜品. 该CSRF400RMB,主要因为是核心业 ...

随机推荐

  1. day06 数字类型,字符串类型,列表类型

    一:整型int# ======================================基本使用======================================# 1.用途:记录年龄 ...

  2. 【python】多进程共享变量

    有一个字典变量,需要在多个进程间共享 使用Manager, 下面是一个小例子. 注意使用json前需要将类型转换. #!/usr/bin/python # coding=utf-8 import js ...

  3. django----注意事项

    不用带参数 必须要带参数:

  4. C++ 使用LockWorkStation()的过程遇到的问题

    关于函数“LockWorkStation()”,参见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa376875.aspx Ho ...

  5. 微信小程序 Video默认横屏

    wxml文件 <video id='myvideo' src='你的视频文件路径'> </video> js文件 onLoad: function (options) { va ...

  6. 论文阅读笔记二十七:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(CVPR 2016)

    论文源址:https://arxiv.org/abs/1506.01497 tensorflow代码:https://github.com/endernewton/tf-faster-rcnn 室友对 ...

  7. Controller中方法返回值其他类型需要添加jackson依赖

    第一个 第二个: 第三个 https://www.cnblogs.com/codejackanapes/p/5569013.html:json的博客园 springmvc默认的是:2.Jackson: ...

  8. Django中模板使用

    第一步:配置 1.在工程中创建模板目录templates. 2.在settings.py配置文件中修改TEMPLATES配置项的DIRS值:TEMPLATES = [ { 'BACKEND': 'dj ...

  9. windows下KafkaOffsetMonitor下载及安装

    KafkaOffsetMonitor是一个可视化工具的jar包,如KafkaOffsetMonitor-assembly-0.2.1.jar,用来来监控kafka的使用状态. 一.下载地址 https ...

  10. 010-Python-socket编程

    客户端/服务器的架构 物理层:网卡,光缆,双绞线 数据链路层:包含源mac地址和目标的mac地址,通过广播通讯 网络层:跑的IP协议,IP地址可以定义到一个子网:通过ARP协议可以解析为mac地址: ...