转载自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!!
尝试输入较大的数字,如9999999999999999、9e9等,提示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(脚本见附件)
|