实战篇——文件上传漏洞upload-labs-master靶场实战一

实战篇——文件上传漏洞upload-labs-master靶场实战(1)

前端验证绕过

(1) 篡改js代码

直接上传一句话木马失败:

image-20240704204318691

查看页面源代码:

image-20240704204415759

image-20240704204452988

可见前端通过checkFile函数对上传文件的后缀名进行了验证。

使用Tampermonkey自定义js脚本,用于删除form表单的onsubmit属性:

image-20240704204757617

启用脚本,刷新页面,前端验证功能已被删除:

image-20240704205105326

复制图像地址,新建标签页打开,成功连接木马:

image-20240704205331905

(2) 抓包修改后缀

先将一句话木马后缀改为.jpg,抓包:

image-20240704205636089

再将后缀重新改回.php,发送,同样可以绕过:

image-20240704205910270

后端黑名单绕过

(1) MIME绕过

代码审计:

image-20240704210534442

可见后端对MIME进行验证。

抓包:

image-20240704211118056

将MIME改为image/jpeg,发送:

image-20240704211307372

成功连接木马:

image-20240704211436584

(2) .phtml绕过

代码审计:

image-20240704211701627

可见黑名单不包括.phtml,当php为老版本在httpd.conf中AddType application/x-httpd-php .php .phtml开启(默认关闭)时,可将后缀改为.phtml实现绕过。

将后缀改为.phtml,上传,成功连接木马:

image-20240704212237570

(3) .htaccess绕过

代码审计:

image-20240704213440447

可见黑名单中增加了.phtml,但不包括.htaccess,当php为老版本在httpd.conf中AllowOverride开启(如下)(默认开启)时,可以先上传.htaccess配置文件指定当前目录下可被php解析的后缀,再将一句话木马的后缀改为.htaccess配置文件指定的后缀之一并上传,实现绕过。

image-20240704213937767

编辑.htaccess配置文件,指定后缀为.jpg:

image-20240704214932874

上传.htaccess配置文件:

image-20240704215034324

将一句话木马后缀改为.jpg,上传,成功连接木马:

image-20240704215209818

(4) .user.ini绕过:

代码审计:

image-20240704215754076

可见黑名单中增加了.htaccess,但减少了.ini,当php为新版本上传路径下存在.php文件时,可以先上传.user.ini配置文件指定插入当前目录下所有.php文件首部或尾部的文件,然后将一句话木马的后缀改为黑名单之外的后缀并上传,最后上传路径下的所有.php文件都会被插入一句话木马,连接其中任一文件即可。

编辑.user.ini配置文件,指定插入文件为webshell.jpg:

image-20240704220647158

上传.user.ini配置文件:

image-20240704220749069

将一句话木马后缀改为.jpg,上传,访问readme.php(通过目录扫描获得),成功连接木马:

image-20240704221120242

(5) 大小写绕过

代码审计:

image-20240704221855313

可见没有将后缀转换为小写,且黑名单过滤不充分,当php为老版本时,可以将后缀改为.PhP等实现绕过。

将一句话木马后缀改为.PhP,上传,成功连接木马:

image-20240704222225691

(6) [1]+$绕过

代码审计:

image-20240704222528532

此处只对'.'和' '进行了有限次的过滤,可以将后缀改为'.php. .'等形式实现绕过。

抓包,将一句话木马的后缀改为.php. .,发送:

image-20240704223051537

成功连接木马:

image-20240704223232363

(7) 双写绕过

代码审计:

image-20240704223557155

此处将文件名中所有黑名单内的字符串进行了过滤,由于只进行了有限次过滤,可以通过将后缀改为.pphphp实现绕过。(.phphpp不行)

将一句话木马后缀改为.pphphp,上传,成功连接木马:

image-20240704224047737

后端白名单绕过

(1) 00截断[GET型]

代码审计:

image-20240704224517971

此处通过GET请求获得文件保存路径,因此路径可控,当php版本小于5.3.4且在php.ini中magic_quotes_gpc关闭时可以将路径跟上'/webshell.php%00'等形式实现绕过。

使用Tempermonkey自定义js脚本,修改form的action属性,实现00截断:

image-20240704230558441

启用脚本,刷新页面,文件保存路径已被修改:

image-20240704230749729

将一句话木马后缀改为.jpg,上传,成功连接木马:

image-20240704231046882

(2) 00截断[POST型]

代码审计:

image-20240704231329129

唯一的区别就是将GET改为了POST,一样的配方。

image-20240704233053035

image-20240704233133094

成功连接木马:

image-20240704233229769

(3) 条件竞争

代码审计:

image-20240704233623264

此处执行逻辑为:先将文件保存,若文件后缀在白名单内,则重命名;若文件后缀不在白名单内,则删除。

如果在木马保存和删除的时隙内访问木马,那么木马是可以被执行的,只不过很快就会被删除。但如果上传的木马能够释放一个一句话木马,那么虽然上传的木马会被删除,一句话木马是不会被删除的,由于正在执行的脚本无法删除,因此这种方法是可行的。

编辑载体:

image-20240704235135302

上传载体,抓包,发送至Intruder模块,配置Continue indefinitely:

image-20240704235930736

访问载体,抓包,发送至Intruder模块,配置Continue indefinitely:

image-20240705000014754

同时开始爆破,只要成功访问载体一次即可植入一句话木马:

image-20240705001254581

成功连接木马:

image-20240705001427492


  1. . ↩︎

posted @ 2024-07-05 00:35  yaoguyuan  阅读(27)  评论(0编辑  收藏  举报