upload labs练习(文件上传漏洞靶场)

/**upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关,每一关都包含着不同上传方式。**/

一、环境

1)停掉桌面的phpstudy服务

2)打开c盘目录下target- upload文件夹,点modify_path.bat文件

3)点该目录下的phpstudy.exe启动,网页访问127.0.0.1

二、pass01

火狐js屏蔽,上传,hackbar验证

三、pass02

burpsuite抓包改包上传,hackbar验证

四、pass03

屏蔽了一些文件后缀名,使用其他后缀即可,比如php3

五、pass04

        几乎屏蔽了所有可执行文件,但依然可以使用.htaccess文件(该文件作用是可把所指定文件当作另一种文件运行解析)

(将.app文件转换成php文件执行)

        将shell文件扩展名改为.app,上传,在上传.htaccess文件,将shell转换为php文件执行,成功上传并执行文件

六、pass05

七、pass06

查看源代码发现与上几个不同的是这里没有对大小写进行限制,因此可以使用大小写进行绕过

 直接将后缀名改为大写

成功

八、pass07

(1)查看源代码,相比前几个少了个//收尾去空,

(2)burpsuite抓包,对抓到的包文件名末尾加一个空格再forward。

上传成功,右键复制图片链接,通过hackbar进行验证

成功

九、pass08

查看源代码相比于之前发现少了一个“去除文件末尾的点“

上传php文件,同时打开burpsuite抓包,抓到的包修改后缀名加一个".",然后forward,成功上传文件,hackbar中执行php文件查看网页php信息,成功

 十、pass09

查看源码,防绕过少了个“去除字符串::$DATA”,看不懂这个字符串有什么作用,但是没关系,既然少了这个绕过,那就再本题中加上这个字符串试一试

burpsuite抓包,改文件名为“.php::$DATA”

上传成功,hackbar验证

成功(验证链接时去掉后面的::$DATA字符串)

十一、pass10

        观察源代码防绕过的执行顺序,发现删除末尾空格的优先级高于删除末尾点的优先级,因此可以利用执行的优先级顺序卡一下bug。修改文件名为“shell.php. .”

       卡bug说明:

      (1)由于删除末尾空格优先级高于删除点的优先级;

      (2)要保证修改之后的后缀名末尾首先没有空格而是点,因此删除空格的语句不会执行;

      (3)进入删除点的语句,最后一个点被删除之后还有一个空格,但是由于删除空格的语句已经执行完毕,因此这个空格会被保留下来以此保护前面的点不被删除。

      (4)因此执行下来,修改后的文件后缀名变为“.php. ”,不包括在代码程序屏蔽的后缀名行列中,因此成功通过上传。

        执行:首先尝试上传shell.php文件并用burpsuit抓包。

抓到之后修改后缀名为“shell.php. .”,然后forward,上传成功。

hackbar验证成功


十二、pass11

/*** 出现str_ireplace首先考虑双写 **/

查看源代码,发现本题是将上述出现的后缀名上传后替换为空

$file_name = str_ireplace($deny_ext,"", $file_name);
//将deny_ext中的名字替换为空,在文件名中进行替换

 尝试上传php文件,发现可以上传,但是在hackbar中验证失败

发现上传后的文件,后缀名php被删除,手动补全后缀名,依然验证失败,说明可执行文件上传后被删除php后缀变为不可执行文件

既然出现上述后缀名会被替换为空,那就采用双写绕过,一个php被替换为空之后,剩下的字符刚好可以拼接为一个完整后缀名

上传成功,进行验证,可以看到,上传之后被执行过的文件名刚好是一个完整的.php后缀

验证成功

十三、pass12

查看源码可以发现,在保存路径处设置截断,用url当中%00作为结束,屏蔽path后面的内容

首先将文件名改为可上传的jpg后缀以骗过网页上传,

 

点击上传,burpsuite抓包,改一下包的path,设置截断“12.php%00”

上传成功,进行验证,验证时将%后面内容删掉

成功

十四、pass13

 查看源码,与12题不同的是,12题中的截断是get,本题中的截断是post。因此本题不能使用url转码(url转码只能用于get请求)

和12一样burpsuite抓包,抓到包之后加截断,由于不能使用url,加13.phph

然后在hex中找到刚刚多加的h的ascii码,并改为00,以实现截断

然后forward,上传成功后进行验证,同样删掉php后面的字符

成功

十五、pass14 (文件包含)

十六、pass15 (文件包含)

十七、pass16 (文件包含)

十八、pass17 (文件包含)

十九、pass18(🌟🌟)

