【bWAPP】XSS总结

XSS-Reflected(GET与POST)解法很常规,low和mediu级别只过滤单引号,high级别用htmlspecialchars()和htmlentities(),总结以下二者区别吧。

htmlspecialchars()与htmlentities()的区别

  • htmlspecialchars()将以下字符转换为HTML实体

    &成为&

    "成为"

    '不变 (设置了ENT_QUOTES后编码为''

    <变为&lt;

    >变为&gt;

    可选类型:

    ENT_COMPAT----默认,仅编码双引号

    ENT_QUOTES----编码双引号和单引号

    ENT_NOQUOTES----不编码任何引号

  • htmlentities()将所有使用的字符转换为HTML实体

    将所有html标签和符号,甚至中文全部转换为html实体

1、XSS-Reflected(JSON)

low级别

先扔一个payload:<script>alert(/xss/)</script>

看下网页源码:

原来输出点在json代码中。

尝试闭合,构造payload:"}]}';alert(/xss/);//

注意一定要注释后面的js代码//

成功弹窗!

medium级别

看样子是被html实体化编码了,很难绕过。

high级别也是实体化编码。

2、XSS-Reflected(AJAX/JSON)

low和medium级别

本页面是xss_ajax_2-1.php,通过Ajax调用xss_ajax_2-2.php完成查询的

输入:<img src=1 onerror=alert(/xss/)>

或者<svg onload=alert(/xss/)>

但是用<scritp>alert(/xss/)</script>不行

因为由于根据HTML5规范,innerHTML中的script标签会被当做纯文本解释,不会执行(详见)。因此不能直接插入<scrit></script>

high级别

尝试:<img src=1 onerror=alert(/xss/)>

如图所示,已被实体化编码,很难绕过。

源码分析:

//xss_ajax_2-1.php
<?phpif($_COOKIE["security_level"] == "2"){?>JSONResponse = JSON.parse(xmlHttp.responseText);
<?php}else{?>JSONResponse = eval("(" + xmlHttp.responseText + ")");
<?php}
?>

由以上源码可得,low级别和medium级别AJAX传入的json会用eval()去解析,high级别会用JSON.parse()去解析。

总结:

json.parse与eval()的区别:

// JSON.parse()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json);    //解析为JSON对象//eval()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = eval('(' + json + ')'); //解析为JSON对象

二者都可将JSON字符串解析为对象

相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。

3、XSS-Reflected(AJAX/XML)

low级别

还是一样本页面为xss_ajax_1-1.php,通过ajax跳转到xss_ajax_1-2.php解析

payload_1:<a xmlns:a='http://www.w3.org/1999/xhtml'><a:body onload='alert(/xss/)'></a>

xmlns是XML Namespaces的缩写,加载网站时执行alert(/xss/)

payload_2:&lt;img src=0 onerror=&quot;alert(1)&quot;&gt;

medium级别

使用addslashes()对参数进行了转义’、"、\

换一个payload:&lt;img src=0 onerror=&quot;alert(1)&quot;&gt;

HTML 和 XML 都有一些符号被保留使用,它们不能在 XML 代码中用作内容。例如,< 和 > 符号被用作 XML 标签的开头和结尾。要显示这些特殊字符,就要使用字符实体。有些特殊的字符或符号还不能直接使用键盘输入。可以使用字符实体来显示这些符号或特殊字符。

在这个例子中对payload进行html实体编码绕过了addslashes()的转义,然后再xml中重新还原成了原来的payload从而触发xss。

相关知识点:html实体编码的作用。

high级别

采用了htmlspecialchars()实体化编码,很难绕过。

4、XSS-Reflected(Back Button)

low级别:

点击按钮查看页面源代码

用burp抓包看看:

发现onclick中的值来自referer字段。

修改referer字段的值为:'"><img src=1 onerror=alert(/xss/)>

放包:

mediu级别

这个级别用addslashes()转义了’",但是上面的payload依然可以使用,感觉转义没起作用,有点奇怪,哦对了,反斜杠对js有效,而对html不起作用。

不过用其他方法也可以,比如:javascript:alert(/xss/)

high级别

使用了htmlspecialchars()实体化转义,绕过比较难。

5、XSS-Reflected(Custom Header)

low&medium级别:

根据提示:

添加bWAPP头:

