ctfshow-web_萌新

今天做的是ctfshow中的萌新板块中的web类的题目,用这篇文章记录一下wp

web01

打开靶机,查看源码

分析一下这个代码,首先提示了id要等于1000会出现flag,但是代码中也写到了如果id大于999就会输出id error
那么就要考虑一下绕过intval()函数

查阅了一下网上的资料

intval函数特性:
intval函数是获取变量的整型值,当它获取的变量不能被转换时返回0;
如果字符串其中有数字,则返回数字;
如果开头无法被转换,则返回0;

所以有以下几种方式绕过:

1.单引号绕过: /?id=’1000’

2.相乘绕过: /?id=100*10

3.十六进制绕过: /?id=0x3e8

4.二进制绕过: /?id=0b1111101000

5.逻辑或绕过: /?id=999 or id=1000

6.二次去反绕过: /?id=~~1000

等等

绕过即可得到flag。

web02

相比于上一题加了一些过滤,如or
我用的单引号绕过

web03

过滤了更多东西,把十六进制绕过给过滤了
依旧用单引号绕过

web04
可以看到再次增加过滤的东西

可以看到十六进制和乘号被过滤了,其他的没有被过滤

我们依旧采用单引号进行绕过

web05

这次我们看到把单引号和双引号也给过滤了

但是没有过滤二进制,那我们这次用二进制绕过

web06

继续进行查看发现还是继续增加过滤

但是依旧没有过滤二进制,那么我们继续用二进制进行绕过

web07

继续进行查看,这次过滤了~.

那么二次去反就无法使用了,但是依旧还是没有过滤二进制 (阿呆也是够马虎的)

web08

结束了阿呆传奇,我们迎来了这个题

首先查看源代码

要找这个key,我也不知道这个Key是哪来的

查看了别人的wp发现这是一个梗题

阿呆的一系列操作就是删库跑路了

所以是rm -rf /*

这样就得到了flag

web09

我的天,又是你阿呆!

首先来看代码

这是一道命令执行题

看到有system

直接/?c=system(‘cat config.php’);

得到flag

web10

首先观察代码,发现相较于上一题做了过滤

有两种方法

方法一是使用passthru函数

/?c=passthru(‘cat config.php’);

方法二是函数拼接

/?c=$a=’sys’;$b=’tem’;$d=$a.$b;$d(‘cat config.php’);

常见的命令执行函数:
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()

这样就可以得到flag

web11

观察代码,这次是将cat给过滤了

但是还有很多显示文本的命令

cat命令用于连接文件并打印到标准输出设备上。

tac将文件全部内容从尾到头反向连续输出到标准输出(屏幕)上

more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示

less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

sort 命令用于将文本文件内容加以排序。

nl命令在linux系统中用来计算文件中行号

uniq 可检查文本文件中重复出现的行列

Linux中,`` 作用是优先执行里面的内容,再把里面的内容传给外面的语句

web12

这次过滤的更多了,把 php , config , . ,也给过滤了

那我们把config.php进行base64编码绕过

?c=$a=base64_decode(%22c3lzdGVt%22);$b=base64_decode(%22Y2F0IGNvbmZpZy5waHA=%22);$a($b);

这样便得到了flag

web13

还是继续增加过滤,这次将 file 和 ; 给过滤了

?c=passthru(base64_decode(%27Y2F0IGNvbmZpZy5waHA=%27))?%3E

此处涉及到php中反引号的作用:

执行其内的语句并返回值

这样得到flag

web14

这次是增加了括号

?c=include$_GET[‘a’]?>&a=php://filter/read=convert.base64-encode/resource=config.php

这样进行绕过

得到了一串base64编码的文本

解码之后得到flag

web15

这次对等号,问号和星号进行了过滤,反而分号可以用了

用反引号接收一个参数a,然后a中是所需执行的语句

?c=echo $_GET[a];&a=cat config.php

这样得到flag

web16

这道题的代码显示,ctfshow加上参数c的md5值等于 a6f57ae38a22448c2f07f3f95f49c84e

进行md5解密

这个结果去掉ctfshow就是我们要传入的参数c了

得到flag

web17

过滤了php,首先考虑了data伪协议,但是经过尝试之后发现不行

看了其他大佬的wp之后,知道了是一道日志包含题,抓包之后查看得知服务器为Ubuntu(由nginx搭建的网站,nginx的日志文件默认地址在var/log/nginx/access.log和/var/log/nginx/error.log)

那我们创建payload:

/?c=/var/log/nginx/access.log

然后用bp抓包,在UA处增加

这样我们得到了36d.php和index.php两个文件名

接下来再在UA处

这样我们就得到了flag

注意,日志包含类的题目不能出现语法错误,不然就会一直出现相同的报错,必须重开容器了。

接下来的web18-web21都可以这样解决


ctfshow-web_萌新
https://sakula33.github.io/2025/02/22/ctfshow-web-萌新/
作者
sakula33
发布于
2025年2月22日
许可协议