2.3 sqlmap目录及结构
Tips:此篇文章主要参考了《sqlmap从入门到精通》这本书中的相关具体细节,由于这本书作者完成的时间大概在2017年作用,所以我根据书中提到的信息再根据目前最新版的sqlmap目录结构进行了优化。
2.3.1 sqlmap文件目录及主文件
1.sqlmap目录结构
2.sqlmap主文件解读
(1) .gitattributes git的属性文件,例如:是什么编程语言,具体的文件类型等等
(2) .gitignore git需要忽略的文件,一般按照理解,把一些没有必要传上去的文件排除在外,不用上传至git仓库中
(3) .travis.yml 标记Python版本和设置sqlmap的脚本
(4) .pylintrc Python代码分析工具,用于分析Python代码中的错误和不符合代码风格标准的问题代码
(5) LICENSE 授权许可文件
(6) COMMITMENT 相关承诺 GPL Cooperation Commitment
(7) README.md 相关的说明文件,简单的指导怎么使用安装sqlmap,还针对各种语言版本进行介绍
(8) sqlmap.conf sqlmap调用的配置文件,比如一些默认的参数,或者是想要提前配置一些默认的参数进行批量自动化扫描探测
(9) sqlmap.py sqlmap的主程序,是执行启动sqlmap的程序,执行期间可以调用各种参数进行测试,可以理解为一个可执行文件,到目前位置sqlmap是可以直接支持python2和python3 所以一般的执行操作是python sqlmap.py -u url 就可以开启对目标进行SQL注入测试
(10) sqlmapapi.py sqlmap的API文件,可以将sqlmap集成到其他各种平台,比如常用的是在Burpsuite的插件调用sqlmapapi.py接口,进行自动化扫描测试
(11) sqlmap.pyc sqlmap在python下生成的pyc字节码文件,这个可以简单的理解为是编译好的程序文件,可以使用uncompyle2进行反编译,命令如下:
uncompyle2 -o sqlmap.py sqlmap.pyc 也可以使用uncompyle6 https://github.com/rocky/python-uncompyle6 https://github.com/zrax/pycdc
2.3.2 sqlmap文件目录解读
(1) .github git的代码管理仓库,基本上每个github仓库都会有这个文件夹,记录了文件上传更改等版本信息
(2) doc 从字面上的意思就知道这是个文档说明,里面放的是sqlmap文档信息,文件夹里面包含sqlmap的简单使用手册,含有每个国家语言的简要说明文档,有作者信息,更改历史记录信息,致谢信息,第三方插件致谢信息
(3) extra 包含了sqlmap的各种额外功能,包括但不限于发出声响的(beep.py), 代码加密(cloak.py -i bmfx.php -o bmfxtech.php) ,二进制转换(./dbgtool.py -i ./nc.exe -o nc.scr) ,运行cmd,安全执行,shellcode等等
(4) lib 这里包含了sqlmap的多种连接库,例如:sqlmap的5中SQL注入类型请求的参数,提权操作等
(5) plugins 插件库,例如:在使用sqlmap连接数据库的时候需要用到其中的一些不同数据库的python连接类,以及各种数据库的信息和数据库通用事项等
(6) tamper 这里包含了57个绕过脚本,例如:编码绕过,注释绕过等等,还有很多
(7) thirdparty 这里包含了一些第三方的插件,例如:优化,保持连接,颜色等等
(8) data 这个目前在老版本的sqlmap中是没有的,在目前最新版本的1.4.5.28中存在 ,其实也没有变什么就是把原来的部分文件夹移动到了这个data文件夹里面,目前data文件夹里面有如下文件夹:
html, procs, shell, txt, udf, xml
html 里面有个index.html文件,打开是关于sqlmap的各种选项
procs 包含了mssqlserver、 mysql、oracle和postgresql的触发程序,存放了一些SQL语句,主要涉及DNS带外传输数据的一些数据库命令
shell 注入成功时使用的4中shell,这些shell是经过加密的
txt 包含一些字典,例如:用户浏览器代理,表,列,和关键字等
udf UDF提权用的dll或者so文件,包含了用户自己自定义的攻击Payload
xml 包含了多种数据库的注入检测载荷、旗标信息以及其他信息
2.3.3 子目录解读
1.sqlmap/doc目录
(1) translations 翻译文件夹,包含下载,安装和使用sqlmap的简要说明文档,该文件包含17种语言版本,中文版本也在里面
(2) AUTHORS 作者信息,介绍了sqlmap的程序编写者及其邮箱,发现sqlmap的相关问题可以直接发送邮件给作者
(3) CHANGELOG.md 更新日志,介绍了sqlmap更新了哪些功能,Bug修复及相关特性
(4) THANKS.md 感谢文档,介绍对sqlmap有贡献的作者
(5) THIRD-PARTY.md 第三方插件,介绍集成在sqlmap的第三方插件的概要说明
2.sqlmap/extra目录
(1) beep 警报声音文件夹
beep.py 执行后会发出警报声音,参数为--beep,当发现SQL注入的时候,发出警报声
beep.wav 警报声音的文件
(2) cloak 利用cloak.py可以生成和解密后门等操作
(3) dbgtool 执行转换的文件夹
dbgtool.py 可以将ASCII文本转化为便携式的exe文件,生成的nc.exe 可以安装到Windows上,进行后门监听,python ./dbgtool.py -i ./nc.exe -o nc.scr
(4) icmpsh 一个win32的反向icmpshell,在注入成功之后反弹回来的一种shell
(5) runcmd 注入成功后,反弹回来cmd命令的辅助工具
(6) shellcodeexec 被安装在受害者机器上的shellcode,这些不是在自己的机器上运行,是要在目标机器上运行,含有Windows和Linux的32和64位的文件
(7) shutils 文件操作工具,python文件操作,实现查找第三方插件等相关功能
(8) vulnserver 简易的漏洞服务,用于fuzz测试
推荐:https://peonycsa.com/sqlmap-codeanlysis/
3.sqlmap/lib目录
(1) controller
action.py 利用URL受到影响的参数进行SQL注入,并且在条件许可下抽取系统或者数据库中的数据。
checks.py 利用载荷对发现的sql注入点进行注入检测。
controller.py 对用户传递的参数进行控制。
handler.py 对用户传递的数据库名称进行处理
(2) core 这是核心文件夹有各种参数的调用文件,例如设置目标 会调用 target.py。还有agent.py,dump.py,threads.py等等
(3) parse 该参数文件夹有banner.py cmdline.py sitemap.py configfile.py payloads.py handler.py html.py headers.py 等一系列配置处理参数调用文件
(4) 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 等一系列网络请求连接文件
(5) takeover 这个是接管文件夹,文件夹里面有abstraction.py xp_cmdshell.py icmpsh.py web.py metasploit.py udf.py registry.py 注入成功后接管受害者机器的shell.
(6) techniques 这个是注入分类文件夹有blind,dns,error,union,brute 等物类注入类型,其中每个文件夹有相应的注入类型执行文件。
(7) 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 等多种功能的调用文件。
4.sqlmap/plugins目录
(1) 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
(2) 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
5.sqlmap/tamper目录
这个木是用来注入绕过各种防火墙的脚本文件目录,里面含有57个用来绕过防火墙的脚本文件,具体如下:
apostrophemask.py apostrophenullencode.py appendnullbyte.py base64encode.py between.py bluecoat.py chardoubleencode.py charencode.py charunicodeencode.py commalesslimit.py commalessmid.py concat2concatws.py equaltolike.py escapequotes.py greatest.py halfversionedmorekeywordsifnull2ifisnull.py informationschemacomment.lowercase.py modsecurityversioned.py modsecurityzeroversioned.multiplespaces.py nonrecursivereplacement.poverlongutf8.py percentage.py randomcase.py randomcomments.py securesphere.py sp_password.py space2comment.py space2dash.py space2hash.py space2morehash.py space2mssqlblank.py space2mssqlhash.py space2mysqlblank.py space2mysqldash.py space2plus.py space2randomblank.py symboliclogical.py unionalltounion.py unmagicquotes.py uppercase.py varnish.py versionedkeywords.py versionedmorekeywords.py xforwardedfor.py
打开每个脚本,可以看到这些脚本的适用条件和环境,可以参考以下文章:
参考:http://blog.csdn.net/qq_29277155/article/details/51193071
6.sqlmap/thirdparty目录
这个是sqlmap的第三方插件,实现各种优化格式的小功能。
(1) ansistrm 该文件夹中主要文件是ansistrm.py,它定义了结果输出终端的颜色显示。
(2) beautifulsoup #该文件夹中主要文件是beautifulsoup.py,它把XML等转化为树状表示法,用于爬取目标站点,参数为--crawl。
(3) bottle 是Python的一个快速,简单和轻巧的WSGI微Web框架。它作为单个文件模块,不依赖其他Python标准库。主要文件是bottle.py,它是构建静态和动态HTTP请求的关键所在,虽然支持Python3,但是由于sqlmap整体是采用python2开发的,所以这里会进行一个兼容性检查。
(4) chardet 该文件夹中有众多字符探针和字符定义文件,主要作用是探测web页面的页面编码。
(5) clientform 该文件夹主要文件是clientform.py,它对Web客户端进行HTML表格处理。
(6) colorama 该文件夹里面的文件其主要功能是为了将ansi转化为win32编码。
(7) fcrypt 该文件夹主要为标准的Linux加密提供端口,或者说是修复缺失加密功能的Python版本,用于破解通用密码哈希值,参数为--passwords
(8) gprof2dot #该文件夹里面的文件主要提供了从几个解析器的输出中产生一个dot 图形,
(9) keepalive #该文件夹里面的文件是keepalive.py,它的urllib2对HTTP处理程序支持HTTP1.1和存活,keepalive用于持久的HTTP(s)请求,参数为--keep-alive和-o
(10) magic #该文件夹主要里面的文件是magic.py,magic 是一个libmagic文件识别库的包装器,用于识别和显示日志消息中的文件类型,参数为--file-write
(11) multipart 该文件夹里面的文件是multipartpost.py,进行多线程发送数据包。
(12) odict 该文件夹里面的文件是odict.py,为有序字典对象,保存插入顺序的密钥。
(13) oset Python ABC类的部分补丁,pyoset.py为主要程序,_abc.py为辅助类的ABC类说明,oset用于对所提供的排序目标进行排序,参数-l,-m和-g
(14) prettyprint 该文件夹里面主要的文件是prettyprint.py,该脚本优化终端结果输出显示,用于生成xml输出,参数为 --xml
(15) pydes Python中3DES加密解密算法,其中里面有加密解密算法说明,用于破解Oracle旧密码格式,参数为 --passwords
(16) socks Python中的sock模块
(17) termcolor 该文件夹里面文件是termcolor.py,它实现了终端输出的颜色格式化。
(18) wininetpton 网络地址
(19) xdot dot格式的可视化图形,用于内部测试
(20) six 这里是空文件夹(init.py 都不算在内)
7.sqlmap/data目录
新版的sqlmap新建了一个目录为data,将部分文件夹组件移动到此目录下面
(1) html 该文件夹里面含有一个index.html文件,打开发现是关于sqlmap的Option配置的页面,但是功能不多,也发点击其他功能选项,待实际使用中挖掘
(2) procs 该文件夹下面存放的是关于存储进程访问的文件,具体有4中数据库类型,如下:
mssqlserver 访问MSSQLServer处理的进程,方便对数据进行访问
mysql 访问MySQL处理的进程,方便对数据进行访问
oracle 访问Oracle处理的进程,方便对数据进行访问
postgresql 访问Postgresql处理的进程,方便对数据进行访问
(3) shell 该文件夹下有两个文件夹分别是backdoors和stagers,具体如下:
backdoors 后门文件backdoor.asp_ , backdooraspx , backdoor.jsp , backdoor.php_ , 代码经过加密cloak.py可以对输入文件进行加密,例如:cloak.py -i backdoor.php -o backdoor2.php ,backdoor.php为明文PHP代码文件,经过cloak.py 转换后,backdoor2.php 为乱码文件
stagers 包含stager.asp , stager.aspx , stager.jsp 和stager.php文件
(4) txt 该文件夹里面存放的都是字典文件,其中会包含关键词,公共列表和其他字典 ,具体含有如下字典文件:
common-columns.txt 数据库中的共同列
common-files.txt 数据库中的共同文件路径
common-outputs.txt 数据库中的共同输出。
common-tables.txt #数据库中的共同表。
keywords.txt 数据库中的共同关键词。
smalldict.txt 数据库中的字典。
user-agents.txt 进行请求时的浏览器代理头。
wordlist.tx_ 字典压缩文件,这里从官方下载下来就是这样的,如果自己要看,需要自己将后缀改成zip格式查看
(5) udf 该文件夹里面主要存放的是提权工具,具体如下:
mysql 包括Linux和Windows的lib_mysqludfsys.dll 32和64位都有
postgresql 包括Linux和Windows的lib_mysqludfsys.dll 32和64位都有
(6) xml 该文件夹里面主要是做信息记录的,里面含有如下文件:
banner 各种数据及其相关数据的标志XML记录,例如:cookie.xml , generic.xml , mssql.xml , mysql.xml , oracle.xml , postgresql.xml , servlet.xml , sharepoint.xml , x-aspnet-version.xml , x-powered-by.xml
payloads 布尔,错误,内联查询,堆叠查询,延时盲注和联合查询6种注入类型的攻击注入检测载荷
boundaries.xml 边界记录文件
errors.xml 错误显示的XML文件
queries.xml 查询记录的XML文件