upload-labs

第一关:

任务是要我们上传一个webshell到服务器

然后我们选择一个shell进行上传

内容:

<?php

eval($_POST["pass"]);

?>

为了方便我是直接上传了一个phpinfo()上去,都是php文件,一个可以利用另一个也差不多

<?php phpinfo();?>

上传发现做了文件类型的限制

首先ctrl+U或者f12看看页面源代码是不是做了前端校验

ctrl+u显示的界面是直接新建一个标签查看当前页面的html源代码

f12则是利用开发者工具查看源代码

我们以f12为例

发现一个index.php,里面刚好是当前页面的html源代码,发现使用了javascript进行文件类型限制

全部作为前端展示出来

这是一个典型的js前端校验

直接把文件后缀改为.jpg上传,过前端校验,

然后用bp截取数据包,把文件类型再改为php,进行前端js绕过

到抓包遇到了一个小问题

bp不抓127.0.0.1的包,然后把url的127.0.0.1替换成自己的ip就好了

抓到包以后把文件名的.jpg改为php,再放包,看看成果

显示已上传,把php当做图片显示出来了,但是由于不是图片导致只出现了一个占位符

上传上去了尝试用连接工具去连接

我这里用哥斯拉去连

url要填上传具体文件的路径,密码是shell里面自己设置的,有效载荷类型要写对应的类型,也同时网站也要能解析,不然传上去没用

再url这一块,可能是一个难点了

我们上传木马后首先要有具体路径我们才能连上

但是很多时候上传路径是未知的,我们只能通过目录扫描等各种信息收集才能得到路径

这也是一个很麻烦的点

但由于这是靶场,所有我能在本地很清楚地看到路径

从页面源代码也能看出部分路径

再在该路径目录扫描一下,可以很容易得出靶场上传路径

但是我是直接看的,没有进行目录扫描

这是靶场的上传路径

http://192.168.229.1/upload/upload/shell.php

测试连接成功,直接添加进行下一步

右击进入

进入到webshell界面

命令执行一条whoami

文件管理也能看到具体目录

一般到这里就可以进网站后渗透或者内网渗透了

第一关就到此为止了

第二关:

上传一个php文件,提示我类型不正确

猜测可能是黑名单检测

看页面源代码发现不是前端校验

由于是处于学习阶段,我们不知道有哪些绕过方式,所以靶场环境中我们可以去看源代码了解防御和绕过方式

下面是后端校验代码

我们可以看到

这里了很明显,它是验证了文件的MIME类型

MIME类型是用于描述文件内容类型的标准

MIME 类型在 HTTP 响应头中被用来告诉浏览器文件的类型

MIME的类型是在数据包中有一个Content-Type字段来体现的

当前后端校验就是根据Content-Type的类型进行过滤

这是我查找的常见的类型样式

直接去把MIME类型改为image/jpeg

再放包

发现上传上去了

直接右击——》在新标签页打开图像,就成功解析php代码

输出phpinfo()

这里上传的是phpinfo而不是shell是为了方便,第一关已经学习了如何上传和连接webshell,后面的关卡就不用那么繁琐了

第二关结束

第三关:

直接看后端代码(js前端校验除了第一关肯定已经不存在了)

这里还是做了很多限制的

除开限制的函数,去看真正校验的部分,$file_ext和$deny_ext两个变量,是直接把文件末尾的后缀名进行黑名单匹配

如果存在.asp、.aspx、.php、.jsp就不允许上传

对于$deny_ext的限制还是蛮多的,

  1. 去掉了文件名末尾的.
  2. 限制了大小写绕过
  3. 去除::$DATA( 在编程或命令行中,可以通过 ::$DATA 明确指定操作的是文件指定操作的是文件的主内容)
  4. 在结尾去空字符

但是,仔细看截取$deny_ext的时候,是根据.点号截取的,匹配只看是否与php等一致

那我尝试.phpphp,跟.php不就不匹配了吗

直接去尝试一下

成功上传

结果后面耍小聪明失败

.phpphp上传上去压根无法解析

看了下攻略发现这关主要是让我们了解php的解析规则

条件允许的情况下

.phtml .phps .php5 .pht后缀可以解析成php文件

只能说不常见,

要自己去phpstudy里面改httpd.conf文件

找到下面这个AddType application这一行

把注释符去掉

就可以把phtml解析成php文件了

设置好后重启phpstudy

然后改包

最后成功利用

第四关:

看完源码发现限制更多了,限制了很多后缀

导致从校验这块没有发现绕过的点

然后这关考的就是.htaccess的利用

.htaccess是Apache服务器的配置文件,用来管理目录或者行为的,比如本次靶场用到的解析规则

