刚刚我出了一个DVWA靶场的搭建教程,因为我搭建的比较快,省去了很多步骤,网上都有教程,这里就不一一阐述了!
大家有兴趣可以自己前去学习研究!
下面我来给大家演示一下DAWA的命令漏洞执行过程!
1.先打开Command Injection
简单
尝试ping一下本地是正常的,这里给大家普及一下命令知识
命令1|命令2 无论命令1是否执行成功,命令2将被执行
命令1;命令2 无论命令1是否执行成功,命令2将被执行
命令1&命令2 无论命令1是否执行成功,命令2将被执行
命令1||命令2 仅在命令1执行失败时,才执行命令2
命令1&&命令2 仅在命令1执行成功时。才执行命令2
在普及一下常见的指令
whoami 查看当前用户名
ipconfig 查看网卡信息
shutdown -s -t 0 关机
net user 用户名 密码 /add 添加一个新用户
dir 查看文件目录
type 文件名 查看文件内容
好了,下面我们执行一下试试
当我们执行127.0.0.1|whoami时,即可发现漏洞
看一下源代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
$target = $_REQUEST[ 'ip' ]; //把ip赋值给$target
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
}
else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
echo "<pre>{$cmd}</pre>";
}
?>
中级
我们来升级一下策略
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
$target = $_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 );
}
echo "<pre>{$cmd}</pre>";
}
?>
这里看一下代码就知道了,这里只屏蔽了&&和;,其他指令一样正常使用,比如我们用|
一样正常显示,我们在升级一下难度
困难
我们直接看一下代码,这是一般开发者可能会手误打出来的
<?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 );
}
echo "<pre>{$cmd}</pre>";
}
?>
看到这一行是不是以为都被屏蔽了?仔细看一下第三行
'| ' => '',
这里会发现|后面多了个空格,我们来试试去掉空格
so easy 拿下,既然命令可以使用,剩下的教程交给你们自由发挥,这里上一下正确代码
正确代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$octet = explode( ".", $target );
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
}
else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
echo "<pre>{$cmd}</pre>";
}
else {
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
generateSessionToken();
?>
评论已关闭