high级别:

依然是htmlspecialchars()编码,很难绕过。

6、XSS-Reflected(Eval)

low&medium级别

老规矩,先输入一个<script>alert(/xss/)</script>测试一下

查看页面源码发现输出点在script标签内:

调整一下payload:

弹窗成功!

eval函数:如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。eval() 是一个危险的函数,它使用与调用者相同的权限执行代码,所以尽可能的不要去使用它,以防被其他人员植入恶意代码,相似的 Function 就不容易被攻击。

7、XSS-Reflectde(HREF)

low级别

随便输入一个数字:

发现跳转到了一个投票页面:

分析网页源代码,可以看出有两个输出点,一个在p标签内,一个在herf中。

扔一个payload进去试试:<script>alert(/xss/)</script>

发现p标签中的payload已被实体化编码,而herf中丝毫没动。

构造payload闭合a标签:></a><img src=1 onerror=alert(/xss/)>

弹窗成功!

medium级别

使用low级别的payload尝试一下:

发现href中的payload被url编码了。

查看源码:

发现medium级别和high级别都被url编码了。

8、XSS-Reflected(login From)

low级别

是一个登录表单:

尝试使用万能密码:(输入到姓名或密码框都可)

' or 1=1;"<img src=1 onerror=alert(/xss/)>"

实现原理:通过数据库报错将payload回显,从而触发xss

medium级别:

addslashes()转义’、",绕过比较难

high级别:

mysql_real_escape_string () 函数转义,绕过比较难。

受影响字符:\x00、\n、\r、\、’、"、\x1a

9、phpMyAdmin BBCode Tage XSS

显示是一个phpmyadmin上的一个BBcode的XSS,没复现过。

10、XSS-Reflected(PHP_SELF)

low&medium级别

前两个参数随便替换一个:<img src=1 onerror=alert(/xss/)>

high级别

已被htmlspecialchars()实体化编码。

11、XSS-Reflected(Referer)

low&medium级别

页面回显referer字段信息:

用burp抓包,添加referer字段,内容为payload:<img src=1 onerror=alert(/xss/)>当然其他也可以。

high级别

htmlspecialchars()实体编码。

12、XSS-Reflected(user-Agent)

与上一关类似,不再赘述。

13、XSS-Stored(Blog)

low&medium级别

直接输一个payload点提交:

如图所示,直接弹窗!刷新页面再次弹窗,说明存储型xss的伤害是持久的。

high级别

htmlspecialchars()函数实体化编码。

套路都是一样的,好无聊。。。。

14、XSS-Stored(Change Secret)

low级别

方法一:

在输入框测试payload无果

查看网页源代码,发现有一个名为login的隐藏的输入框。

用burp抓包,发现提交了三个参数:secret、login、action

抓包修改login的参数值以闭合input标签:

方法二:

直接在输入框输入payload:<script>alert(/xss/)</script>

发现已成功插入到数据库中。

登录SQL Injection(Login Form/User)页面时,用bee用户登录,点击提交即触发xss

medium&high级别

抓包发现有token值:

token值是随机的,而且后端有校验,这下裂开。。

尝试输入框输入payload,结果进数据库之前就被实体编码了。

无论是mediu级别还是high级别都进行了html实体编码。

卒。。。

15、XSS-Stored(Cookies)

埋点在cookie篡改

low级别

修改genre参数值就可修改cookie值

medium级别

对genre参数的值进行了html实体编码

high级别

无法通过修改genre来修改cookie

后端进行了白名单过滤。

16、XSS-Stored(User-Agent)

low&medium级别

直接将payload插入User-Agent字段

刷新页面依然弹窗,伤害持久。

high级别

有htmlspecialchars()实体编码。


总结:

关键函数:

php:

htmlspecialchars() 编码<>、’、"、&

htmlentities() 将所有html标签和符号,甚至中文全部转换为html实体

addslashes() 转义’、"、\、null

mysql_real_escape_string () 转义\x00、\n、\r、\、’、"、\x1a

js:

innerHTML中的script标签会被当做纯文本解释,不会执行(详见)。

json.parse与eval()的区别:

相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。