我们创建一个txt文件,我命名为1.txt,写入下面一行规则

<FilesMatch "4.png">

SetHandler application/x-httpd-php

</FilesMatch>

表示把4.png文件当做php解析

不直接命名为.htaccess是因为windows命名规则点号前不能为空

然后再抓包改名为.htacess上传

上传成功后再传入4.png的shell文件

打开直接执行为php

如果是当我打开这个图片链接的时候,发现文件名被随机规则化处理了,导致不是原来的文件

有两个解决办法

  1. 先上传文件,再根据上传后的文件名上传.htaccess
  2. 直接把.htaccess的解析规则改为把所有.png文件都解析为.php

AddType application/x-httpd-php .png

这条配置就是把所有.png文件解析成.php

最后上传一个png的shell即可

第五关:

后端源码把.htaccess也给禁用了,只能从其他地方找突破口的了

突然主意到这里有一个结尾去点和收尾去空的函数

他们好像没有进行一个循环检查

那如果把文件名构造成 . .(点空格点)的形式

是不是就可以绕过了

这种形式也叫做路径拼接

Windows系统会在解析的时候自动把后缀后面的点给去掉.php.

直接构造路径拼接文件名

成功上传拿到shell

但是如果上传的是真正的shell,路径还是要去加上点的

第六关:

第六关源码少了一个转小写的函数,一看就是大小写绕过,没什么好说的

直接写一个过滤规则里面没有的

成功上传绕过

第七关:

源码少了一个结尾去空

与上一关差不多,让我们了解空格绕过检测

Windows加载文件的时候时候自动忽略空格的

所以直接抓包绕过

成功执行

第八关:

第八关也没什么点

跟第五关差不多

这一关少了一个结尾去点的操作

基于黑名单直接加上点号绕过

成功上传绕过

第九关:

这关考了一个::$DATA的作用

源码中少了去掉::$DATA的函数

::$DATA是Windows的特性

当我上传一个1.php::$DATA的时候,Windows会自动去掉$DATA,保留之前的文件名

改包上传

成功绕过

利用路径的时候要去掉::$DATA,因为上传后Windows已经自动去除了

第十关:

第十关我发现跟第五关一样,也是直接路径拼接绕过就可以了

没明白考点是什么

看提示没有发现什么,可能是关卡重复了吧

第十一关:

当我看到第十一关后端代码的时候发现变化还是蛮大的

但我仔细一看,不对

他好像除了一个黑名单什么验证都没有

我随便进行一个大小写绕过,上传了一个1.PhP,发现成功利用

也确实很奇怪的一个关卡

第十二关:

第十二关就用到了白名单机制了

直接解决了黑名单的很多绕过缺陷

这关主要是想让我们了解%00截断

其实我想着%00截断利用条件太苛刻了,现在基本上没有了

我就想看看有没有其他的方法,想到图片马,发现后面关卡有用到图片马,就先不在这里用了

%00截断的利用条件:

1、php版本要小于5.3

2、把majic_quotes_gpc关闭(phpstudy)

所以一般来说利用条件比较苛刻

0x00是十六进制表示法(ascii码为0的字符),在有些函数处理中,会把这个字符当做结束符处理

当我上传1.php%00.png

因为检测的时候只会检测最后一个点号后缀,导致误认为白名单

上传上去后检测到%00又把后面的.png截掉了,就解析为1.php了

直接去抓包修改一下

首先改get方式路径文件名

再改一下过检验的文件名

成功上传

右击访问图片的时候发现没有这个文件

但其实截断上去的1.php还是在的,直接访问

成功执行

第十三关:

这关一样考的是%00截断,但是这次用的是POST提交方式

思路是一样的,就是POST和GET提交的形式有区别

GET方式会对url自动进行解码,而POST由于提交方式不同,是不糊自动解码的

POST提交的路径会在数据包里面

加上的%00是无法进行url解码,导致后台无法解析

bp里面有一个功能会对你选中的目标进行url解码,如下

解码之后就可以了,下面虽然看不见了,但其实就是解码还在那

最后放包上传

成功利用

第二种方法,是不利用bp自带的url解析功能

我们手工地去完成这样的一个解析,比第一种繁琐,但是得知道能这么勇

在post上传路径加上1.php再写一个+,这个+是让我们之后更方便改

+的十六进制是2b,而%00的十六进制就是00

文件名依然是改为png

然后来到十六进制查看器

找到那个加号

这里用+的目的就应该能看出来了

因为如果是%00,在这边就是三个字符,但其实%00解码后只是一个字符

所以用+来占位

然后把2b改成00

再看就解码成功了

直接放包上传

访问1.php

成功利用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值