题目地址:http://chinalover.sinaapp.com/web6/index.php
由图可知,此处给出了源码,源码如下:
分析源码:页面中输入的参数传到php中,if()对user和pass都进行了是否为空值的判断,若都不为空,则来连接数据库。然后再把页面中的user值赋值给 $user ,把页面中的pass值md5加密后赋值给 $pass ,最后拼接sql语句并执行。而要让flag成功输出的条件为:页面输入的pass经过md5加密后得到的值要和从数据库中查询到的user用户存储在数据库中经过md5加密后的值相同。
思路:构造能够返回将密码1 进行md5加密后的mysql语句,这样的话就能满足flag输出的条件,从而获得flag值。
准备:获得1经过md5加密后的值
C4CA4238A0B923820DCC509A6F75849B
构造payload:
Sql语句为 “select pw from ctf where user=‘$user ‘”
页面输入的参数user 将拼接到 $user中
构造 ‘ union select ‘C4CA4238A0B923820DCC509A6F75849B‘ -- (空格)
拼接后为:
select pw from ctf where user=‘’union select ‘c4ca4238a0b923820dcc509a6f75849b‘ -- (空格),这里用’--+’用来注释行不通,用‘-- ‘却可以,问题在哪我也没想明白,先放着吧。
flag:
总结:
- ‘select 123acav ;’ 该语句执行时报错。
- ‘select ‘123abc’; ‘执行成功。