[Writeup] 2018 安洵杯 官方Writeup(1)

[复制链接]
查看8048 | 回复2 | 2019-9-8 11:07:00 | 显示全部楼层 |阅读模式
转载自https://xz.aliyun.com/t/3445#toc-11WEB1-无限手套题目描述
中国的程序猿竟然在无意中发现了无限手套的后台地址,按照剧本,灭霸在今晚21:00就会打响指,宇宙命运危在旦夕!你能及时进入后台数据库,获取到无限手套的强制终止密钥,拯救宇宙吗?
考点
php trick,md5 sql注入
解题思路
打开主页,提示Parameter NOHO:The Number Of Higher Organisms,尝试在url中添加NOHO参数,提示Infinite gloves AI:Obviously,The Number of higher organisms is too small!!

尝试输入较大的数字,如99999999999999999e9等,提示Infinite gloves AI:The lenth of entered number is too long(>2).
了解或尝试可以发现php中数组恒大于整数,传入?NOHO[]=即可绕过验证。
输入框提示验证密码,尝试输入1,发现在注释中输出了sql语句<!--SELECT master FROM secret WHERE password = binary '��B8��#� �P�ou��'-->,末尾为hex数据,抓包后发现数据为c4ca4238a0b923820dcc509a6f75849b恰好是MD5('1')的值,可猜测后台语句为SELECT master FROM secret WHERE password = binaryMD5(password)
看似好像无法注入,但password可控,所以MD5(password) 可控,相当于WHERE password =后面可控,明显是可以注入的。
写个php脚本爆破,使MD5后的hex数据刚好含有'='的hex值(273D27),即可使查询返回true。
分析:此时语句变成了SELECT master FROM secret WHERE password = 'BBB'='CCC',假设password='AAA',那么在执行sql查询的时候,语句的优先级是这样的:('AAA'='BBB')='CCC'
很明显'AAA'不等于'BBB',所以'AAA'='BBB'返回0,语句变成了0='CCC',当这里的数字和字符串比较的时候,Mysql会将字符串转换为数字,这里的'CCC'被转换为0,0=0为真返回1,最后成功构造闭合sql语句,使查询返回true,进入后台拿到suspend code,即flag(脚本见附件)



回复

使用道具 举报

奇秒 | 2019-9-15 22:25:43 | 显示全部楼层
回复

使用道具 举报

xxxxt | 2019-10-13 15:55:30 | 显示全部楼层
思路真不错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

4

主题

12

帖子

72

积分

打谱CTF

Rank: 3Rank: 3

积分
72