DVWA Command Injection 练习总结
low:
首先查看源碼沒有對字符進行任何過濾
target參數為將要ping的ip地址,比如在輸入框輸入127.0.0.1后,對于windows系統,會發出ping 127.0.0.1操作。
這里可以引入命令行的幾種操作方式:
A && B: 先執行A,如果成功,執行B;
A || B :先執行A,如果失敗,執行B;
A | B:管道,先執行A后,將A的結果作為B的輸入,打印的是B的結果;
A & B:先執行A,然后不管成功與否,執行B;
意味著我們可以通過輸入 【ip】+【連接字符】+ 【命令】 的格式進行命令注入
medium
可以看到增加了黑名單
但是還有 || ,& 等命令可以使用
high
可以看到high完善了這個黑名單
但是仔細看還是能發現 , | 符號的后面多加了一個空格
意味著我們仍然能使用 | 符號加命令繼續命令注入
impossible
<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Check Anti-CSRF tokencheckToken( $_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 integerif( ( 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 userecho "<pre>{$cmd}</pre>";}else {// Ops. Let the user name theres a mistakeecho '<pre>ERROR: You have entered an invalid IP.</pre>';} }// Generate Anti-CSRF token generateSessionToken();?>相關函數介紹
stripslashes(string) : 該函數會刪除字符串string中的反斜杠,返回已剝離反斜杠的字符串。
explode(separator,string,limit): 該函數把字符串打散為數組,返回字符串的數組。參數separator規定在哪里分割字符串,參數string是要分割的字符串,可選參數limit規定所返回的數組元素的數目。
is_numeric(string): 該檢測string是否為數字或數字字符串,如果是返回TRUE,否則返回FALSE。
可以看到,Impossible級別的代碼加入了Anti-CSRF token,同時對參數ip進行了嚴格的限制,只有諸如“數字.數字.數字.數字”的輸入才會被接收執行,因此不存在命令注入漏洞。
一波強行總結
不僅要學會攻擊,更要學會防御
對命令處理要盡可能過濾
盡可能完善黑名單,但是黑名單的方式總會有紕漏和繞夠
可以用函數限制所輸入的格式,例如限制為只有數字,或者本題中【數字】.【數字】.【數字】
總結
以上是生活随笔為你收集整理的DVWA Command Injection 练习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java webservice ip_通
- 下一篇: 平均风险是指什么