前言
我么已经知道了SQL注入的原理:http://t.csdn.cn/xNq65
我们已经知道了POC/EXP:http://t.csdn.cn/Lpx09
手工测很累,我们可以写POC/EXP。更进一步,提高POC/EXP的质量,并在程序中加入多线程。等我们厉害了,加入绕过等的功能。当我们的代码水平提高等一定程度,我们就会考虑软件工程、封装、复用等一系列因素。实现了这些,那么sqlmap就诞生了
提示:以下是本篇文章正文内容,下面案例可供参考
一、sqlmap 基础
sqlmap使用python编写,目前py2和py3都支持。为了在使用工具的时候心里有个底,清楚地知道当前正在做什么,有必要理解工具原理。
这种自动化工具都可以看作POC/EXP
框架,我们可以自己实现一个。当我们传入一个url,sqlmap也是添加已有的payload,然后发送,根据特征匹配回包,进而判断是否存在SQL注入。
二、目录结构
从GitHub上把项目clone下来:git clone https://github.com/sqlmapproject/sqlmap.git
或者直接在kali的usr/share/sqlmap
目录下
data目录
以前的几个目录归档到了data
目录,主要的几个目录如下:
data:
- procs:包含了mssqlserver、 mysql、oracle和postgresql的触发程序,存放了一些SQL语句,主要涉及DNS带外传输数据的一些数据库命令
- shell:注入成功时使用的4种shell,经过加密
- txt:包含了一些字典
- udf:UDF提权用的dll文件,包含自定义的攻击载荷(
payload
) - xml:数据库注入的检测载荷、旗标信息及其他信息
extra
包含了sqlmap的各种额外功能,包括但不限于发出声响的(beep.py), 代码加密(cloak.py -i bmfx.php -o bmfxtech.php) ,二进制转换(./dbgtool.py -i ./nc.exe -o nc.scr) ,运行cmd,安全执行,shellcode等等
- beep:警报声音文件夹
- cloak:生成、解密文件等操作
- dbgtool:执行转换的文件夹
- icmpsh:win32的反向icmpshell
- shellcodeexec:包含Linux/Win 平台下的shellcode
- vulnserver:简易的漏洞服务,用于fuzz测试
lib
包含了sqlmap的多种连接库,例如:sqlmap的5中SQL注入类型请求的参数,提权操作等
- controller:
- action.py 利用URL受到影响的参数进行SQL注入,并且在条件许可下抽取系统或者数据库中的数据。
- checks.py 利用载荷对发现的sql注入点进行注入检测。
- controller.py 对用户传递的参数进行控制。
- handler.py 对用户传递的数据库名称进行处理
- core:核心文件,有各种参数的调用文件。例如设置目标 会调用 target.py。还有agent.py,dump.py,threads.py等
- parse 该参数文件夹有banner.py cmdline.py sitemap.py configfile.py payloads.py handler.py html.py headers.py 等一系列配置处理参数调用文件
- request 该请求文件夹有basic.py templates.py basicauthhandler.py redirecthandler.py comparison.py rangehandler.py connect.py pkihandler.py direct.py methodrequest.py dns.py inject.py httpshandler.py 等一系列网络请求连接文件
- takeover 这个是接管文件夹,文件夹里面有abstraction.py xp_cmdshell.py icmpsh.py web.py metasploit.py udf.py registry.py 注入成功后接管受害者机器的shell.
- techniques 这个是注入分类文件夹有blind,dns,error,union,brute 等物类注入类型,其中每个文件夹有相应的注入类型执行文件。
- utils 这是小功能文件夹。该文件中含有 api.py xrange.pycrawler.py versioncheck.py deps.py timeout.py getch.py hash.py sqlalchemy.py hashdb.py search.py htmlentities.py purge.py pivotdumptable.py progress.py 等多种功能的调用文件。
plugins
插件库,例如:在使用sqlmap连接数据库的时候需要用到其中的一些不同数据库的python连接类,以及各种数据库的信息和数据库通用事项等
- dbms:包含各种数据库枚举,连接和接管等相关说明,sqlmap支持Access,DB2,FireBird,HSQLDB,MaxDB,MSSQLServer,MySQL,Oracle,PostgreSQL,SQLite和Sybase数据库等等,每个数据库文件都有固定的文件,例如,MySQL文件夹中含有connector.py, enumeration.py, filesystem.py, fingerprint.py, syntax.py, takeover.py
- generic:这是个通用文件夹,里面包含 connector.py, custom.py, databases.py, entries.py, enumeratioin.py, filesystem.py, fingerprint.py, misc.py, search.py, syntax.py, takeover.py, users.py
tamper
目前(1.7.2.22#dev
版本)包含了个60多个绕过脚本,例如:编码绕过,注释绕过等等,还有很多
thirdparty
包含了一些第三方的插件,例如:优化,保持连接,颜色等等
文件夹中的主要文件
- ansistrm:ansistrm.py,定义了结果输出终端的颜色显示
- beautifulsoup: beautifulsoup.py,将XML转换为树状表示法,用以爬取目标站点,参数为
--crawl
- bottle:是python一个轻量WSGI未Web框架,bottle.py,构建静态/动态HTTP请求的关键所在
- chardet:有众多字符探针和字符定义文件,主要作用是探测web页面的页面编码。
- clientform:主要文件是clientform.py,它对Web客户端进行HTML表格处理。
- colorama:主要功能是为了将ansi转化为win32编码。
- fcrypt:为标准的Linux加密提供端口,或者说是修复缺失加密功能的Python版本,用于破解通用密码哈希值,参数为
--passwords
- gprof2dot:主要提供了从几个解析器的输出中产生一个dot 图形,
- keepalive:keepalive.py,它的urllib2对HTTP处理程序支持HTTP1.1和存活,keepalive用于持久的HTTP(s)请求,参数为
--keep-alive
和-o
- magic;该文件夹主要里面的文件是magic.py,magic 是一个libmagic文件识别库的包装器,用于识别和显示日志消息中的文件类型,参数为
--file-write
- multipart:该文件夹里面的文件是multipartpost.py,进行多线程发送数据包。
- odict:该文件夹里面的文件是odict.py,为有序字典对象,保存插入顺序的密钥。
- oset:Python ABC类的部分补丁,pyoset.py为主要程序,_abc.py为辅助类的ABC类说明,oset用于对所提供的排序目标进行排序,参数
-l
,-m
和-g
- prettyprint 该文件夹里面主要的文件是prettyprint.py,该脚本优化终端结果输出显示,用于生成xml输出,参数为
--xml
- pydes Python中3DES加密解密算法,其中里面有加密解密算法说明,用于破解Oracle旧密码格式,参数为 --passwords
- socks:Python中的sock模块
- termcolor:该文件夹里面文件是termcolor.py,它实现了终端输出的颜色格式化。
- wininetpton:网络地址
- xdot:dot格式的可视化图形,用于内部测试