文件上传漏洞原理与实战——upload-labs靶场(2)

文件上传漏洞原理与实战——upload-labs靶场(2)

Pass-05 apache陌生后缀名解析绕过
image-20220707101045366

nts代表非安全线程,ts代表安全线程。

后缀名检查是从右到左,当遇到例如a.php文件时他会发现这是个php文件然后当作php文件来执行。如果发现不认识的后缀名,他就会再从左到右检查。我们可以利用这个,将文件名改为a.php.xxx

image-20220707101744335

我们通过查看源代码可以发现,禁止上传了.htaccess文件

我们直接上传a.php文件,发现上传不了。这时我们可以用burp进行拦截并将后缀名修改。

image-20220707102219951

然后上传成功。

image-20220707102303668
Pass-06 大小写绕过

image-20220707103053115

第六关禁止了.htaccess和.ini文件

image-20220707103208643 image-20220707103232480

但是和之前的相比,没有了将文件名转换为小写的操作,所以我们可以选择用大小写去绕过,我们也可以选择用第三关的::$DATA去绕过。但是注意不要改成被禁止的上传文件后缀。

image-20220707103653557

上传成功:image-20220707103711801

Pass-07 空格绕过

image-20220707104003654

与之前的相比,我们可以发现,第七关缺少了首尾去空的操作,我们可以选择用空格去绕过。

image-20220707105638883

上传a.php并用burp抓包,在a.php后添加一个空格,然后放掉,就能上传成功了。

image-20220707105820627
Pass-08 末尾加点绕过

image-20220707110726970

第八关没有删除文件名末尾的点的操作。

image-20220707110925119

用burp抓包,并在文件名最后加一个点,上传成功。

image-20220707111009853
Pass-09 ::$DATA绕过

image-20220707111215859

第九关没有去除字符串::$DATA的操作

我们直接burp抓包,在文件名末尾添加::$DATA,上传成功。

image-20220707111355683

image-20220707111719538

复制图片链接后进入,删掉url里的::$DATA,连接成功。

Pass-10 点空格点绕过

image-20220707111909556

第十关有删除文件名末尾的点和首位去空的操作,所以我们在文件名后添加点空格点,相当于加点绕过。

image-20220707112202146

上传成功:

image-20220707112217982
Pass-11 双写绕过

image-20220707112452987

它将违规的后缀名全部替换成了空,但是他只替换一次,我们可以采用双写绕过。

image-20220707112746909

上传成功:image-20220707112830837

Pass-12 %00截断

image-20220707113040878

第十二关是一个白名单,只允许上传jpg,png,gif,白名单比黑名单安全。

1.php版本<5.3.4

2.magic_quotes_gpc为off状态

(magic-quote在PHP5.4版本中就已经废除了。详情请参考:https://www.php.net/manual/zh/info.configuration.php

  1. magic_quotes_gpc和magic_quotes_runtime作用

magic_quotes_gpc主要是作用是自动转义GET/POST/COOKIES请求的数据,也就是自动执行 addslashes()。magic_quotes_gpc在5.4版本之前的配置中有两个值,分别是0(关闭)和1(开启),默认配置是1(开启)。

magic_quotes_runtime主要作用是自动转移sql,为了防止恶意攻击获取数据库信息。magic_quotes_runtime在5.4版本前的配置也有两个值,分别是0(关闭)和1(开启),默认配置是0(关闭)。

  1. magic_quotes_gpc和magic_quotes_runtime的应用

假设提交过来的数据分别是$datastr= ‘aaa’; $datafile= implode(file(‘demo.txt’));第一个数据是一个字符串,第二个是读取的文件信息,但是你不知道是否安全。就可以使用get_magic_quotes_gpc()和get_magic_quotes_runtime()进行判断。

注意:一般来说为了运行效率会将get_magic_quotes_gpc()和get_magic_quotes_runtime()设置成常量进行判断

上传a.php用burp抓包,在文件保存路径后添加shell.php%00进行截断,并将a.php改为a.jpg或者png等

image-20220707114335447

这样就可以上传成功了:image-20220707114645011

进入后发现Not Found

image-20220707114750083

URL里的�就等于%00,后面的可以直接删掉,就可以连接了

image-20220707114937587
 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
Pass-13 0x00截断 POST型
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

第12关文件保存为get方式,13关为post,两关很类似,但是不一样。

burp抓包,找到文件路径,在后面加上shell.php+,将a.php改为a.jpg或者png等。因为检测的是后缀,所以Content-Type可以不改。

image-20220707151239276

打开十六进制页面,写shell.php+的+是为了在这里方便寻找

image-20220707151806282

我们在对应的行对应位数可以找到+对应的是2b,我们把2b改为00

image-20220707152010577

然后直接放掉包,上传成功:

image-20220707152112088

发现与之前一样,都是Not Found,我们还是和上面一样将多余部分删除,连接成功

image-20220707152138019

image-20220707152300459

Pass-18 条件竞争(准备)

新建一个18.php文件,加密一个1,将<?php eval($_post["cmd"];?>写入shell.php

image-20220707160400367

exp.py内容

image-20220707160918291

抓包,发送到爆破模块

image-20220707161122872

image-20220707161207714

使用exp.py

image-20220707161404613

同时进行爆破和exp.py,使之竞争

image-20220707161559719

点clear清除

image-20220707162737081

image-20220707163036988
这里是条件竞争,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游子无寒衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值