bWAPP----OS Command Injection

OS Command Injection

界面:

给一个域名,它帮你返回DNS

代码:

 1 <div id="main">
 2 
 3     <h1>OS Command Injection</h1>
 4 
 5     <form action="<?php echo($_SERVER["SCRIPT_NAME"]);?>" method="POST">
 6 
 7         <p>
 8 
 9         <label for="target">DNS lookup:</label>
10         <input type="text" id="target" name="target" value="www.nsa.gov">
11 
12         <button type="submit" name="form" value="submit">Lookup</button>
13 
14         </p>
15 
16     </form>
17     <?php
18 
19     if(isset($_POST["target"]))                                                      //获取域名,如果存在输入
20     {
21 
22         $target = $_POST["target"];
23 
24         if($target == "")                                                           //如果域名为空
25         {
26 
27             echo "<font color="red">Enter a domain name...</font>";              //请输入域名
28 
29         }
30 
31         else
32         {
33 
34             echo "<p align="left">" . shell_exec("nslookup  " . commandi($target)) . "</p>";   
35 
36         }
37 
38     }
39 
40     ?>
41 
42 </div>

shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

 

 

防御部分

 1 function commandi($data)
 2 {
 3 
 4     switch($_COOKIE["security_level"])
 5     {
 6 
 7         case "0" :
 8 
 9             $data = no_check($data);
10             break;
11 
12         case "1" :
13 
14             $data = commandi_check_1($data);
15             break;
16 
17         case "2" :
18 
19             $data = commandi_check_2($data);
20             break;
21 
22         default :
23 
24             $data = no_check($data);
25             break;
26 
27     }
28 
29     return $data;
30 
31 }
32 
33 ?>

1.low

low级别没有过滤

加一个;就能实现恶意

 

2.medium

1 function commandi_check_1($data)
2 {
3     
4     $input = str_replace("&", "", $data);
5     $input = str_replace(";", "", $input);
6     
7     return $input;
8     
9 }

过滤了&和;将他们替换为空

用  |  可以绕过

3.high

1 function commandi_check_2($data)
2 {
3    
4     return escapeshellcmd($data);
5     
6 }

escapeshellcmd函数功能:

反斜线()会在以下字符之前插入: &#;`|*?~<>^()[]{}$, x0AxFF'" 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 %! 字符都会被空格代替。

原文地址:https://www.cnblogs.com/hongren/p/7168946.html