文章目录
前言
文章同步于我的个人博客https://quan9i.top/pikachu,欢迎大家访问
感觉XSS挺有趣的,抽空刷一下XSS的小题
反射型XSS(get)
本来想着应该是没有什么限制的,但是输入的时候却发现貌似限制了长度,检查前端js代码

直接把20给它改成100

此时可以输入了,注入payload如下
<script>alert(document.cookie)</script>

方法二
虽然限制了长度,但我们还可以借助hackbar这种工具,对其进行注入

反射型XSS(post)
尝试简单sql注入登录后台,不过没弄出来,我这个菜鸡太菜了,此时我想的是扫描后端文件,看看能不能直接进入

用御剑扫描到了文件,但登录这个界面会因为没有登录而立即跳回登录界面,想想也是,这么简单就能绕过的话还登录干啥,无奈之下查看提示后进行登录,然后传入如下payload即可得到cookie
<body onload=alert(document.cookie)>

存储型XSS
发现没有什么过滤的,直接就是怒火焚身,啊呸,玩游戏玩多了,是获取cookie,构造payload
<img src=1 onerror=alert(document.cookie)>

DOM型XSS
本关先随便输入一下

发现这个东西他回显的不正常,猜想可能存在过滤啥的,看源代码

他还给出了提示,我们分析一下关键代码
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
在获取到id为text的值后赋值给变量str,str被拼接到了a标签中,我们知道a标签中href是个插入链接的,我们想执行我们的语句的话就必须要让这个href跟我们的语句无关,那想让他无关的话我们这时候就想到了将a标签闭合,此时那个href里还有个'需要给它闭合上,因此我们构造语句前加上'>即可,可能有师傅会问双引号为啥不用闭,这里双引号就作为href的值了,因此不用闭就行,我们构造payload如下
'> <img src=1 onerror=alert(document.cookie)>

当然,提示给的那种方法也是可以的,payload如下
'> <img src=1 onmouseover=alert(document.cookie)>
这种的话需要你鼠标点到那个图片那里就可以出现我们插入的了,原因是onmouseover事件是将鼠标指针移动到图像上时执行 JavaScript
DOM型XSS -X
输入后回显仍然不对,看源代码

这个自定义函数输出了一段话,就是这个就让往事都随风,都随风吧,因此一但有这句话出现,就说明自定义函数执行了,然后其实他的闭合方式是和上关一样的,不过上关引用的时候没有添加语句,是直接引用的,这关多了一个语句,它有个onclick属性,指向了我们自定义的函数,因此我们在输入我们的语句后,就已经存储到了domxss那个自定义函数里,但是我们需要把他调出来用,这个时候就需要借用onclick,好吧,其实说人话就是点一下那个先出来的超链接就可以了,构造payload同上
'><img src=1 onerror=alert(document.cookie)>

xss盲打
注入一些xss后没啥反应

暂时没啥思路,遇事不决先扫一下

发现有个管理员登录文件,进去看看

盲猜密码是123456,登录进去瞅瞅

给了个弹窗,这不就是我注入进去的吗

可以发现注入进去了,只不过不在界面上显示而已
xss之过滤
这关过滤了一些东西啊

这个我输入那么多,就出来一个>,我前面的<script没了,说明肯定过滤了<script无法直接使用的话,我们可以尝试大小写给它绕一下子,构造payload如下
<Script>alert(document.cookie)</Script>
执行结果

尝试用双写绕过,构造payload如下
<sc<scriptript>alert(1)</sc<scriptript>
不过结果不尽人意,还是被过滤了,说明这里用了正则表达式,应该是<(.*)s(.*)c(.*)这种方式,无论如何插入都会被过滤
方法二
其实除了scipt标签,还有很多可以使用,这里列举两个
<body onload=alert(document.cookie)>
<img src=1 onerror=alert(document.cookie)>

XSS之htmlspecialchars
首先我们需要了解一下这个函数
PHP htmlspecialchars() 函数
定义和用法
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
提示:要把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。
语法
htmlspecialchars(string,flags,character-set,double_encode)
参数 描述
string 必需。规定要转换的字符串。
flags 可选。规定如何处理引号、无效的编码以及使用哪种文档类型。
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
无效的编码:
ENT_IGNORE - 忽略无效的编码,而不是让函数返回一个空的字符串。应尽量避免,因为这可能对安全性有影响。
ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。
ENT_DISALLOWED - 把指定文档类型中的无效代码点替代成 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD;
实例
把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体:
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>
上面代码输出如下
This is some <b>bold</b> text.
其实就是把本来应该有特殊含义的标签给你转成实体了
这里猜测的话,他是默认那种情况,编码了双引号,现在的语句是<a href="插入">插入</a>这种形式,都会转为超链接那种形式,那我们给他添加一个点击标签,然后植入我们的恶意语句即可,看这个href我们href里还是空的,我们不需要他跳转到某个界面,因此我们直接输入#就可以,此时没有闭合,我们无法插入onclik属性,我们需要一个',这时闭合了,然后我们引入我们的onclick=alert(document.cookie),但是呢,我们的href标签本身他是有两个"的,还有一个在最后面,这个也需要闭合,因此我们在alert前面插入'即可,构造最终payload如下
#' οnclick='alert(document.cookie)

如果有师傅想问这种思路怎么来的,那就是测试,你本地输入12,对代码进行检查,就会看出他的格式是<a href="插入">插入</a>

XSS之href输出
沿用上关payload进行尝试,发现不行,查看js代码

发现单引号没用了,这里学习过后得知在a标签的href属性里面,可以使用javascript协议来执行js,因此我们构造payload如下
javascript:alert(document.cookie)

XSS之js输出
我们先随便输入,然后查看源代码

123214是我输入的内容,他这里的话你怎么输入都是没法绕过的,else执行那里alert后面还有东西,这里也是无法进行弹窗的,那我们直接将其闭合,自己构造语句来进行即可,构造payload如下
</script><script>alert(document.cookie)</script>

本文介绍了反射型XSS(GET/POST)的突破方法,包括长度限制绕过、hackbar工具利用,以及存储型、DOM型XSS的payload构造与规避过滤。作者通过实例演示了如何在各种场景下利用XSS技术,并探讨了如htmlspecialchars、href与js输出的绕过策略。
2093

被折叠的 条评论
为什么被折叠?



