xss-labs靶场训练(10-13关)

第十关

先用试试
xss-labs靶场训练(10-13关)_第1张图片
这里发现一个隐藏的form表单,里面有3个隐藏的变量:t_link、t_history、t_sort
把三个参数都传进去试试看:

http://192.168.121.129/xss/level10.php?keyword=well done!&t_link=1&t_history=2&t_sort=3

在这里插入图片描述
发现t_sort可以传入参数,构造Payload:

t_sort=<script>alert(/xss/)</script>

在这里插入图片描述
尖括号被过滤掉了,尝试一下用onclick弹窗。
Payload:

http://192.168.121.129/xss/level10.php?keyword=well done!&t_sort="type=text οnclick=alert(1)//

因为输入框被隐藏了,得利用type="text"把输入框显示出来,这样才能点击输入框触发弹窗。
在这里插入图片描述
成功弹窗
xss-labs靶场训练(10-13关)_第2张图片

后台关键代码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?>

这里把t_link、t_history、t_sort三个变量都隐藏了,而且只有t_sort可以接收参数,同时也把t_sort的尖括号过滤掉了。利用onclick时件可以成功绕过。

第十一关

来到先查看一下前端代码,看它又出什么新花样
在这里插入图片描述
这里比上一关多了个变量,而且值还是上一关的URL,初步判断这是个referer,
还是先试一下上一关的方法先
xss-labs靶场训练(10-13关)_第3张图片
估计后台直接在传入参数那实体化了。那就在这个新增加的参数那下手吧,利用OWASP ZAP截断代理,把Referer改成payload:

"type=text onclick=alert(1)//

xss-labs靶场训练(10-13关)_第4张图片

成功绕过
xss-labs靶场训练(10-13关)_第5张图片
后台关键代码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?>

这里用到了一个PHP预定义的超级全局变量$_SERVER,这是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
$_SERVER['HTTP_REFERER']作用:引导用户代理到当前页的前一页的地址。

第十二关

先查看一下前端代码
在这里插入图片描述
这里把上一关的Referer改成了User-Agent
用OWASP ZAP截断代理,把User-Agent改成payload:"type=text onclick=alert(1)//
xss-labs靶场训练(10-13关)_第6张图片
成功绕过
xss-labs靶场训练(10-13关)_第7张图片

后台关键代码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?>

这里用了HTTP_USER_AGENT来获取用户的相关信息的,包括用户使用的浏览器,操作系统等信息,把这段信息改成payload即可绕过。

第十三关

这关的新变量是t_cook了,看名字有可能是cookie
xss-labs靶场训练(10-13关)_第8张图片

用OWASP ZAP截断代理,把cookie改成payload:"type=text onclick=alert(1)//
xss-labs靶场训练(10-13关)_第9张图片
没变化
xss-labs靶场训练(10-13关)_第10张图片
仔细看一下原来还有个user=,把payload加再user=后面
xss-labs靶场训练(10-13关)_第11张图片
成功绕过
xss-labs靶场训练(10-13关)_第12张图片

后台关键代码:

 
setcookie("user", "call me maybe?", time()+3600);
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?>

这里的$_COOKIE变量用于取回 cookie 的值,$_COOKIE["user"]的作用是取回名为 “user” 的 cookie 的值,因此,在user后面插入payload即可绕过。

总结

这几关都利用了隐藏表单,而且有多个隐藏变量。
绕过思路:

  • 先测试一下哪些变量可以传参数
  • 然后构造payload触发弹窗
  • 如果是onclick或者 onmouseover时件得把隐藏的输入框显示出来
  • 如果变量涉及到http报文的相关信息,可以利用代理软件拦截数据包,然后注入payload

你可能感兴趣的:(xss)