其登录逻辑是,根据name到数据库中查找,将查找到的用户名对应的md5加密的暗码与传入的pw的md5值进行比力(即存储在数据库中的是暗码的md5值),若相等,则登录成功。这与CTF比赛中常见的直接对用户名参数进行注入不同。
当我们传入name=1' Or 1#&pw=a时,查询的结果是用户admin的用户名和暗码,即$arr[1]的值是admin,$arr[2]的值是admin用户的暗码。当pw的md5值与$arr[2]的值相等时,就返回flag。而admin用户的暗码是我们无法得到的。
因此我们需要控制$arr[2]的值,将其赋值为pw参数的md5值。当传参如下时:
name=1' union select 1,"admin",3#&pw=a
复制代码
返回也是 wrong pass,说明用户名存储在表中的第二列,猜测暗码存储在第三列,传参:
name=1' union select 1,"admin","0cc175b9c0f1b6a831c399e269772661"#&pw=a