文章目录
以下是文件上传绕过的各种思路,不过是鄙人做题记下来的一些思路笔记罢了。
GitHub靶场环境下载:upload-labs
Pass-01
先传一个图片过去,成功上传。

尝试传muma过去,提示失败,但是这个提示是在前端直接显示出来的,好像并没有发送请求过去。

尝试找到前端校验代码,直接在开发者模式将其js调用的函数删掉。


然后再次尝试上传木马,上传成功了

直接看服务端也是上传成功了。

Pass-02
观察前端也是有之前的第一关的前端校验,删除后直接尝试上传木马。
发现上传失败。


可以看到前端代码我们通过了,但是后端可能又校验没有通过,所以抓包观察一下。
-
首先尝试修改content-type是否能够上传过去。
Content-Type: image/jpg

可以看得到还是失败了。

可能jpg不行,那试试png?
还真过去了!现在就是直接找到回显的这个路径直接连接就行了。因为这个回显的路径和文件名都是php,也能够直接访问,然后也被当成php执行了里面的木马代码。

我很纳闷为什么jpg不行,难道jpg列入黑名单了?那就showcode看看
原来是jpg没有进白名单,所以有时候多尝试几个mime头还是OK的。
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
但是我仔细一想,发现要是我一开始就先尝试看看哪种文件能够上传成功那就和自己对着能够上传过去的文件进行修改不就好了吗?我重新尝试了一下上传jpg图片看看是不是真的没法上传,但是意外上传成功了!?

后面再另外上传一个伪装jpg一抓包发现,原来jpg图片现在的mime头都是JPEG了。。。。原来是我的问题。。。。

Pass-03
先传一个带木马的jpg文件看看过不过得去

正常过去了

看下该文件路径,使用时间戳进行更改名字。但是我们的web.jpg确实过去了,很有可能没有对我内容进行检查,所以我们要抓包在文件名处做文章。

-
尝试直接修改后缀名但是Content-Type为jpeg(失败了)


-
首先要理解服务端保存文件名字路径的方式,他是将.前面的全当成文件名然后用时间戳替换了,.后面符合过滤条件就使用不符合就不保存返回错误提示。
由于我们知道服务端是采用的apache,现在有如下几种手段-
赌一下运维人员配置不当,存在php3,php7等等也当做php文件执行了。
(当然这一关就是这个答案,但是需要我们手动配置好)
在http.d文件中:AddType application/x-httpd-php .php .phtml .php5 -
双写(肯定不行,因为直接给php拦下来了,不然的话就会变成没有后缀名的时间戳文件名的文件)
-
尝试
xx.php .或者xx.php. .,但是都不行,因为服务端会把最后一个点的前面都当成文件名用时间戳替换掉,那么你的filename就会成为:时间戳. -
大小写混合 (失败)
-
双写
成功但后缀名没有被替换,依旧是失败了。

-
::DATA(可能可以,因为windows刚好是服务端使用的系统) -
冒号: 二次传输(同理或许能行得通,因为也是针对windows系统)
-
.htaccess(试过了也失败了)
-
-
上传php5后缀名,上传成功,根据回显路径访问文件。



-
但是在访问的时候发现版本也是一个问题,如图所示,只有非nts版本的才能够在我们http.d下添加的后缀名能够被执行,其他都是直接下载而不是执行。(当然都是在http.d下天了php5后缀名的了,只是效果不同而已)
下面的5.5.38由于我在windowsserver2003中,他不支持就切不了。

-
重新发送一下木马

直接访问看看,访问成功了。终于结束了这场闹剧。。。。

Pass-04
传一个木马图片过去看看什么情况,发现文件名没有改,然后也没有校验文件的内容


尝试::$DATA看看不行不
::$DATA失败

尝试windows的其他特性
-
xx.php .
失败

-
xx.php. .
成功了!!!!!!!!!!!!!但是回显是1.php.,但是没有关系,因为windows特性是不会让文件名最后一个字符是.的,所以我们接访问1.php即可


使用蚁剑连接成功

-
xx.php:.jpg(这里需要二次传输)
- 第一次:(成功了!!!!!!!!!!)
传过去但是该文件没有内容,第一次的作用就是创建一个文件。

可以看到服务端的这个文件也是0kb

- 第二次:作用是传输文件内容进去
这里注意传的文件名是1.<<,<<是追加符号,把内容追加到文件名为1的文件中去

看到路径是1.<<,但是没关系,接着看后面

我们现在尝试着连接一下1.php,同样是成功了!!!!!!!!!!!!

回到服务器看看怎么个事。
果然成功将内容输入进去了,不再是0kb内容。而且里面的内容就是我们要的
- 第一次:(成功了!!!!!!!!!!)

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



