MoeCTF 2024–Web渗透测试与审计
第一周
Web渗透测试与审计入门指北
下载附件,附件提示,搭个php网站访问即可获得flag(本地搭一个就行)
整体说一下思路吧,首先得有一个phpstudy,将页面文件放到apache服务的访问页面的默认目录,开启apache服务,直接127.0.0.1访问对应网页文件就可以,现在来操作一遍吧!
- 配置网站目录,将页面文件放到网站目录下

- 开启服务

- 访问页面,得到flag

弗拉格之地的入口
打开之后,是这样的,他提到要用爬虫,那么大概率就是要爬取网页的目录以及文件

那么我们就开始爬虫,我打算用burpsuite来进行,开启代理,burpsuie抓包
进行扫描
得到扫描结果,发现有一个robot.txt文件,访问看看

他说只有robots才可以看web-tutor,那么就按照他说的来,改代理和disallow,在此界面抓包,放到重放器里,改完之后,发送

那么现在就去刚刚看不了的东西里看看,答案出现
ez_http
刚开始就提示你用post发请求了

但是还不知道请求参数,那么点击hit the question setter,出现参数,那么就来请求吧,这里我用的harkbar

发起请求,这里不用参数,也可以只要是post方法就行

下一步要求post参数了,按照他的来

要求get参数

要求源来自于这个地址,那么标识源的就是refer参数,添加一个refer参数

要求cookie的值,添加一个cookie的值

要求使用这个浏览器,那么相当于要让此浏览器来作为代理,那么就改

这里要求只允许本地进入,其实就是配置X-Forwarded-For,将其配置为本地

得到flag
ProveYourLove
先看题目,300份,敏感的人已经大概率猜到应该是要用intruder

打开环境是一个post表单,先填一填信息,直接burpsuite抓包

抓到这个包,里面有我提交的信息,然后放到intruder里

直接攻击,这里给他发400份,防止意外

攻击之后,查看网页页面,flag出来了

弗拉格之地的挑战

按照步骤访问第一个页面 /flag1ab.html

首先,一片空白不存在的,第一反应就是查看源代码

按照步骤访问第二个页面 /flag2hh.php

他提到了http网络传输,那么就是看一下network的请求包和响应包,也是不出意外的在响应头中找到了信息

按照他给的提示,继续前往第三个页面 /flag3cad.php

这里多半就是要考传参了,直接用harkbar,一步到位


继续前往下一关,哦吼,有坑,经过深思熟虑,他提到过来,那么就是来源,从哪来,那么尝试一波更改referer

搞起

直接进入下一个页面

看到这个页面,按下开始后,让我按9,很明显没有9,但是我可以自己写一个9的按钮
这不就有了

还不给我flag,还需要一波操作

console.log是控制台输出信息,那当然是去控制台查看了

前往下一个页面 /flag5sxr.php

他让我输入,那就按照他输入,但是好像是不行的

查看一下源代码吧,源代码里有他的前端验证规则

然后就发现,好像没什么用

或许,这才是关键,他说前端不靠谱,意思就是绕过前端检查吧,那我直接把的调用命令删了,是不是就可以了
来,开干!

把onsubmit这个参数删了,然后再输入一次”我想要flag”(英文)

成功!!前往下一关!

分析一下,存在一个get请求,存在一个post请求,如果get请求参数等于”/flag/“的时候就die,然后如果get请求参数等于”/flag/i”就出现flag,最大的问题就是匹配get的这个if语句先执行,即使输入/flag/i,也会被if语句匹配了,那么就永远执行不了elseif
根据php学习的知识,php是不区分大小写的,那不是就可以大小写直接绕过吗?
因为get和post都要,要用到harkbar,但是post没要求,随便给个值就可以
下一关!!!

熟悉的eval和POST,直接一个蚁剑拿下
根目录下找到两个文件,一个flag,一个提示

flag在此!

提示文件:

按照提示,把之前的所有flag按顺序拼在一起,一看,大小写还有等于号,妥妥base64编码,直接网上找一个base64解码平台,解开就有flag了
结束!七龙珠!
第二、三周
ImageCloud前置

看题目要求,其实熟悉SSRF的人,一眼就知道这是一个SSRF漏洞,因为有一些关键词,’url’,’/etc/passwd’是linux系统中用户文件,’出不了网’,这一些都说明是在内网中,那么SSRF漏洞就可以让服务端去访问内网的网址,可以使用file、dict、gopher、ftp协议进行请求访问相应的文件

