exec1
打开文件php文件。代码如下:
<?php
$target = $_REQUEST[ 'ip' ];
$target=trim($target);
$substitutions = array(
'&' => '',
';' => '',
'|' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
}
else {
$cmd = shell_exec( 'ping -c 1 ' . $target );
}
echo "<pre>{$cmd}</pre>";
其实当你看到这些东西应该是很头晕的。 毕竟这些是后端代码,如果你不是学这个的但是你有点代码基础一步一步来。 把你看到的可以翻译的先翻译出来。 其实,大致代码,在他的注释中也有说明,但是我们现在是要知道改怎样知道破解,用什么养的方法来进行攻击。 第一步:知己知彼,百战不殆。我们发现在代码里面是有个函数,shell_exec发现是一个命令注入。 shell_exec()是一个反引号(`)操作符的变体,不输出结果,返回执行的结果。
命令注入:命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。
第二步:我们发现我们可以利用的所有的参数都被替换成空。现在主要是怎样去绕过这些参数执行我们的注入语句。这里要说明一下,这个靶场真垃圾,只能自己搭建的靶场来进行攻击,dvwa中的,在这里我就做一个简单的测试,应为你管测试的是high,还是low,但是你知道基本的原理了,就都知道了。 下面是我的靶场的代码:
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
$target = trim($_REQUEST[ 'ip' ]);
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
}
else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
$html .= "<pre>{$cmd}</pre>";
}
?>
说明一下啊,在这个代码中有个漏洞,是这个’| ’ => ‘’,多了一个空格,所以我们构建的payload是?id=127.0.0.1 |pwd. 这里,我们就发现可以执行我们的命令了。 再利用?ip=127.0.0.1 |net user 查看用户。 ?ip=127.0.0.1 |ipconfig/all 查看IP信息。 现在基本上就是这些东西,只要你是用心去学,钻研都会懂的。
人类需要善于实践的人,这种人能由他们的工作取得最大利益;……但是人类也需要梦想者,这种人醉心于一种事业的大公无私的发展,因而不能注意自身的物质利益。——居里夫人
|