get方式的html代码注入
漏洞url:http://range.anhunsec.cn:82/htmli_get.php
低级漏洞中,输入数据没有做校验,不经任何处理地接受用户数据
输入payload:
First name:
Last name:
或者输入payload:
<a href="https://www.baidu.com">baidu</a>
可跳转到百度页面
或者输入payload:<script>document.write(document.URL)</script>
document对象 :代表整个HTML 文档,可用来访问页面中的所有元素
document.URL:设置URL属性从而在同一窗口打开另一网页
document.write():动态向页面写入内容
或者输入payload:<script>alert(document.cookie)</script>
,弹cookie
或者输入payload:<script>alert(/xss/)</script>
,弹xss
输入low级别的payload:<script>alert(/xss/)</script>
,发现被全部显示
抓包,会发现/)<符号均被编码
0,1,2分别对应三个等级,可以查找对应的/bWAPP/bwapp/htmli_get.php文件,三个等级分别要进行不同的检测
中级漏洞中,黑名单机制,转义了部分危险数据
这里使用了urldecode函数,对字符串进行URL解码,返回的是已解码的字符串
所以可以在输入框输入编码后的代码,可以通过URL编码绕过
First name: %3Ch1%3Ehello%3C/h1%3E
Last name: %3Ch1%3Eworld%3C/h1%3E
输入部分转义数据,payload为:
%3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e
输入medium级别的payload:%3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e,发现被全部显示
高级漏洞中,使用了htmlspecialchars()函数过滤,把预定义的字符&," ,’ ,<,> 转换为 HTML 实体,是安全的,输入的代码没有被执行, 不可绕过
漏洞url:http://range.anhunsec.cn:82/htmli_post.php
操作同HTML Injection - Reflected (GET)一样,只不过是成了post方式。
输入payload:
First name:
Last name:
得到这样的结果
漏洞url:http://range.anhunsec.cn:82/htmli_current_url.php
正常情况下显示如下
由于url中输入自动转义成urlcode,在burp中还原成原始字符即可
构造url:http://range.anhunsec.cn:82/htmli_current_url.php?a=<script>alert('xss')</script>
burp抓包,将编码部分改成正常的
会看到弹出xss
尝试抓包修改为正常的并不能成功
查看源码
找到htmli current url.php文件后,发现这样的一段代码,发现在case"2"时要进行xss_check_3的检测
(xss_check_3见HTML Injection - Reflected (GET)的high级别)
漏洞url:http://range.anhunsec.cn:82/htmli_stored.php
发现有输入框,尝试一下xss注入,输入payload:<script>alert(/xss/)</script>
,弹xss
这次虽然显示已经添加,但是并没有弹窗,看源码
可以看到case"1"或case"2"都要进行sqli_check_3检测
function sqli_check_3($link, $data)
{
return mysqli_real_escape_string($link, $data);
}
PHP中的mysqli_real_escape_string()函数就是要转义在SQL语句中使用的字符串中的特殊字符
漏洞url:http://range.anhunsec.cn:82/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
iframe是可用于在HTML页面中嵌入一些文件(如文档,视频等)的一项技术。对iframe最简单的解释就是“iframe是一个可以在当前页面中显示其它页面内容的技术”
通过利用iframe标签对网站页面进行注入,是利用了HTML标签,实际上就是一个阅读器,可以阅读通过协议加载的活服务器本地的文件、视频等
我们这里发现,它包含了一个robots.txt的文件,我们试试其他的
构造url:ParamUrl=../admin/phpinfo.php&ParamWidth=250&ParamHeight=250
查看源码
没有对参数进行过滤,可以控制param标签的输入,构造url:ParamUrl=https://www.baidu.com&ParamWidth=250&ParamHeight=250
查看源码
function xss_check_4($data)
{
// addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!!
return addslashes($data);
}
可以看出medium不能控制paramurl的输入,所以只能通过控制ParamHeight和ParamWidth来实现注入
大体意思就是addslashes会在数据库查询中需要引用的字符(’,",\)前返回一个反斜杠字符串进行构造
构造url:ParamUrl=robots.txt&ParamWidth=250"></iframe><script>alert(/xss/)</script>&ParamHeight=250
查看源码
function xss_check_3($data, $encoding = "UTF-8")
{
// htmlspecialchars - converts special characters to HTML entities
// '&' (ampersand) becomes '&'
// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set
// '<' (less than) becomes '<'
// '>' (greater than) becomes '>'
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
htmlspecialchars()函数会把预定义的字符(&,’,",<,>)转换为 HTML 实体
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。
免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。
博客:
先知社区:
SecIN:
https://www.sec-in.com/author/3097
CSDN:
https://blog.csdn.net/weixin_48899364?type=blog
公众号:
FreeBuf: