我们在做文件上传的题目的时候一般都是上传一个木马上去,比如一句话木马<?php @eval($_POST['cmd']);?>
原理:
利用文件上传漏洞,往目标网站上传入一句话木马,然后我们就可以用我们的蚁剑或者菜刀进行连接,获取服务器的控制权限。
一句话木马的含义:
我们这里还是用<?php @eval($_POST['cmd']);?>为例子
<?php ?>:php代码的一种标准写法,如果我们不这样写,服务器是看不出这是一个php代码的。
@:表示后面的代码执行错误了也不会报错
Eval():括号内的语句字符串都可以当作代码来执行。eg:eval("echo 'animebucket' ;");就等于echo 'animebucket';
$_POST['cmd']:表示从页面获得cmd这个参数的之,既可以进行菜刀客户端的连接。
实验:
我们打开靶场的pass-03,然后查看一下源代码
题目中采用的是黑名单过滤的方法,但是上面的过滤并不完全,例如我们可以通过上传后缀名为*.php3,*.php5的文件,然后写入一句话木马,我们可以在一个php文件中写一个查看php配置的一个命令来看看能否成功。
我们先上传一个php文件看看会不会过滤掉
然后我们将后缀名改为php3或者php4然后在上传一次
上传成功。
我们在看到Pass-04,先看看源代码
这次的黑名单不少,而且存在我们刚刚使用的php3,也过滤了何种不常见的后缀名,接下来尝试重写文件解析的规则实现绕过,首先我们要上转一个.htaccess的文件,内容为:AddType application/x-httpd-php.jpg
然后我们在上传一个含一句话木马的jpg文件。
什么是htaccess?
笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户 自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用 户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为 index文件等一些功能。
这个时候我们上传的shell.jpg被当作php解析了,为了后面的操作,我们最好是先回到更目录,清除一下上传的文件
我们在看到pass-05,还是先看看源代码
这一次过滤的更加彻底一些了,.htaccess格式的文件也做了过滤(最后一个,这里不好截图),但是也有一个缺点,没有统一后缀名,所以我们可以构造Php这种写法的后缀名来绕过黑名单过滤,没有特殊配置的情况下绕过方法对linux操作系统的服务器无法实现绕过,因为linux不区分大小写,只有Windows会忽略大小写,上传如下格式的文件至服务器中。
看到Pass-10,先将上传到文件清理一下,然后在看看源代码
重点在第九行的位置$file_name = str_ireplace($deny_ext, "",$file_name);,作用是将黑名单里面的后缀名替换成空,但是由于程序只替换了一遍,所以这里我们可以采用双写绕过,即上传shell.pphphp,服务器替换掉一次后缀名后报错文件名为shell.php
上传之后也是可以访问成功的。