您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P如何分析DVWA下的命令注入通關,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
命令注入攻擊,是指由于Web應用程序?qū)τ脩籼峤坏臄?shù)據(jù)過濾不嚴格,導致黑客可以通過構造特殊命令字符串的方式,將數(shù)據(jù)提交至Web應用程序中,并利用該方式執(zhí)行外部程序或系統(tǒng)命令實施攻擊,非法獲取數(shù)據(jù)或者網(wǎng)絡資源等。在命令注入的漏洞中,最為常見的是PHP的命令注入。PHP命令注入攻擊存在的主要原因是Web應用程序員在應用PHP語言中一些具有命令執(zhí)行功能的函數(shù)時,對用戶提交的數(shù)據(jù)內(nèi)容沒有進行嚴格的過濾就帶入函數(shù)中執(zhí)行而造成的。例如,當黑客提交的數(shù)據(jù)內(nèi)容為向網(wǎng)站目錄寫入PHP文件時,就可以通過該命令注入攻擊漏洞寫入一個PHP后門文件,進而實施下一步滲透攻擊。
命令連接符:
command1 && command2 先執(zhí)行command1后執(zhí)行command2
command1 | command2 只執(zhí)行command2
command1 & command2 先執(zhí)行command2后執(zhí)行command1
以上三種連接符在windows和linux環(huán)境下都支持
如果程序沒有進行過濾,那么我們就可以通過連接符執(zhí)行多條系統(tǒng)命令。
<?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>";
}
?>
low級別的,沒有任何限制沒有任何過濾,所以隨便玩,就當熟悉命令連接符。
”| “符號的效果:
burpsuite抓包:
”&“符號的效果:
burpsuite抓包:
”&&“符號的效果:
burpsuite抓包:
<?php
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 "<pre>{$cmd}</pre>";
}
?>
$substitutions = array(
'&&' => '',
';' => '',
這段代碼表示過濾了“&&”和“;”,但沒有過濾“||”
輸入127.0.0.1 &&ipconfig,但是沒顯示出命令執(zhí)行后的內(nèi)容。
輸入127.0.0.1 &ipconfig,內(nèi)容就出來了,繼續(xù)嘗試
輸入127.0.0.1 |ipconfig,也可以,說明medium級別的源代碼真的把”&&“字符過濾了,效果還很好,我們繼續(xù)下一關。
<?php
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 "<pre>{$cmd}</pre>";
}
?>
high級別主要是完善了黑名單:
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
看操作:
輸入127.0.0.1 &&ipconfig,但是沒顯示出命令執(zhí)行后的內(nèi)容。
輸入127.0.0.1 &ipconfig,但也沒顯示出命令執(zhí)行后的內(nèi)容。
輸入127.0.0.1 |ipconfig,有內(nèi)容顯示了,終于有漏網(wǎng)之魚了。
輸入127.0.0.1 ||ipconfig,也沒有顯示內(nèi)容。以上說明high級別的依舊可以命令注入成功。最后來試試
Impossible級別的。
<?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] ) ) && ( 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 "<pre>{$cmd}</pre>";
}
else {
// Ops. Let the user name theres a mistake
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?>
以上源碼對輸入進行了嚴格限制,只有數(shù)字才行!那我們試試
輸入127.0.0.1 &&ipconfig:
輸入127.0.0.1 &ipconfig:
輸入127.0.0.1 |ipconfig:
輸入127.0.0.1 ||ipconfig:
全部通殺!其實看漏洞會覺得這個漏洞很厲害,這相當于拿到了一個shell,但最大的問題不是權限問題,最大的問題是這樣的漏洞很難見到啊,不像sql注入,xss這樣具有很強的通用性,畢竟sql查詢,留言等操作,基本上是web很常見的操作,而像這樣的cmd的操作,讓用戶輸入,然后把用戶輸入直接cmd運行很少見。
這個命令注入實驗操作,其實可以脫離DVWA進行練手的,自己在windows下cmd運行也可以的:
上述就是小編為大家分享的如何分析DVWA下的命令注入通關了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。