这里需要上传一个url那么就直接来读文件吧

读出了文件,就找到了flag

ImageCloud
依旧用刚才上传的php一句话木马实验一下

现在上传php后缀名就不可以了,那就换一个jpg上传试试,burpsuit抓包,更改文件后缀名php5、php3、phtml均被过滤了
垫刀之路01: MoeCTF?启动!

这题很简单,已经getshell,直接执行Linux系统代码试试(常见的服务器系统是Linux)

查看一下flag文件内容

看来是不在这个文件里的

也不在这里,经过我一番查看,一番折腾,寻找资料
才意识到他让我们看环境变量
$PATH、$HOME、$SHELL等那么多环境变量,去找哪一个呢?
最后经过一番查找,找到了两个查找环境变量的命令
- env
- echo $FLAG(这个是FLAG作为了环境变量)
终于找出来了!两个命令都可以查看flag


垫刀之路02: 普通的文件上传

看题目就是一个文件上传漏洞,上传一个php文件,里面包含一句话木马,然后用蚁剑连后门,直接控制系统,那么就开干!

他说上传图片,但是我还是想先直接上传一个php文件先试试

所以说上传图片都是假的,他还没过滤我的php文件名后缀
那么直接用蚁剑连吧!

连接成功,进来寻找一波

熟悉的配方,和垫刀01一样的flag.sh,那么直接开一个虚拟终端,直接输入命令来查看


flag出现,结束!
垫刀之路03: 这是一个图床

上传一个带一句话木马的jpg图片,然后在bp中将文件类型改为php,也就是绕过前端的js对后缀名的检查


已经保存到这个位置,用蚁剑直接连接试试
连接成功,那就进去看看,然后之后的操作就和上面一样了,开一个虚拟终端,查看环境变量

垫刀之路04: 一个文件浏览器

题目说在下面的文件里找flag,那么就开始吧
点开链接一个一个找,果然也是没用的,但是url弹出了一个path的参数,让我想到了ssrf,那么就来一试
找到flag文件,但是打开没有flag,需要继续寻找

最后在这个目录找到了

flag在此

垫刀之路05: 登陆网站

第一反应就是,不信,我就要爆破,结果真的爆不出来,已老实,求放过
可能前面做题,harkbar用多了,下一反应就是用harkbar捣鼓一下,还是不行
最后想到了好久没用过的sql注入,哦吼,真就出来了

只能说,久违了SQL注入!
垫刀之路06: pop base mini moe
很典型的一个pop链,开干,分析代码,可执行指令eval,$s执行eval
传入data参数反序列化之后得到a,那么payload就应该将a序列化
类 A中有属性a,并且有一个__destruct()函数,是在对象销毁时调用,也可以说创建对象之后,不用了销毁之后调用,那么就创建一个对象
并且实例化一个对象后,a的值赋值给s,这意味着 $s变量所引用的值(也就是 this->a)将被作为一个函数或方法调用,并传入 this->evil作为参数
我们可以使用 system 函数来执行任意的系统命令
1 | $a = new A(); |
那么构造payload
1 | http://127.0.0.1:52682/?data=O:1:"A":2:{s:4:"evil";s:4:"ls /";s:1:"a";s:6:"system";} |

1 | http://127.0.0.1:52682/?data=O:1:"A":2:{s:4:"evil";s:9:"cat /flag";s:1:"a";s:6:"system";} |
flag就出来了
静态页面

好好好,什么都没有,查看了页面源代码,查看了检查,啥都没有
直接扔到burpsuit里进行扫描,看看有没有其他目录和文件,然后真就有
看到了flag的踪影,那就先访问一下这个页面吧
让我直接访问这个php文件,照做就行
有眉目了,继续继续,既要上传get又要上传post请求,那么harkbar直接上
isset就是存在,isnumeric就是是数字,a和b不能是数字,且($a ==0&&md5($a)==$b[$a])
$b[$a]:这个表达式访问数组 $b中索引为$a 的元素
这里绞尽脑汁了,还是有点困难,最后请教了一位大神

我们来看传入的a参数,首先会验证a是否是一个数字,不是数字才能通过,这里我们用到0%201,用0%20也行,%20在url编码中空格,用 0空格 就可以绕过数字的检查,然后进入到之后的条件$a == 0,这里==是弱比较,JavaScript 会将0空格字符串 ‘0 ‘ 转换为数字 0,然后比较 0 == 0,结果为 true,b的话只需要去网上找一个md5加密工具加密一下’0空格’就可以,最后得到flag