查看源代码可以知道,先将文件上传,然后对文件进行移动、判断操作,判断通过重命名,不通过删除,那么在判断的时间里文件已经完成了上传,可以对该事件段进行截断操作。

思路:

(1)加快访问速度

(2)想办法延长判断时间 :

        1)多次请求使服务器变慢

        2)上传文件之后快速进行访问

        3)多线程同时上传

        4)利用上传的木马生成新木马,这样即使上传的木马之后被删除,新木马也会保留下来

首先写一个生成木马的木马文件

实现:

(1)写生成shell.php木马的gen.php木马文件:

<?php fwrite(fopen('shell.php', 'w'), '<?php @eval($_POST["x"]); ?>'); ?>

(2)分别上传gen.php文件(当然上传不会成功)和.jpg文件,使用burpsuite抓包gen.php的post文件以及.jpg的post和get文件。

(3)分别将gen.php(发送木马)的post文件,以及图片get文件(生成木马)发送给intruder实施攻击。分别清除所有变量,设置payloads为0,更改get包的get值,发包次数为5000,线程数分别为50和200(自定)

(4)然后分别start attack(手速要快);查看对get包attack的response数据,没有报错的那些是成功的,下面报错的即使不是404也是失败的。

get失败的:

成功的:

(5)没有报错的说明gen.php文件已经成功生成shell.php木马文件并上传成功,报错的那些说明还未写入shell.php文件就已经被服务器判断后删除。只要有一次成功就是攻击成功。然后进行验证。

        注意验证时要将gen.php改为shell.php,因为我们成功植入的是由gen.php生成的shell.php文件,而不是gen.php。

成功

二十、pass19

  (1) 思路:    

       1)查看源代码发现白名单后缀名

        2)与18题不同的是,在move之前有一个检查后缀名的程序,因此需要配合apache解析漏洞,用apache解析漏洞绕过文件后缀名的检查,然后再在移动和删除之间执行生成木马的命令。

/*** apache后缀名解析漏洞:如果不认识最后一个后缀名,会往前找后缀名   ***/

         3)因此需要从白名单后缀名找一个可以通过的文件后缀保护.php后缀名,但是又不能选择web常见的如:.txt\.html\.xml\.jpeg等,会被apache解析识别;

        web上不常用但日常用:.doc\.pdf\.xls\.ppt\.zip

        web不常用,日常也不常用的白名单后缀:.rar\.7z

        因此,这里选择.7z后缀绕过。

(2)过程:

        1)修改文件后缀并上传

上传成功,抓包成功

        2)步骤同18题

        抓包,发送至intruder,修改并设置参数,攻击,检查木马写入是否成功

 

        3)查看有没有成功的,有成功的前往验证

        失败的:

成功的:

        4)验证,注意修改链接:

         验证成功

二十一、pass20

       (1)思路:

        同14类型题,14是post路径截断,这里是文件名截断,找到拼接的位置,就是我们可以进行操作的位置,也就是“$file_name”

        (2)步骤

        首先burpsuite抓包,抓到包之后加截断,由于不能使用url,加20.phph,然后在hex中修改ascii码值,截断后面的文件名。

        上传文件进行验证,成功

二十二、pass21

(1)思路:

查看源代码:

        1)文件后缀白名单

         2)检查文件名是不是数组,如果不是,将文件名以.为标志进行截断,如“20.php”截断为“20”“.”"php",如果是,绕过该条件

        3)如果是数组,取最后一个元素,检查是否为白名单,不是禁止上传,如果是则绕过该条件

        4)  取文件名数组的第一个元素,和倒数第二个元素(//count($file)-1),将其拼接,就是最后的文件名,进行上传并检查判断。

 (2)步骤

        1)正常上传shell2.php文件,并用burpsuite抓包

        2)按照分析的思路改包,以绕过检查上传文件

       <1> type类型修改为image/jpeg

        <2>复制文件名,并将文件名改为数组形式,以绕过非数组检查

        <2>保证文件名数组第一个为我们要上传的php文件名;文件名数组最后一项为白名单,以绕过后缀白名单检查;文件名倒数第二项为空,以保证执行完

 $file_name = reset($file) . '.' . $file[count($file) - 1];

该语句文件名数组倒数第二项被替换为“.”后仍然不影响我们上传的php文件名后缀。

   // //这里修改完文件名数组应该为["shell2.php" "" "jpg"],执行完上面的代码的文件名应该是“shell2.php.”

        3)forward尝试上传修改过后的文件,文件上传成功

4)hackbar验证,去掉文件后缀多的.

 

        验证成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

haoaaao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值