一、我喜欢培根
登录到实验吧后,进入到密码学,挑了半天(找一个简单的题目),最终选择了“我喜欢培根”这个题,以下是我的阶解题过程:
单开题目链接后显示如下:
没有见过这种符号,完全看不懂,联想到了题目(我喜欢培根),所以赶紧去百度培根加密,发现培根密码与这些符号并不一样。然后直接复制部分符号去百度,结果如下:
原来是模式密码,本来打算顺便照着这个百度的结果一一对照翻译,但反映到一半发现眼睛都花了,找了一个在线翻译摩斯密码的,然后翻译结果如下:
MORSE..–.-IS..–.-COOL..–.-BUT..–.-BACON..–.-IS..–.-COOLER..–.-DCCDCCCDDDCDCCCDDCCCCCCCCCDDCDCCCCDCCCCC/CDCCCDCCDC/CCCDCCDDDCCDDDCCDCDD
莫斯很酷但是培根更酷,后面的DCC…等,联想到了刚开始百度的培根密码:
但是培根中是ab,这个是cd,于是使用a替换c,b替换d,并根据培根的加密规则,将密码5个一组分开。尝试翻译如下:
DCCDC baaba s
CCDDD aabbb h
CDCCC abaaa i
DDCCC bbaaa y
CCCCC aaaaa a
CDDCD abbab n
CCCCD aaaab b
CCCCC aaaaa a
/CDCCC abaaa i
DCCDC/ baaba s
CCCDC aaaba c
CDDDC abbba o
CDDDC abbba o
CDCDD ababb l
即答案:shiyanbaiscool,但是直接提交CTF{shiyanbaiscool},显示答案错误,然后发现有两个/是否代表空格?答案分开写CTF{shiyanba is cool}还是不对。尝试了好几次,最后发现也可以翻译成大写CTF{SHIYANBA IS COOL} 终于正确!
二、因缺思汀的绕过
登录题目后,页面显示如下:
第一个反应便是SQL注入的一个绕过,但是试了几个都未成功。然后查看页面源码:
发现一个source.txt,直接从url上访问此地址:
发现对常见的注入都进行了过滤,所以SQL注入是行不通了,紧接着发现了flag打印出的条件满足这两个条件,便能得到flag,否则打印出别的信息。
分析两个条件语句,第一句是mysql数据库记录的数据必须是一行,那么是使用limit关键字就可以限制行数,而上面的过滤并没有limit,所以使用limit offset先尝试查看一共有几行数据:
‘ or 1 limit 1 offset 0
‘ or 1 limit 1 offset 1
‘
or
1 limit
1
offset 2
现offset 0和1的时候返回的内容满足了第一个if条件,offset 2的时候不满足,说明一共有两行数据。
对于第二个if语句,说明输入的密码和系统中的密码要一致。我们利用null=null的原理。也就是输入一个不存在的数据然后从数据库中再调用一个不存在的数据,两者也可以相等:利用group by with rollup来绕过,(group by 是依据XX字段进行分组,with rollup 是进行统计结果)之前代码里已经说明存在‘pwd’字段,所以group by with rollup会在统计后产生一条null信息,然后在提交表单时下面一行pwd里不填写任何内容进行提交:
‘ or 1 group by pwd with rollup limit 1offset 2#
此行表示从数据库里调出来的一行空密码之后加上不填写的密码,刚好使得第二个if语句为true。
得到flag。
来源:freebuf.com 2019-03-21 16:07:14 by: 凯信特安全团队
请登录后发表评论
注册