第一关
标签注入
<script>alert(1)</script>
没有任何防护措施
第二关
我们输入的数据,是在表单中的value属性内,所以需要先闭合input标签
"><script>alert(1)</script>
法二: 闭合value属性,然后在input标签内加入事件属性
" οnclick="alert(1)
查看源码: 在h2标签中有.htmlspecialchars(
s
t
r
)
,
所
以
在
该
地
方
虽
然
有
回
显
我
们
的
恶
意
代
码
,
但
是
不
能
x
s
s
注
入
而
在
i
n
p
u
t
标
签
中
:
<
i
n
p
u
t
n
a
m
e
=
k
e
y
w
o
r
d
v
a
l
u
e
=
"
′
.
str),所以在该地方虽然有回显我们的恶意代码,但是不能xss注入 而在input标签中:<input name=keyword value="'.
str),所以在该地方虽然有回显我们的恶意代码,但是不能xss注入而在input标签中:<inputname=keywordvalue="′.str.'"> 对输入的变量没有任何过滤,导致了xss的发生
第三关
' onclick='alert(1)
输入script,"<“会被转换为html编码,所以这一关无法采用标签,因为标签都是带有”<"的,因此采用事件,需要闭合标签的属性: 可以通过查看网页的html页面,确定闭合方式,以及是否闭合 查看源码:
<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"
<input name=keyword value='".htmlspecialchars($str)."'>
所有的地方都被htmlspecialchars函数过滤了 htmlspecialchars 函数把一些预定义的字符转换为 HTML 实体(就是变量变成字符串不能用了) 该函数可以过滤“<”“>”““ ”,但是不会过滤单引号 而且value的闭合也是采用单引号,所以会有xss漏洞
第四关
代码审计:
s
t
r
2
=
s
t
r
r
e
p
l
a
c
e
(
"
>
"
,
"
"
,
str2=str_replace(">","",
str2=strr?eplace(">","",str); 用双写绕过吗? 试了一下发现不行,那就用利用事件属性(没有尖括号的payload)
" οnclick="alert(1)
第五关
<script>alert('test')</script> 会被替换为<scr_ipt>alert('test')</script> 试了大小写也不行 on也被过滤了 那就用没有script的payload
"><a href="javascript:alert(1)" #点击图片就会触发 或者
"><a href=javascript:alert('hack') > hack</a>
闭合前后标签属性效果如下图 原理: 标签用于定义超链接,用于重一个页面链接到宁一个页面。元素最重要的属性就是href属性,用于指定链接的目标,而且该标签还可以用于执行JavaScript语句。 代码审计发现:
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
先对字符串转小写,再用字符串匹配对关键字进行替换,所以大小写绕过才会没用
第六关
先用<script> 标签测试发现被替换成<scr_ipt> 用"><a href=javascript:alert('hack') > hack</a> 发现href也用不了
on也过滤了,过滤的东西挺多的,看源码发现
但是过滤了这么多东西,居然没有做大写转小写
"> <Script>alert("hack")</script>
第七关
关键字都被替换成空格,这种一般就用双写绕过
"> <Sscriptcript>alert("hack")</sscriptcript>
第八关
对我们输入语句的关键字script进行添加符号干扰,并转为了小写,而且猜测还对其进行htmlspecialchars()函数 构造语句,因为下面有超链接,现在只需要绕过JavaScript的关键字黑名单 对JavaScript中的某一个或某一部分的编码用html实体形式的ascii码即可,加入仅仅转换r,则大小写形式的html实体都可以,也就是R(R)和r(r) HTML实体由三部分组成,”&#+ASCII+;“ payload:
javascRipt:alert(1)
如果不行就url编码一下
javasc%26%2382;ipt:alert(1)
第九关
strpos()用于查找指定字符串第一次出现的位置,返回整数型。如果没有找到该字符串,则返回 false。 这里就是判断字符"http://"是否在字符串中出现,如果没出现就判定非法链接 这里用上一题的payload再加一个http://将其注释掉就可
javascRipt:alert(1)
第十关
第十关开始没有搜索框注入也没有超连接了 看源代码发现 接收了两个参数,其中对第二个参数t_sort没有进行实体化 但是进行了小的过滤 如何通过这个传参呢?–拼接 这个时候转换思路,我们改变其type,使其显露出来,再用onclick来触发。点击一下即可触发事件
?keyword=1&t_sort=" type="text" οnclick="alert('xss')
第十一关
进入到本页面查看其前端源码,发现又多了一个参数,先不管它是什么,首先想一下我们能不能利用这个参数xss呢 打开源码一看 这个参数是referer字段 可以构造语句用hackbar 将参数传入 payload:
" type="text" οnclick="alert('xss')
第十二关
像这种页面除了一个图片啥也没有的题,要么就扫一下有没有后门,要么就好好看一下前端源码 发现是 payload和上一题一样
第十三关
一样是用hackerbar,把值传到cooik里,payoload和上题一样
第十四关
很怪,这一关,没有注入点,整个页面是一个静态页面
第十五关
查看前端源码发现新参数ng-include ng-include指令一般用于包含外部HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一域名下,也就是要调用同一域名下的其他网页
?src='level1.php?name=<img src=1 onerror=alert(111)>'
第十六关
尖括号没变,/和script还有空格被ban掉了 前面sql注入绕过空格的知识用上 尖括号没被ban掉就用标签替代 构造payload为:
<a%0dhref='javas%0acript:alert("hack")'>xss
第十七关
发现其两个变量使用=符号拼接的形式被加入到标签中,该标签用于一些插件如flash等的插入,那这就是一个突破口 常规加尖括号的语句会被转为html实体字符,那就只有用事件触发来写,而且事件触发刚好是用等号来连接。 所以我们在b的后边加入onclick(点击后触发)或则onmouseover(鼠标移动到上方触发)触发器来进行恶意语句利用 构造payload
http://127.0.0.1/xss-labs/level17.php?arg01=a&arg02=b onmouseover=alert('hack')
第十八关
我怎么觉得十八关和十七关是一样的… 注:第17、18关都可以通过flash xss注入
|