开篇废话
今年 ustclug 的 hackergame 结束啦(然而我并没有前100名) 作为一个主力前端的学生 自然是web题目分数最高了~
题目
签到题
如图所示 将 disabled=“disabled” 的attr 删除即可提交flag
flag{需要提交token的题目}
白与夜
有一只猫的照片(alpha图层玩法)
*之前qq群缩略图和打开是色图也是这样玩的 可以看看这个 github repo
那么很明显 我们只需要把文件拉本地就可以解决 甚至拖动的过程就可以看到我们亲爱的flag(在macOS下)
至于官方解法就比我专业多了(
flag{4_B14CK_C4T}
信息安全 2077 (赛博朋克 2077)
这题目黑曜石浏览器(去年hackergame)和之前的红芯浏览器又被拿出来鞭尸了(
既然说2077年 那么我们直接穿越到未来(笑
这次的题甚至帮我们 useragent 都准备好了(去年要到官网F12找ua) 直接送F12 js 吧 (把now改成2077年就可以完成穿越)
(function () {
var now = 'Wed, 16 Oct 2077 00:00:40 GMT'
var ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) HEICORE/49.1.2623.213 Safari/537.36'
fetch('flag.txt', {method: 'POST', headers: {'If-Unmodified-Since': now+50000000, 'User-Agent': ua}}).then(function (res) {
if (res.ok) {
res.text().then(function (text) {
prompt('ctf flag is',text)
})}
})
})()
flag{Welc0me_to_competit1on_in_2077}
宇宙终极问题 42
这道题 Google 找新闻 ~~ 像抄题解一样 ~~(下面子问题我认为我不会也没看了)
https://www.sciencealert.com/the-sum-of-three-cubes-problem-has-been-solved-for-42
再附上一个梗图
flag{需要提交token的题目}
网页读取器
看到这题的时候我又想到之前有个 php 站因为请求用 file_get_contents 没过滤(完全)被日站故事
题目有提供源码 所以我们直接来审计,,,
重点肯定是 check_hostname 函数 即使是不懂 py 的我也一下子看出来了
def check_hostname(url):
for i in whitelist_scheme:
if url.startswith(i):
url = url[len(i):] # strip scheme
url = url[url.find("@") + 1:] # strip userinfo
这里 就是找到 @ 后面 然后只判断 @ 后面是不是合法的
if not url.find(../") == -1:
...... 以下省略
所以即使下面判断得再充分也没用了 我们来构建可以访问 http://web1/flag 的 url
这里提一下 虽然我们过了检测hostname的 但是如果将以下的url直接填过去 也是过不了的(会404)
http://web1/flag@example.com/
这里就要在flag后面加一个 ? 或者 ! 来解决 (至于问为什么的我觉得你可以点 #开篇废话 )是怎么跳转的以及 什么是URL?
flag{UrL_1S_n0t_SO_easy}
达拉崩吧大冒险
这道题我F12弄了几下,然后对输入没有过滤的地方只有料理大市场的地方了(买童子鸡增加攻击力)
不知道后端是用什么写的 但是隐约看得出来这是要我们怼几个大数进去负负得正(溢出)
我这里一开始随便怼了个 -long long 的数 然后再怼了个-1 好像就成功了
flag{what_an_amazing_dream}
然后这题在f12有个隐藏link 洛天依,言和 原创《达拉崩吧》
我看完了 你呢?
Happy LUG
这题 和 ustc 的 tg 群连接一样的 DNS TXT 一找就完事
什么? dig报错?
~> dig "😂.hack.ustc.lug.org" TXT +short
;; Got bad packet: bad label type
最简单的办法 输入到chrome 然后再复制…
~> dig "xn--g28h.hack.ustclug.org" TXT +short
flag{DN5_C4N_H4VE_em0ji_haha}
^ 至于为什么要这样 可以看维基百科的解释 https://en.wikipedia.org/wiki/Punycode
献给最好的你
这个也是来源于生活的一个题目 可以搜索下知乎提问
** 这题我直接偷懒用mt管理器解包了 在电脑上操作请自行搜索相关教程&&工具 **
一打开app 播放的自然是 中国科学技术大学校歌 - 《永恒的东风》 (不是目力也不是***)
我们先从资源包里面找下flag关键词
对应的id是 7F0E0032
然后我们直接拆dex 对应到了 com/hackergame/eternalEasterlyWind(永恒的东风)/ui.login/LoginViewModel
中间省略(这还能怎么找)
最终登录相关代码 在 com/hackergame/eternalEasterlyWind/data/LoginDatasource 里面
获得了一串神必字符串 AgfJA2vYz2fTztiWmtL3AxrOzNvUiq==
当我兴高采烈以为直接base64就ok的时候
~> echo "AgfJA2vYz2fTztiWmtL3AxrOzNvUiq==" | base64 -D
?k??g??ؖ??????Ԋ⏎
¿¿¿ 于是又看了下代码
char charValue = ((Character) it.next()).charValue();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(str3);
if (Character.isUpperCase(charValue)) {
charValue = Character.toLowerCase(charValue);
} else if (Character.isLowerCase(charValue)) {
charValue = Character.toUpperCase(charValue);
}
看得出来这是把大写字母换成小写 小写字母换成大写的玩法
~> echo "aGFja2VyZ2FtZTIwMTl3aXRoZnVuIQ==" | base64 -D
hackergame2019withfun!⏎
获得app内的flag 于是打开app 输入 就获得了flag
flag{learn_ab1t_andROID_reverse}
^ 当然肯定还有硬核直接干dex找出flag的 我是不会也不想花这时间了
我想要个家
chroot一把嗦(这玩意也能叫 Linux 基础知识?)
过程就直接看官方的writeup吧 我懒得了( https://github.com/ustclug/hackergame2019-writeups/blob/master/official/%E6%88%91%E6%83%B3%E8%A6%81%E4%B8%AA%E5%AE%B6/README.md
被泄漏的姜戈
然而这一题我一开始在hub上没找到
由题目可以找到在github和gitlab托管的repo
https://github.com/openlug/django-common
https://gitlab.com/openlug/django-common
我们 download as zip 下载下来
首先我们要知道这个原理 在 openlug/settings.py 下我们可以看到这个网站是用
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
也就是签名的cookies作为session(可以搜索下 JWTtoken 类似)
于是我们就可以用侧漏的 SECRET_KEY 来构建admin的session cookie(然后我并没有成功)
cd Downloads/django-common-master/
pip3 install -r requirements.txt
python3 manage.py runserver
我们的本地测试服务器就ok了
我们可以看到 views.py 20行有个 authenticate 函数判断用户密码是否正确 因此我们暴力修改这个函数即可,,,
经过一番搜索 我们可以找到 authenticate 函数在 /usr/local/lib/python3.7/site-packages/django/contrib/auth/init.py (Windows自己另外找啦)
然后我们用祖传游标卡尺来找相关代码
又找到了验证密码函数在 backends.py 里面
删除这一行就可以不验证密码直接登录成功了~
然后我们取到了带admin的session
sessionid=.eJxVjEEOwiAQRe8ya0PAMNPBpXvPQIZCpWogKe2q8e62SRd1-997fwUvy5z90tLkxwg3MHA5b0H6dyo7iC8pz6r6WuZpDGpX1EGbetSYPvfD_TvI0vJWIzlz7YhwcKhDChSjFUTtWLgjHpDZ2KAtfH_fZDBr:1iMxV9:24FW4GrYTxQo5EAP1Yky9V6WnAI
^ 仅供参考
然后用editthiscookie或者F12到目标网页即可获得flag
flag{Never_leak_your_sEcReT_KEY}
总结
这次的 Hackergame 还是很开心的 而且很多题目基于的是今年的梗/事件 然后我被强制学了 py3 然而苦于高三没有时间肝,最后200名以内也感觉不错就是了~
至于要开IDA的那种反编译题目 还有纯算法的(迫真计算器、红包之类的) 题目太长的 我就完全不会了(真是为难我一个数学30多分的人)
这次还了解了 shellcode x^3 + y^3 + z^3 = 42 的迫真玩意(后面的可以坑同学了)
收获还是挺大的 希望明年能前100 这么早立flag怕是拿不到flag了
最后:
人生苦短,教练我不想学py