CSRF攻击可以利用用户已经上岸或已经授权的状态,假造合法用户发出要求给受信赖的网点,从而实现在未授权的情形下实行一些特权操作。
1.2.CSRF攻击流程1)首先用户登录网站,并且生产本地的cookie。
2)用户在未上岸出网站的时候,访问攻击者构建的恶意网站。

当然若你关闭网站去访问恶意网站就会避免该问题,但不是绝对的,相信在日常利用中都会存在浏览器同时打开多个页面,很少说有人去访问一个网站的时候把其余的网站关闭。
同时cookie不一定在你关闭浏览的网站的时候就会急速过期,可能会有一个延迟。
1.3.CSRF利用条件1)用户成功登录干系的网站系统,同时能够实行相应的授权功能。
2)勾引目标用户访问了攻击者构建的恶意URL。
3)新的要求提交无需重新验证身份。
1.4.CSRF危害CSRF攻击的危害紧张来自攻击者以受害者的名义发送邮件、信息、盗取账号密码、购买物品等造成受害者的个人隐私透露、主要资料透露等,一句话概述便是CSRF的危害取决于受害者,受害者能够做的内容,那么攻击者同样也可以做,但是攻击者因此受害者的身份去做。
1.5.CSRF分类1.5.1.CSRF(GET)型get型紧张是通过URL恶意链接勾引用户点击,当用户处于访问网站的过程中,同时用户又点击了这个链接,那么就会触发修正。
比如当用户正在修正密码,比如修正的URL:/user.php?id=1&password=11111,意思便是用户把密码修正为1111,若攻击者把URL修正为URL:/user.php?id=1&password=123456789,然后通过社工手段进行勾引点击我们修正后的链接,那么当用户访问这个链接后就会把密码修正为123456789。
1.5.2.CSRF(POST)型同样是修正密码但是这次在URL中不会显示密码,而且是在post中,那么当攻击者对该网站进行抓包剖析全体数据包的布局,然后把干系的内容修正为其他用户的干系参数,然后同样是勾引用户去点击我们精心准备的WEB界面,那么当点击的时候就会自动进行提交,使其密码再次修正。
例如pikachu上构建的数据内容:
<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <script>history.pushState('', '', '/')</script> <form action="http://192.168.10.150/pikachu/vul/csrf/csrfget/csrf_get_edit.php"> <input type="hidden" name="sex" value="boy" /> <input type="hidden" name="phonenum" value="116266565656" /> <input type="hidden" name="add" value="nba lakes" /> <input type="hidden" name="email" value="kobe@pikachu.com" /> <input type="hidden" name="submit" value="submit" /> <input type="submit" value="Submit request" /> </form> </body></html>
1.6.CSRF案例1.6.1.环境准备
靶机:pikachu靶场
攻击者:Windows10
用户:Windows10
1.6.2.CSRF(GET)型案例kobe用户真正访问pikachu,并且在登录的状态。
攻击者通过对该网站修正密码部分的代码进行抓取。
然后修正干系的参数并构建出恶意的URL,同时把密码修正为1162665656565,并且输入一些勾引性字样。
url:<a href="http://192.168.10.150/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=116266565656&add=nba+lakes&email=kobe%40pikachu.com&submit=submit">点一下即可中奖</a>
当用户访问攻击者发过来的链接后,同时自傲满满的以为自己能够中奖,并点击了一下。但在pikachu中用户的密码已经被修正了。
1.6.3.CSRF(POST)型案例
同样的用户在登录pikachu后,并在登录状态。
攻击者对该网站进行抓包获取数据包内容,然后对数据包的内容进行剖析,并把干系的关键字修正。
利用BurpSuite天生CSRF的POC代码,并复制下来,这里须要把稳的是社区版的BurpSuite是没有这个功能的。
并且把value地方的111111修正为123456789,这里我忘却修正了,到创建网页的时候才修正。
设定一个勾引性的网页,让其用户进行点击,当用户访问这个页面的时候,同时点击这个按钮后,那么pikachu的密码就会被修正。
1.7.CSRF防御方法1.7.1.验证HTTP Referer 字段
在http中存在referer字段,它是用来记录http要求的来源地址,常日情形下访问一个网站要求是来自同一个网站的,但是如果攻击者想要履行CSRF攻击,那么攻击者只能在他自己的网站构建要求,当用户访问的时候访问的referer是指向黑客自己的网站地址。
以是若想要戒备CSRF攻击,网站只须要对每一次的操作都进行referer验证,若以bank.example 开头的域名,解释是自己的要求,若是其他的域名则可以判断可能存在CSRF攻击。
1.7.2.在要求地址中添加 token 并验证CSRF 攻击之以是能够成功,是由于黑客可以完备假造用户的要求,该要求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情形下直策应用用户自己的 cookie 来通过安全验证。
要抵御 CSRF,关键在于在要求中放入黑客所不能假造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 要求中以参数的形式加入一个随机产生的 token,并在做事器端建立一个拦截器来验证这个 token,如果要求中没有 token 或者 token 内容禁绝确,则认为可能是 CSRF 攻击而谢绝该要求。
1.7.3.在 HTTP 头中自定义属性并验证这种方法也是利用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 要求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类要求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入个中。
这样办理了上种方法在要求中加入 token 的不便,同时,通过 XMLHttpRequest 要求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 透露到其他网站中去。
然而这种方法的局限性非常大。XMLHttpRequest 要求常日用于 Ajax 方法中对付页面局部的异步刷新,并非所有的要求都适宜用这个类来发起,而且通过该类要求得到的页面不能被浏览器所记录下,从而进行提高,退却撤退,刷新,收藏等操作,给用户带来不便。
其余,对付没有进行 CSRF 防护的遗留系统来说,要采取这种方法来进行防护,要把所有要求都改为 XMLHttpRequest 要求,这样险些是要重写全体网站,这代价无疑是不能接管的。
1.8.CSRF漏洞挖掘1)最大略的方法便是抓取一个正常要求的数据包,如果没有Referer字段和token,那么极有可能存在CSRF漏洞
2)如果有Referer字段,但是去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
3)随着对CSRF漏洞研究的不断深入,不断呈现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等
2.SSRF做事器端要求假造2.1.SSRF阐明SSRF(Server-Side Request Forgery:做事器端要求假造) 是一种由攻击者布局形成由做事端发起要求的一个安全漏洞。
并且SSRF攻击的目标是外网无法访问到的内部系统,同时要求都是又做事端发起的,以是做事端能够要求到与其自身相连接的与外网隔离的内部系统。类似于当作跳板进行攻击。
2.2.SSRF攻击流程1)攻击者与做事器构建要求。
2)做事器向客户端发送构建的要求。
3)客户端相应做事器发送的要求。
4)做事器向攻击者返回客户真个要求。
2.3.SSEF攻击危害1)可以对外网、做事器所在内网、本地进行端口扫描,获取一些做事的banner信息。
2)攻击运行在内网或本地的运用程序(比如溢出)。
3)对内网web运用进行指纹识别,通过访问默认文件实现。
4)攻击内外网的web运用,紧张是利用get参数就可以实现的攻击(比如struts2,sqli等)。
5)利用file协议读取本地文件等。
2.4.SSRF利用条件2.4.1.web功能挖掘1)分享:通过url地址分享网页内容。
2)转码做事:通过URL地址把原地址的网页内容调优使其适宜手机屏幕浏览。
3)在线翻译:通过URL地址翻译对应文本的内容。
4)图片的下载与加载:通过URL地址加载或下载图片,图片加载远程图片地址此功能。
5)图片、文章收藏功能:通过URL记录图片的地址,或者通过收藏文章的地址。
6)未公开的API实现及调用URL的功能:有些网站通过api获取远程地址xml文件来加载内容。
2.4.2.URL关键字挖掘share、wap、url、link、src、source、target、u、display、sourceURl、imageURL、domain
2.5.SSRF伪协议2.5.1.伪协议分类file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典做事器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 大略文件传输协议
gopher:// 分布式文档通报做事,可利用gopherus天生payload
当然伪协议不止这些,可以自行百度搜索,下面就举一些例子进行干系的测试,并且看看效果。
2.5.2.本地环境搭建靶机:192.168.10.150
攻击者:127.0.0.1
php代码:<meta http-equiv="Content-Type:text/html;charset=utf-8" /><form action="" method="post">想翻译的网站:<input type="text" name="url"><br><input type="Submit" name="Submit" value="Cheak!"></form><?php$_POST['url'];$ch =curl_init();curl_setopt($ch, CURLOPT_URL,$_POST['url']);curl_setopt($ch, CURLOPT_HEADER,0);curl_exec($ch);curl_close($ch);?>
2.5.3.探测端口是否开放 2.5.3.1.案例
探测内网其他做事器IP开放那些端口。
输入内容:http://192.168.10.150:3306
通过页面反馈能够看出内网中并无192.168.10.151这个地址,那么就更没有3306的端口开放了。
这里只须要看页面的加载是否正常就能够判断出来了,若内部存在这个ip且开放3306端口了,那么即会给出结果,如下面的图。
当然如果你想要测的更多,那么就可以利用字典对IP和端口进行一个一个测试,这样就能够进行对内网测试了。
2.5.4.file协议 2.5.4.1.file协议阐明
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd或者file:///C:/Windows/win.ini,这种URL Schema可以考试测验从文件系统中获取文件,把稳这里是只能访问靶机系统。
2.5.4.2.file协议案例构建的URL:http://192.168.10.150/pikachu/vul/ssrf/ssrf_curl.php?url=file:///C:/Windows/win.ini
2.5.5.web指纹探测 2.5.5.1.web指纹探测阐明
web指纹实在便是测试内部会不会存在一些其他的做事没有对外利用开放的,比如phpMyAdmin等一些运用或者做事。
2.5.5.2.web指纹探测案例比如我这里就探测了一下靶机是否存在phpMyAdmin数据库管理系统,通过反馈这里是存在的。这里可以不单单可以测试本地,还可以测试其他的IP上是否存在phpMyAdmin数据库管理系统。
输入内容:http://192.168.10.150/phpMyAdmin
2.5.6.dict协议 2.5.6.1.dict协议阐明
dict://:透露安装软件版本信息,查看端口,操作内网redis访问等
2.5.6.2.dict协议案例比如我这里探测一下数据库的版本。这里也是可以测试其他做事器的数据库版本,不同于file只能测试本地。
输入内容:dict://192.168.10.150:3306/info
2.5.7.ftp协议 2.5.7.1.ftp协议阐明
ftp想必都知道实在便是个文件共享做事,它许可客户端从远程主机获取文件或将文件上传至远程主机。
2.5.7.2.ftp协议案例实在从箭头指的就能看出来,我这台靶机是没有开启FTP做事的。当然ftp访问还是会存在输入账号密码的情形,当做事器未开启匿名访问的时候就须要输入账号密码了。
输入内容:ftp://192.168.10.150:21
2.6.SSRF绕过
1)限定域名时添加@进行绕过。
如:http://baidu.com/?url=http://baidu.com@google.com/
2)添加端口绕过。
如:http://baidu.com/?url=http://google.com:443
3)利用[::]绕过。
如:http://baidu.com/?url=http://[::192.168.10.150]
4)利用句号绕过。
如:http://baidu.com/?url=http://192。168。10。150
5)编码绕过。
如:十六进制http://baidu.com/?url=http://c0.a8.6d.96
2.7.SSRF防御1)限定要求的端口,并且只许可访问http和https的要求。
2)过滤返回的信息,并验证返回的是否符合标准,若不是标准的信息,那么直接进行过滤。
3)从做事器限定访问的端口,禁用不须要的端口。
4)限定内网访问的ip,一些没必要交互的做事器之间禁止访问。
5)禁止不必要的协议,例如FTP不要随便设置匿名访问。