逻辑sql注入
关键词判断
1 | 联合注入:unin被过滤 |
打开页面源码,看到
1 | <!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5--> |
由于base32的特征是纯大写+数字,所以进行base32解密,得到有等于号的字母加数字,猜测是base64,进行base64解密,得到
1 | select * from user where username = '$name' |
可见在username中有注入点,由于=和or被过滤,所以可以使用<>或like来代替=,用0r来代替or,不过也报错
因此,我们可以从后端逻辑出发,一般是:先检索数据。拿出username的键值来进行对比,如果错误,则报错,如果正确,则进行下一步,再拿password的键值与我们输入的password进行比较
不过放在数据库里用于比较的键值都是加密的,加密方式有mysql、mysql5、md5等,我们可以猜想它的工作的代码
1 | $data = 检索数据。 |
因此我们可以使用联合注入来操纵检索数据,一般数据列中的字段都是id,username,password,所以构造payload
1 | a' union select 1,admin,输入密码的md5值%23&pw=输入密码 |