XSS之旅(1-13,16)

站在前辈的肩膀上写下自己想法。

环境准备

PHP study
XSS-game-master 源码

level1

① 审计代码

对参数的输入输出没有做严格过滤。
在这里插入图片描述

② 解题思路

直接构造 js 脚本

?name=<script>alert('xss')</script>

如果 phpstydy 默认开启 magic_quotes_gpc 的话,会将单引号进行转义,即在单引号之前添加一个反斜杠,可以使用以下 payload 进行绕过

?name=<script>alert(/xss/)</script>

也可以使用以下代码对转义添加的反斜杠进行删除。

if(get_magic_quotes_gpc)
{
	$str = stripcslashes($str);
}

level 2

① 审计代码

  1. 使用 get 方法直接获取用户输入。
  2. 使用 htmlspecialchars() 函数对参数进行转义然后返回给浏览器进行输出
  3. 直接在 input 标签中输出。
htmlspecialchars()函数定义及用法

在php中,htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,
返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个
空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志;
被转换的预定义的字符有:
&:转换为&amp;
":转换为&quot;
':转换为成为 '
<:转换为&lt;
>:转换为&gt;

在这里插入图片描述

② 解题思路

闭合 input 标签,然后插入脚本

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

闭合之后的 input 标签如下,后面多余的部分由于 html 有一定的容错率,所以不影响。
在这里插入图片描述

level 3

① 审计代码

在这里插入图片描述

② 解题思路

  1. 单引号闭合
  2. 相比较 level 2,在 input 标签中使用 htmlspecialchars() 函数进行转义,考虑用 on 事件进行绕过,注意使用注释符。
' onclick = alert('xss')// 
或者
' onmouseover = alert('xss')//

level 4

① 审计代码

对尖括号进行过滤,替换为空。
在这里插入图片描述

② 解题思路

  1. 双引号闭合
  2. on 事件绕过,结合注释符
" onclick = alert('xss')//
或者
" onmouseover = alert('xss')//

level 5

① 代码审计

  1. 对输入转换为小写
  2. 对关键字进行过滤
    在这里插入图片描述

② 解题思路

  1. 关键字过滤不全,可以使用 a 标签
  2. 双引号闭合
"><a href = "javascript:alert('xss')">click me

level 6

① 审计代码

  1. 直接获取用户输入参数
  2. 对关键字进行转义
  3. 直接输出在 input 标签
    在这里插入图片描述

② 解题思路

相比 level 5,添加了更多的关键字进行转义,但是对用户输入的参数没有进行转换为小写,所以可以用大写绕过。

"><SCript>alert('xss')</scRipt>

level 7

① 代码审计

  1. 将用户的输入参数转为小写
  2. 将关键字替换为空
    在这里插入图片描述

② 解题思路

对关键字替换为空且只替换一次。故可以采用双写绕过。

"><scrscriptipt>alert('xss')</scrscriptipt>

level 8

① 代码审计

  1. 将输入转换为小写
  2. 对关键字进行转义
  3. 在 input 标签中将输入进行 HTML 实体化
    在这里插入图片描述

②解题思路

使用为协议绕过。javascript:alert(‘xss’)
同时要对 script 进行 HTML 编码

注意:<img src=1 onerror="javascript:%61lert(1)"> 不可成功执行
因为href属性会跳转到其中的URL,而会进行URL解码,onerror属性只会执行JS,不跳转
同时后面的url编码可以再做一次entity(HTML实体)编码:
java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert('xss')

level 9

① 代码审计

相比 level 8 ,此关多了一个检测 http:// 的步骤
在这里插入图片描述

② 解题思路

  1. 在输入参数中添加 http:// 字段
java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert('http://')

level 10

① 代码审计

  1. 有两处输入,keyword 和 t_sort,但只有 t_sort 有效。
  2. 对参数的尖括号进行替换为空
  3. 有效的 input 标签类型为 hidden
    在这里插入图片描述

② 解题思路

  1. 使用 t_sort 接受用户输入
  2. 使用 on 事件进行尖括号绕过
  3. 将 t_sort 的 input 标签中的类型有隐藏设置为可见
  4. 双引号闭合
" onclick = alert('xss') type = "text"
或者
" onmouseover = alert('xss') type = "text"

level 11

① 代码审计

  1. 两处输入:keyword 和 t_sort
  2. keyword 和 t_sort都是以 HTML 实体输出,且 t_sort 的 input 标签还是隐藏的,htmlspecialchars() 函数能转义双引号。
  3. referer 参数过滤尖括号之后直接输出
    在这里插入图片描述

② 解题思路

使用 burpsuite 改包,将 referer 参数的后面添加 on 事件
注意:必须是截取从 level10 到 level11 的请求包才有 referer 参数
(或者使用 Herder Modify 插件修改 HTTP 头部,更方便!!!)

(referer参数)" οnclick=alert('xss') type = "text"
或者
(referer参数)" onmouseover=alert('xss') type = "text"

在这里插入图片描述

level 12

① 审计代码

相比 level 11,此时获取的是 HTTP 请求包的 user_agent 参数
在这里插入图片描述

② 解题思路

  1. 修改数据包的 user_agent 参数
  2. 使用 on 事件
  3. 双引号闭合
(user_agent 参数)"onclick = alert('xss') type = "text"
或者
(user_agent 参数)"onmouseover = alert('xss') type = "text"

在这里插入图片描述

level 13

① 审计代码

相比较 level 12 ,此 level 获取 cookie 参数
在这里插入图片描述

② 解题思路

截包修改 cookie 参数
在这里插入图片描述

level 16

① 审计代码

  1. 对输入参数转换为小写
  2. 对空格进行转义
  3. 参数输出页面
    在这里插入图片描述

② 解题思路

  1. 使用 img 标签
  2. 用 %0a 或 %0d 代替空格
?keyword=<img%0Dsrc=1%0Aonerror=alert(1)>

总共20个关卡,剩下的还没掌握。

                                                                                                                         猪头
                                                                                                                      2020.1.8
发布了21 篇原创文章 · 获赞 3 · 访问量 649

猜你喜欢

转载自blog.csdn.net/LZHPIG/article/details/103883029