xss_labs 漏洞平台靶场练习 总结 wp

每日学习 每日持续更新ing~

文章目录

  • xss漏洞
    • 什么是xss
      • XSS分类
      • 构造xss思路
    • 靶场练习
      • level1
      • level2
      • level3
      • level4
      • level5
      • level6
      • level7
      • level8
      • level9
      • level10
      • level11
      • level12
      • level13
      • level14
      • level15
      • level16
      • level17
      • level18
      • level19-20

xss漏洞


什么是xss

xss(Cross Site Script),跨站脚本攻击

网页内嵌入HTML,CSS,JS代码

此漏洞也是网站存在相当多的漏洞,仅次于SQL注入,攻击者可以使用XSS来绕过访问控制,如同源策略。利用XSS可以窃取账号,网页挂马,发动拒绝服务攻击,发送垃圾邮件等等。

xss产生原因

xss形成的原因与SQL注入类似,也是由于程序员在开发过程中没有对用户提交的恶意数据做过过滤,转义而直接输出到页面,导致用户可以利用此漏洞去任意构造js,html代码插入到网页源代码中并执行。

和SQL注入不同的是xss不一定要和数据库交互。


XSS分类

  • 非持久性(反射型)–前端->后端->前端
  • 持久性(存储型)–前端->后端->数据库->前端
  • DOM型–前端

构造xss思路

主要:闭合语句

1.无任何waf 直接插入

2.对过滤了<> 可以尝试其他的语句 如 onlick=alert(1)

3.大小写绕过 双写绕过


靶场练习


level1

漏洞描述:get型注,在url中的name字段中输入,输入的内容会在页面回显。内容是直接显示在前端html标签之间,采用标签注入。

利用方法: ?name=


level2

漏洞描述:输入的数据,查看网页源码,内容被嵌套在表单中的value属性内,所以需要先闭合input标签,然后在注入代码,闭合标签。

playload: 123">//

在这里插入图片描述


level3

漏洞描述:后端利用htmlspecialchars()函数会将特殊字符进行转义,这里无法采用标签,因为标签都是带有”<"的。但该函数不会转义单引号,可以采用事件闭合标签

playload: ' onclick='alert(1)
在这里插入图片描述


level4

漏洞描述:输入的数据,查看网页源码,内容被嵌套在表单中的value属性内。这里只是过滤的左右尖括号,无法采用标签,闭合语句使用事件,双引号闭合

payload:" onclick="alert(1)


level5

漏洞描述:试探防御机制,限制了scripton字符---->替换成scr_pto_n ,使用a标签的js伪协议实现href属性支持javascript:伪协议构造poc 产生一个链接

payload:">在这里插入图片描述


level6

漏洞描述:限制了一系列的字符 但进行判断的是整个字符串,进行大小写绕过。

源码防御机制:

$str = $_GET["keyword"];
$str2=str_replace(",",$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);

payload:">


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:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

解码结果是: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"

xss_labs 漏洞平台靶场练习 总结 wp_第1张图片

xss_labs 漏洞平台靶场练习 总结 wp_第2张图片

源码防御机制:

$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"

xss_labs 漏洞平台靶场练习 总结 wp_第3张图片

源码防御机制:

$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事件会被当作普通文本

你可能感兴趣的:(web漏洞靶场)