HDCTF-2nd复盘
HDCTF_2nd, 海南大学校内赛。国庆打的,之前没时间复现。校外人水了个纪念品。感谢Gamous不舍赐教。感动的哭了。比赛的复盘。有些没做出来的阔以看官方wp。题附及官方wp已打包:
蓝奏:
https://wws.lanzous.com/i7HmLhmw18f
百度云:
链接:
https://pan.baidu.com/s/1mKWDG-bftD-kPAeZwEUvGw
提取码:bcxv
Web
signin:
![](https://img.haomeiwen.com/i48820/1f01f90a46aee2e2.png)
打开网页,源代码,base64解码
babysql(ACTF题):
这题。。一开始以为是纯注入,一个一个试'load_file','information_schema'。还过滤了挺多东西的
后来就直接绕过注入,直接select即可。看提示(划线划掉的)也是
查完字段是三个之后,直接查询flag即可
1' union select 1,2,flag from flag#
![](https://img.haomeiwen.com/i48820/787bf22ddc51f10e.png)
![](https://img.haomeiwen.com/i48820/1d66f0d87fbb7155.png)
babyrce(ACTF题):
这题也没啥限制,就是最简单的rce,../ 就返回上级目录,flag就是flag文件。
![](https://img.haomeiwen.com/i48820/55527453d709d227.png)
easygit(ACTF题):
![](https://img.haomeiwen.com/i48820/480cccae000f3a30.png)
git泄露,github上找个工具,下了源码直接cat flag就好了
backup_file(ACTF题):
index.php.bak,备份文件,根据源码绕过就好了,构造?key=123即可
![](https://img.haomeiwen.com/i48820/3e5f5cb9c141c01f.png)
![](https://img.haomeiwen.com/i48820/2229f1f9f921bc43.png)
考点应该是php弱类型
参考别人总结的:
https://www.cnblogs.com/Mrsm1th/p/6745532.html
![](https://img.haomeiwen.com/i48820/40fcc28d61a79b13.png)
intval函数直接将值转换成数字,即数字跟字符串比较。
传key=123即可绕过限制
![](https://img.haomeiwen.com/i48820/933cf5772014ac11.png)
easy_file_include(ACTF题):
伪协议直接包含
http://8.129.15.153:20005/?file=php://filter/read=convert.base64-encode/resource=flag.php
点击页面的tips,文件包含php伪协议直接尝试即可
![](https://img.haomeiwen.com/i48820/7023f07375ea3d2c.png)
![](https://img.haomeiwen.com/i48820/29b25db20c9c6ff0.png)
![](https://img.haomeiwen.com/i48820/11b651fddb277490.png)
do_u_know_HTTP:
提交get参数Hainan_University,然后在post提交HnuSec即可。在根据最后一条,burpsuite抓包加上http头
没啥难的,就按要求提交各类参数就好了。就是post的时候我bp一直不行,用hackbar才可以
![](https://img.haomeiwen.com/i48820/afc58930ec0a6d17.png)
erciyuan
![](https://img.haomeiwen.com/i48820/bc4b785e1a970e04.png)
![](https://img.haomeiwen.com/i48820/9969250520bebdc6.png)
![](https://img.haomeiwen.com/i48820/022e1bacae26a0cc.png)
看源码,直接跟到最后。先第一步绕过正则即可,^符号取反。就把除了26个大小写字母和数字的其他替换成空
第二个过滤则把HnuSec替换成!。观察前面的hint我们要访问到!HDCTF!.php文件。就构造HnuSecHDCTFHnuSec.php的编码即可绕过
![](https://img.haomeiwen.com/i48820/aad4335c21fd795f.png)
![](https://img.haomeiwen.com/i48820/73b6aaada7893749.png)
hash_hmac:
观察源码,直接绕过即可。post传x[]=QNKCDZO&y[]=aabg7XSs。给了个 fllllllllllllag.php,访问cat flag
md5弱类型,直接绕过吧
![](https://img.haomeiwen.com/i48820/4b7f298ab528937e.png)
![](https://img.haomeiwen.com/i48820/32f7ef3bc150643c.png)
![](https://img.haomeiwen.com/i48820/e15e4169e76e1162.png)
welcome:
猜测弱口令,admin/123456,密码错误左上角弹出密码。输入 cat flag
![](https://img.haomeiwen.com/i48820/ec98a304e0608f13.png)
![](https://img.haomeiwen.com/i48820/c3121c9c93757849.png)
calculator_v1
flask的一题,下载给的python文件,没做任何过滤。直接cat flag即可
![](https://img.haomeiwen.com/i48820/469900e9e502096a.png)
![](https://img.haomeiwen.com/i48820/57b7c5484aed2c31.png)
ezflask
给了个参考链接,模板注入。还什么都没过滤。就直接套了wp里的payload。
{{config.__class__.__init__.__globals__['os'].popen('cat ./flag').read()}}
![](https://img.haomeiwen.com/i48820/c1e59dbd087af169.png)
warmup
![](https://img.haomeiwen.com/i48820/5b9eff66c017c557.png)
getshell
getshell。看过滤。过滤逗号和等号,而后用.来连接前后。
直接把连接前面的闭合掉,在用//注释符把后面注释掉
![](https://img.haomeiwen.com/i48820/bb3e273339903886.png)
直接闭合后面也是可以cat flag的,看源码就拿到flag了
![](https://img.haomeiwen.com/i48820/8dfb585637696156.png)
dudaima
get给pass传个值,然后反序列化他。就满足if里的条件即可
就可自己测试了。引用赋值和传值赋值参考:
https://blog.csdn.net/m15712884682/article/details/77350027
![](https://img.haomeiwen.com/i48820/4b00103666b6228d.png)
![](https://img.haomeiwen.com/i48820/c5f91d11f0fa339c.png)
剩下的web题就不咋会了。还有几道flask和反序列化,可以看看官方wp
misc:
签到题:
直接输flag,签到即可。。
![](https://img.haomeiwen.com/i48820/ab692ebdfc67264b.png)
一步之遥:
伪加密
![](https://img.haomeiwen.com/i48820/37b21b4166623241.png)
改成00打开
![](https://img.haomeiwen.com/i48820/a9706fd3b7d956ea.png)
你知道lsb是什么意思吗
就lsb低位隐写,存为7z即可
![](https://img.haomeiwen.com/i48820/774891a27bf6ccc7.png)
后来保存下来,看到文件较小,也猜到可能是crc32,找工具爆了确实也不是
![](https://img.haomeiwen.com/i48820/57190ba315247dcb.png)
在比赛中是没想到可能会是纯数字,后来就写个纯数字的爆破脚本即可(脚本来自官方wp)
![](https://img.haomeiwen.com/i48820/4f55074080d99bab.png)
girlfriend:
导出HTTP对象,选最大的是图片文件。打开看到flag
![](https://img.haomeiwen.com/i48820/68603a871cf6ad6f.png)
![](https://img.haomeiwen.com/i48820/3e4bdb66bd886c6b.png)
嘤语:
----- . ----. -... ..--- -... ...-- -.... . . ...-- ...-- -... .---- ...-- ..-. ..-. ----. .- --... ...-- -.. ..-. ....- ....- ----. -... --... --... . ..--- ..-.
http://www.zhongguosou.com/zonghe/moersicodeconverter.aspx
![](https://img.haomeiwen.com/i48820/7b6b62e9f2b86fd6.png)
奇怪的字符:
leet,l33t。黑客语言。wiki上找一下。有对照表,也有在线的网站
http://www.englishcn.com/tools/Leet.htm
http://output.jsbin.com/IHoFuQE/1
https://www.dcode.fr/leet-speak-1337
http://www.toolsxx.com/code/1337.html
https://www.gamehouse.com/blog/leet-speak-cheat-sheet/
![](https://img.haomeiwen.com/i48820/e63af3c6b78244be.png)
无字天书:
![](https://img.haomeiwen.com/i48820/eb70dff324f04f91.png)
打开文件,文件只由空格,tab,换行组成。可能是white-space
![](https://img.haomeiwen.com/i48820/6b93a10c5b2833ca.png)
找个在线的网站贴进去可以直接解,或者去gayhub上找个。
https://vii5ard.github.io/whitespace/
![](https://img.haomeiwen.com/i48820/13e0dfdeb63bba68.png)
ook直接解密就可
https://www.splitbrain.org/services/ook
![](https://img.haomeiwen.com/i48820/b1a6fec5a4265162.png)
你真的了解dns吗?:
nslookup -type=txt hdctf.0x00.work,直接看到flag
dns的type表示dns的协议类型
![](https://img.haomeiwen.com/i48820/dfd90445d84cc145.png)
nospace
零度字符隐写
解出来的就是password,密码admin:
https://offdev.net/demos/zwsp-steg-js
![](https://img.haomeiwen.com/i48820/e08f148a344aa167.png)
雪花飘飘
零解一题,看了wp还没给我整懂,问了一下出题人。diff原页面和链接页面。发现换行,考虑网页隐写。使用stegsnow。snow=雪
![](https://img.haomeiwen.com/i48820/f921ce0115a1911d.png)
用在线工具diff即可。
![](https://img.haomeiwen.com/i48820/4ea46660dcdb8503.png)
海南上一次下雨时间。
![](https://img.haomeiwen.com/i48820/abfcedd86059c21c.png)
然后就保存题目链接的html文件。
![](https://img.haomeiwen.com/i48820/a6b15404e1b13826.png)
花朵解密,https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=huaduo
![](https://img.haomeiwen.com/i48820/e673916096314c91.png)
海底捞帧预告片
这题感觉不难,就是头大,看了wp还能懂
找到了可以用FFmpeg删除重复帧的命令,和wp一毛一样
问了一下出题人,还给一个用脚本的思路,Hash比较每一帧来筛选。写不来,Ffmpeg天下第一。
![](https://img.haomeiwen.com/i48820/bd615a39a60a1ca3.png)
![](https://img.haomeiwen.com/i48820/38e0e44e3fb9ecc1.png)
删除重复帧之后,提出图片。
![](https://img.haomeiwen.com/i48820/e026893df7f73b76.png)
![](https://img.haomeiwen.com/i48820/d64d416e2ab86ef6.png)
最后筛选到4张,但目前无ps就没继续做下去了,拼起来反色即可得到二维码。
![](https://img.haomeiwen.com/i48820/92cf9132d140df0c.png)
专业团队:
分四阶段,主要就是要降噪处理(不知道能不能把抬棺那段分离出来)。还有能听出来DTMF编码。morse降噪完直接看就好了。DTMF不能的话,就手解。降噪完也是能看的,一个是频谱,然后第二个应该是morse,第三个是dtmf 第四个就是流派的flag。连起来就是最后的flag了。
![](https://img.haomeiwen.com/i48820/af7655010dac6066.png)
![](https://img.haomeiwen.com/i48820/a496d7592648086a.png)
![](https://img.haomeiwen.com/i48820/6abe6f77d3a53806.png)
调两个频段之后对着DTMF的表就可以看出来了。用工具解的话有几位是乱了的
![](https://img.haomeiwen.com/i48820/327fe6e22f5b66ec.png)
![](https://img.haomeiwen.com/i48820/5dceee1a564cc75c.png)
瓦斯矿工
很新奇的一道题,虚拟货币相关。
metamask使用可参考:
https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true
直接foremost分离图片即可得到一个压缩包,拖进16进制文件里也可以看到有12个50 4B 03 04的PK头
![](https://img.haomeiwen.com/i48820/ac3ee1a2189d4351.png)
观察到大小较小,直接爆破crc即可,以太坊钱包通过助记词登录。助记词可通过数字查询,这里就只爆破数字。
![](https://img.haomeiwen.com/i48820/c3d351100cf507b2.png)
直接破即可,https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt#L350
以太坊钱包通过BIP-39生成私钥,数字查询助记词。
![](https://img.haomeiwen.com/i48820/55669f414e12105c.png)
脚本
import binascii
import zipfile
import time
def crc32asii(v):
return (binascii.crc32(bytes(str(v), encoding='ascii')) & 0xffffffff)
for x in range(1, 10000):
f = zipfile.ZipFile("00000001.zip", "r")
for i in range(1, 13):
GetCrc = f.getinfo(str(i))
crc = GetCrc.CRC
a = ("0x%08x" % crc)
j = crc32asii(x)
if ("0x%08x" % j) == a:
print(i, x)
time.sleep(0.1)
使用助记词登录之后,复制地址,去查询最近的交易记录
![](https://img.haomeiwen.com/i48820/1d9bf5fba92362d2.png)
![](https://img.haomeiwen.com/i48820/4b346eec60486bb8.png)
详情里得到的直接转字符串得到flag
![](https://img.haomeiwen.com/i48820/83f5d232dd247a6a.png)
到点了,上号
出题肯定有故事doge
考点是mp3保留字隐写数据,wp里给了wiki链接
https://en.wikipedia.org/wiki/MP3#File_structure
直接拿脚本就出了,未学习原理。
https://github.com/impakho/de1ctf-mc_challs/blob/master/writeup/mc_easybgm/mp3.py
![](https://img.haomeiwen.com/i48820/cadab8db60015c6a.png)
crypto
起源:
应该是凯撒直接解
![](https://img.haomeiwen.com/i48820/7c09594466718386.png)
![](https://img.haomeiwen.com/i48820/e32a04eff2e36c0a.png)
围住世界:
这题疑惑了挺久的,以为是自己找的网站和软件不对。反反复复里里外外。试了好几个。后来翻看笔记的时候发现可能是w型栅栏密码
http://www.atoolbox.net/Tool.php?Id=777.com
![](https://img.haomeiwen.com/i48820/17ff2798008f7717.png)
有趣起来了:
![](https://img.haomeiwen.com/i48820/c1d766dd893d0914.png)
就倒序,ctf特训营上有讲的。quiqui也可以做的,前面改成hdctf就好了。顺便把字母改一下即可。
![](https://img.haomeiwen.com/i48820/6e01b110ece41c3e.png)
官方wp上给的是用脚本
![](https://img.haomeiwen.com/i48820/cb3009e70b05b43b.png)
神秘字符:
一看时候只注意到mc。以为是什么mc的其他版本。就去疯狂google也没找到。后来就翻到mc的wiki。就mc附魔台上的字符,玩过mc的应该都知道,mc wiki上找张对比图,对比就好
![](https://img.haomeiwen.com/i48820/ee15d46aab317e6f.png)
https://minecraft-zh.gamepedia.com/Minecraft_Dungeons:%E7%AC%A6%E6%96%87
![](https://img.haomeiwen.com/i48820/bee28bb109f73c34.png)
茫茫人海:
base64隐写,跟[ACTF新生赛2020]base64隐写挺像的。反正也是套脚本就好了
![](https://img.haomeiwen.com/i48820/b66adcdb74ee08bf.png)
![](https://img.haomeiwen.com/i48820/7853b6072f010d01.png)
奇怪的贝斯:
整不会了这题,抱歉。
具体思路应该就是构造一个码表。\x即是转义字符,方便表示
babyrsa:
![](https://img.haomeiwen.com/i48820/87b54cf257554a92.png)
https://www.anquanke.com/post/id/87105
这题还好,纯现代密码菜鸡,不过给了pqe。又给了个链接,先求欧拉,然后就n,d,m
![](https://img.haomeiwen.com/i48820/89644a163602d494.png)
#coding:utf-8
from binascii import a2b_hex, b2a_hex
import gmpy2
#flag = "*****************************"
p = 262248800182277040650192055439906580479
q = 262854994239322828547925595487519915551
e = 65533
n = p*q
phi = (p-1)*(q-1)
d = gmpy2.invert(e, phi)
c = 68405618655091231850901459679785989915772760467494039910176075122809565696913
m = pow(c, d, n)
print(m)
#a=(int(str(m),16))
a=191853633260784640753082658319123392799532077630882079100618224148262386737246462849
https://www.bejson.com/convert/ox2str/
![](https://img.haomeiwen.com/i48820/9047f21b797ac03c.png)
Re
sign_up
直接查看字符串就可看到flag
![](https://img.haomeiwen.com/i48820/5d247339fc7280e3.png)
re1
这题比赛的时候看,以为是异或运算+base64换表然后解密,找了半天硬是没找全64个字符。然后就不了了之。Re也不咋会。之后的题可以看官方wp。
pwn
calculator
题目描述:
![](https://img.haomeiwen.com/i48820/25d6ca52ab4cf068.png)
python2的input执行输入导致rce
先用__import__('os').system('/bin/sh')。直接rce
然后用python -c 'import pty;pty.spawn("/bin/bash");'。获得一个bash的shell
![](https://img.haomeiwen.com/i48820/e582c1dd1914c34b.png)
找到之后cat即可
![](https://img.haomeiwen.com/i48820/d4129813d4e6e31c.png)
自己写了一个。。发现py直接input就可了
![](https://img.haomeiwen.com/i48820/3d79c09857a909da.png)
warmup
abs函数是取绝对值的意思。所以不可能小于0。考虑abs负数溢出。就是2的31次方。直接写脚本传就可
![](https://img.haomeiwen.com/i48820/79f540d78b1df02d.png)
![](https://img.haomeiwen.com/i48820/d96fafc21c442098.png)
![](https://img.haomeiwen.com/i48820/3fe94dba8ba368e9.png)
backdoor
字符串查看到sh,跟入
![](https://img.haomeiwen.com/i48820/bd0258d3ee39052a.png)
继续跟
![](https://img.haomeiwen.com/i48820/cb8515d8de7e2db6.png)
bash后门
![](https://img.haomeiwen.com/i48820/40943e6f14480257.png)
查看buf到r的位置
![](https://img.haomeiwen.com/i48820/632a1c914f376f59.png)
编写脚本溢出即可
![](https://img.haomeiwen.com/i48820/1280b74ccf78c7f2.png)
![](https://img.haomeiwen.com/i48820/c89fcf8617ab7e3d.png)
其他pwn题本菜不会,pwn题可以参考某大佬,应该是ak了pwn题的:https://www.cnblogs.com/z2yh/p/13771942.html
相关实验:CTF实验室 https://www.hetianlab.com/pages/CTFLaboratory.jsp