【bWAPP】XSS通关记录相关推荐

  1. XSS-lab通关记录

    本文章为buuctf basic XSS-lab的通关记录,为个人学习记录,仅供参考 在学习xss-lab之前,先了解了一下xss攻击的原理,如下: 简述 人们经常将跨站脚本攻击(Cross Site ...

  2. Pikachu靶场通关记录(详细)

    Pikachu靶场通关记录 0x01 靶场介绍 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞. 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么 ...

  3. wechall靶场training系列通关记录

    wechall靶场Training系列通关记录 Training: Get Sourced 第一题很简单,获取藏在网页源代码中的密码.F12查看网页中的注释即可找到答案: Training: Steg ...

  4. vulntarget-b靶场详细通关记录

    vulntarget-b靶场详细通关记录 前言 这个靶场打了好几天才打下来,在上线msf和免杀过火绒还有psexec横向移动中卡了很久.而且这个靶场的通关资料较少,吐槽一下网上的相关文章很多关键步骤都 ...

  5. 6.bWAPP XSS

    6.bWAPP XSS 0x01.XSS - Reflected (GET) Low 输入的内容直接输出到页面中: 后台服务端没有对输入的参数进行过滤, 构造一个注入xss payload即可: &l ...

  6. 独孤九剑xss通关教程

    独孤九剑xss通关教程 独孤九剑第一式: 这里过滤了 =() 构造payload: ?data="><svg><script>%26%23x65%3B%26%2 ...

  7. 金庸群侠传X V1.0.0.5 通关记录

    金庸群侠传X V1.0.0.5 通关记录 posted on 2016-02-11 20:57 Jack1ee 阅读( ...) 评论( ...) 编辑 收藏 转载于:https://www.cnbl ...

  8. XSS表情包靶场通关记录

    平台 alert(1)https://xss.haozi.me 0X00 源码无防护,直接常规payload绕过 <script>alert(1)</script> <s ...

  9. 网络安全入门篇:bwapp靶场通关(更新ing)

    A1 -Injection HTML Injection - Reflected(GET) low 级别 low级别意味着没有任何检查输入·<h1>This is a test</h ...

  10. 050 XSS通关小游戏——xss challenge

    文章目录 一:下载与部署 二:通关过程 首页 level-01 没有任何机制 level-02 双引号闭合标签 level-03 单引号闭合标签+html事件 level-04 双引号闭合标签+htm ...

最新文章

  1. linux创建进程读共享写复制,Linux下进程的创建、执行和终止
  2. 客制化NVRAM的以太网地址
  3. suid shell
  4. DCMTK:CT采集类型FG类的测试
  5. 最小栈—leetcode155
  6. ArrayList源码浅析
  7. python 保存图片代码_最简单的selenium+Python自动右键保存图片
  8. 稳扎稳打Silverlight(30) - 2.0Tip/Trick之Silverlight.js, Silverlight.supportedUserAgent.js
  9. Jabber 创建一个application dial rule
  10. [MSDN]Design Guidelines for Developing Class Libraries with .NET Framework 4
  11. 条码打印工具-Bartender的使用
  12. 初学C语言 输出图形
  13. siege压力测试工具
  14. u盘安装LINUX键盘失灵,U盘装Win7系统进入pe后鼠标键盘失灵不能用怎么办?
  15. 利用VBA筛选重复数据
  16. linux获取网卡协议地址,读取linux下的网络设备的mac地址与发送原始数据包 (2011-11-23 20:11)...
  17. ioredis.js tutorial
  18. 关于多部门协作完成项目使用过程中出现问题互相推卸责任的问题
  19. 用XPath提取捧腹网笑话文本
  20. ROS系列——Ubuntu18.04下ros Melodic安装mavros过程中遇到问题及解决-定期更新版

热门文章

  1. java 将服务器的图片打包下载成.zip ,通过浏览器下载。
  2. heka 输出到mysql_heka - 基于Go开发的日志收集工具,可用Go或lua开发插件
  3. 006-Android-ContentProvider习题
  4. 光辉岁月-Beyond
  5. 启动错误Passenger::SecurityException “Line too long”
  6. 高德地图使用vue-amap 自定义点坐标
  7. MATLAB地图工具箱学习总结(二)大圆和恒向线
  8. 【Python】一元线性回归的分析
  9. 异常处理(二)---------Field * in * required a bean of type '*' that could not be found.
  10. 【渝粤教育】电大中专门店销售与服务技巧 (3)作业 题库