内容简介:文章会讨论 DVWA 中低、中、高、不可能级别的命令行注入这里的需求是在服务器上可以 ping 一下其他的服务器Hacker 试下输入 192.168.31.130; cat /etc/apache2/apache2.conf;
文章会讨论 DVWA 中低、中、高、不可能级别的命令行注入
这里的需求是在服务器上可以 ping 一下其他的服务器
低级
Hacker 试下输入 192.168.31.130; cat /etc/apache2/apache2.conf;
瞬间爆炸, 竟然是直接执行 shell 的结果。再看看代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
竟然没有任何的参数校验!这主机安全可以说是形同虚设。 Hacker 竟然不废任何力气,就得到一个 weshell 了!接下来的攻击主要是就看攻击者的想象力了,什么改掉你的文件,什么创建个新页面做负载均衡,批量将 php 重名了。。。
中级
中级代码有做了一点参数校验
&lt;?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// Set blacklist
$substitutions = array(
'&amp;&amp;' =&gt; '',
';' =&gt; '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "&lt;pre&gt;{$cmd}&lt;/pre&gt;";
}
?&gt;
会将有 ; 和 && 都移除了。
Hacker 试了一下 || cat /etc/apache2/apache2.conf 。。。注入成功。而 || 的意思是第一条命令执行失败就会执行下一条。。。
Hacker 又试了一下 & cat /etc/apache2/apache2.conf 。。。注入也成功。 & 是后台执行,然后再执行新的代码。
主要是过滤太少的参数了。
高级
高级的话就过滤的参数比较多。
&lt;?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = trim($_REQUEST[ 'ip' ]);
// Set blacklist
$substitutions = array(
'&amp;' =&gt; '',
';' =&gt; '',
'| ' =&gt; '',
'-' =&gt; '',
'$' =&gt; '',
'(' =&gt; '',
')' =&gt; '',
'`' =&gt; '',
'||' =&gt; '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "&lt;pre&gt;{$cmd}&lt;/pre&gt;";
}
?&gt;
用 |cat /etc/apache2/apache2.conf 就可以了,因为 substitutions 中的 | 后面有个空格, |+<space> 才会被替换 。。。有点无语
不可能
&lt;?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode( ".", $target );
// Check IF each octet is an integer
if( ( is_numeric( $octet[0] ) ) &amp;&amp; ( is_numeric( $octet[1] ) ) &amp;&amp; ( is_numeric( $octet[2] ) ) &amp;&amp; ( is_numeric( $octet[3] ) ) &amp;&amp; ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "&lt;pre&gt;{$cmd}&lt;/pre&gt;";
}
else {
// Ops. Let the user name theres a mistake
echo '&lt;pre&gt;ERROR: You have entered an invalid IP.&lt;/pre&gt;';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?&gt;
不能级别,添加了 token 用来对付 CSRF 跨域请求攻击。还对参数进行真正的验证,只有 ip 参数才能够 ping。如果是我写的话可能会用估计会用正则表达式。这个方式验证也可以了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- NSA宣布开源高级黑客攻防工具Ghidra
- 攻防最前线:伊朗黑客组织MuddyWater新添黑客武器
- 一个隐藏在黑客迷雾下的bug——记一次黑客攻防
- DVWA 黑客攻防演练(二)暴力破解 Brute Froce
- DVWA 黑客攻防演练(四)文件包含 File Inclusion
- 云服务器反黑客入侵攻防实录(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!