前言
这次比赛也算是一个疆内CTF比赛的一个摸底,将会今后疆内比赛发展的一个趋势,此次参加比赛的团体有来自全国各地的64个团体、137名个人,共329名选手参赛。为期三天的比赛,也算是走过了全程,前两天的个人和团体的刷题晋级赛和第三天的个人和团体的攻防赛,我带的两个队伍双双都挺进了决赛,最后选择两个人决赛和两个队伍的团体决赛的模式,完成了此次比赛。之前也是立了一个FLAG,就是疆内的比赛我们绝对要拼尽全力,也必须在疆内的高校队伍中排上前两名,这次也算是完成了这个flag,最终挺进决赛的高校队伍也就只剩下新疆师范大学-大象安全和大象与安全队伍了。为了这次比赛我们做了一个赛后的详细的复盘,包括攻防赛。
个人刷题晋级赛
个人赛期间比较蛇皮,状态什么的没有调整好,赛前 还给别人进行培训,结果参赛时,什么都不会,一些客观原因,导致比赛也不是很顺利,搞了两个选手的shell,导致很蛇皮。这里就复盘隐写、密码和web题目
misc题解
躲猫猫
拿到题目,发现是png文件,但是不行正常浏览图片,查看属性发现1M多,应该是包含了其他内容,使用binwalk发现,发现文件是从pdf文件格式开始的,我们可以尝试修改文件的后缀名为PDF(一般文件预浏览的话都是从文件内容格式的最开始的文件格式进行的),可以正常浏览,然后ctrl+a全选是否有隐藏的文字
坑点 使用foremost 等工具解压出来的文件,也会有一个pdf,但是ctrl+a发现是一个假的flag第8号
常规的过一遍stegsolve和binwalk没有发现什么问题,那就手动浏览一下十六进制,图片是jpeg,一ff 8d 开始,应该是ff 9d 结束,发现后面隐藏的有数据信息,foremost 也没提取到什么信息,就手动提取一下十六进制,导出文件。
应该是“当铺密码”
然后我们把 大量出现的数字46、63、33转字符
搜索一下 发现时0ok!解密
https://www.splitbrain.org/services/ook
flag{0ok_1_Ook}
- task_give_you_flag
一个gif文件,使用stegsolve浏览每一帧的图片信息,最后一帧出现一个二维码的图片,发现缺3个角,那就找一个完整的二维码,补一下角。
- 流量包解密01
直接使用
aircrack-ng 爆破,发现在跑IV,说明就是wpe加密的握手包,密码为[ 42:43:31:33:46 ] (ASCII: BC13F )
直接wireshark进行解密
浏览一下 http 协议
最后发现
妈耶最后发现,这个不是就是国赛出题的师傅吗,当时还私聊进行过交流,结果还是败给师傅了。:)太强了
Web题解
- LFI
1
2
3
4
5
6
7
8
9
$file = isset($_GET['file']) ? $_GET['file'] : NULL;
if(stripos($file, 'flag.php') !== false && stripos($file, 'base64') === false) {
include($file);
} else {
echo 'flag.php 中有你想要的';
}
highlight_file(__FILE__);
stripos函数是二进制安全目前没有办法绕过,只能考虑替换base64功能的过滤器进行文件的编码读取
参考https://lorexxar.cn/2016/09/14/php-wei/
最后payload :file=php://filter/read=string.rot13/resource=flag.php
- ezsqli
手工测试,发现是回现注入,过滤的关键字比较多,大概测试了,过滤了information和flag字段,这样就卡死了不能使用union select from通过mysql的内置数据库查询数据了,
手工大致猜测了一下数据库和表和字段http://10.98.98.25:5551/index.php?id=-1' union select 1,database(),3 || '1'='1
ctf 数据库 info 表 字段 phone username password email
感觉有点类似ddctf的过滤字段名的注入
最后本地测试了一下
源表中的数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19+----+----------+------------+---------------------+
| id | username | password | flag |
+----+----------+------------+---------------------+
| 1 | Dumb | Dumb | NULL |
| 2 | Angelina | I-kill-you | NULL |
| 3 | Dummy | p@ssword | xjnu{ctf-is-there!} |
| 4 | secure | crappy | NULL |
| 5 | stupid | stupidity | NULL |
| 6 | superman | genious | NULL |
| 7 | batman | mob!le | NULL |
| 8 | admin | 2122 | NULL |
| 9 | 0 | 0 | NULL |
| 10 | seck | test | NULL |
| 11 | seck | test | NULL |
| 20 | 114 | 123456 | 2332 |
| 21 | 0 | 123456 | 2332 |
| 22 | 1 | 123456 | 2332 |
+----+----------+------------+---------------------+
14 rows in set (0.00 sec)
Curl
访问题目出现一个输入框,随便填上一些地址,发现有waf,当时测试发现是ip的10进制可以进行访问,然后爆破了一波端口,发现就3306端口开着,一直没有办法,考点应该是通过伪协议进行文件的读取,但是发现file、http、等协议被过滤,当时没有想到是绕过这两个关键字,赛后才知道是file协议的大写绕过,直接读flag文件:
payload:curl=FILE:///flag
sha1
这个很常见的php的一些加密函数不能处理数组,如md5、sha1
密码题
mystical_sign
c2p9eWJfZ25hbHZ0X2Jfe2xoZ2JuX3JsdA==
解密出来sj}yb_gnalvt_b_{lhgbn_rlt
看起来比较想栅栏加密,然后进行 栅栏解密
http://ctf.ssleye.com/railfence.htmlsynt{blnl_abj_lbh_trg_vg}
然后进行凯撒偏移flag{oyay_now_you_get_it}
这道题应该和sctf的签到题差不多。task_simple_RSA
1 | 小明得到了一个RSA加密信息,你能帮他解开吗? |
题目直接给了n、c、e,那我们可以对n进行分解出p和qp = 218538667198531171522213512860093810267 q = 187925853952657607512617865502535480179
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import gmpy
from Crypto.PublicKey import RSA
n = 41069065654959614597750207738698085798765257876378561837894254544512565197793
c = 27990707239527629138352696377606718299992092729307910015562504696905353450041
e = long(11)
p = 218538667198531171522213512860093810267
q = 187925853952657607512617865502535480179
d = long(gmpy.invert(e,(p-1)*(q-1)))
key = RSA.construct((n,e,d))
print key
print key.decrypt(c)
print hex(key.decrypt(c))
print hex(key.decrypt(c))[2:-1].decode('hex')
flag为:ABCEF!th1s_was_very_hot_outside!
Powered by HyperComments