接黑活网站:sqlmap 内核剖析 I: 基础流

访客4年前关于黑客接单1287

一向在想准备一系列 sqlmap 的文章,忧虑会不会由于太老太旧了被我们吐槽,左思右想也查了一些现有的材料,仍是准备出一部分关于 sqlmap 要害技术细节的评论。一起也在对其间心的评论中,提炼出一些思维与 *** 。

我信任在阅览本文的读者中,很大一部分人都是从前测验阅览过 sqlmap 源码的同学。可是在实践阅览的时分,我们发现我们总是存在各式各样奇葩的困难与困惑当我们输入whoami指令时分,系统会问询我们是否回来指令的输出。我们这儿挑选"a",代表总是回来指令的输出。可以看到这儿可以获取到权限与我们作业mysql服务器用户权限一起。也便是说我们这儿获取root权限悉数,比方查看/etc/passwd,nc反弹shell、添加用户等。ifconfig信息:。

“SqlMap 源码为什么会有大几百行一千行的 *** 啊”“它里边 conf 和 kb 又是啥?这两个大局变量里边终究存了啥?”“为什么我直接把 sqlmap 的 xml 取出来,仍是并不是特别便利运用他们的 payload”

我信任这些疑问我们必定之一次在阅览这个项目的事,都会遇到。实践上,并不是由于 sqlmap 项目的水平高导致我们看不懂。而是由于项目担负了太多的前史包袱,导致在挨近十年的发展中,开发者与后期保护者并没有对这款东西进行重构与大规划重写,反而是持续运用 python2 对其缝缝补补。

在本系列文章中,我们首要针对 sqlmap 的最中心的方方面面进行剖析,本文首要针对基础流程进行介绍与描述,本文由十分详尽的 sqlmap 源码解读,期望有需求的读者可以从中获益。

 

0x00 准备作业

想要阅览 sqlmap 源码我信任我们的挑选必定更多的是从 github 下直接 clone 代码到本地,直接运用本地编辑器或许 IDE 翻开直接来剖析。所以根本操作也便是

git clone https://github.com/sqlmapproject/sqlmapcd sqlmap
进入 sqlmap 的 repos 下,直接翻开编辑器吧!

当然许多读者是 Python3 用户,其实也没有必要费很大力气在本机上装置 Python2 然后再进行操作。笔者运用的环境是

Mac OS X Pyenv VSCode

引荐运用 Pyenv(+virtualenv) 构建 Python 环境工作 sqlmap。

 

0x01 初始化与底层修建

笔者当然可以直接指出一切的重要逻辑在什么方位,可是这样并不好。这样做的效果便是我们宣布古怪的疑问:

它里边 conf 和 kb 又是啥?这两个大局变量里边终究存了啥?

逐渐了解整个项目的构建和项目中贯穿大局的两个古怪的大局变量,关于加快了解 sqlmap 的中心逻辑起了很大的效果。在笔者的作业和实践中,确实是很有感受。

所以我们仍是从头看起吧!

我们在上图中,可以找到很明显的程序命令行进口,我们暂时只剖析命令行进口所以,我把无关的东西悉数打了马赛克,所以接下来我们看到 main 函数直接来了解

我信任我们看到了上图应该就知道我们首要应该看 try 中的内容。实践上 except 中指的是 sqlmap 中各式各样反常处理,包括让程序退出而开释的反常/用户反常以及各种预期或非预期反常,在 finally 中,大致进行了数据库(HashDB)的查看/康复/开释以及 dumper 的收尾操作和多线程的资源收回操作。具体的不重要的代码我们就不持续介绍了,接下来直接来了解比较重要的部分吧。

在实践在作业部分中,我们发现了 1-4 函数对环境和基础配备进行了一起操作,然后在 5 进程的时分进行进程初始化,然后开端发动 sqlmap。实践上这些操作并不是一无可取,接下来有详有略介绍这些进程终究发生了什么。

在 DirtyPatches 中,首要设定了 httplib 的更大行长度(httplib._MAXLINE),接下来导入第三方的 windows 下的 ip地址转化函数模块(win_inet_pton),然后对编码进行了一些替换,把 cp65001 替换为 utf8 防止呈现一些交互上的过错,这些操作关于 sqlmap 的实践功用影响并不是特别大,归于保证起用户体会和系统设置的正常选项,不需求进行过多关怀。

在环境查看中,做了如下操作:查看模块途径,查看 Python 版别,导入大局变量。我们或许并不需求关怀太多这一步,只需求记住在这一步我们导入了几个要害的大局变量:("cmdLineOptions", "conf", "kb"),需求提示我们的是,直接去 lib.core.data 中寻觅这几个变量并不是正确的挑选,由于他们并不是在这里初始化的(说白了便是找到了界说也没有用,只需求知道有他们几个就够啦)。

初始化各种资源文件途径。

打印 Banner。

这一部分可以说是十分要害了,尽管表面上依然是归于初始化的阶段,可是实践上,假如不知晓这一步,面临后边的直接对大局变量 kb 和 conf 的操作将会变的十分古怪和生疏。在这步中,我们进行了配备文件初始化,知识库(KnowledgeBase初始化)以及用户操作的 Merge 和初始化。我们在之后的剖析中假如遇到了针对 kb 和 conf 的操作,可以直接在这个函数对应的 lib.core.option 模块中寻觅对应的初始化变量的界说。当然,这一步触及到的一些 kb/conf 的 fields 也或许来源于 lib.parse.cmdline 中,可以直接经过 ctrl+F 搜索到

中首要包括一切初始变量的初始值,这些初始值在 init() 的设定首要是引证各式各样的函数来结束基础设置,我们没有必要顺次对其进行分支,只需求用到的时分知道回来寻觅就可以了。

冒烟测验,测验程序自身是否可以跑得通。

功用测验,测验 sqlmap 功用是否完好。

进入上一段代码的条件是 if not conf.updateAll,这个是来源于 lib.parse.cmdline 中界说的更新选项,假如这个选项翻开,sqlmap 会自动更新并且不会实行后续测验进程和实践作业的进程。

在实践的发动代码中,笔者在上图中标示了两处,我们在运用命令行的时分,更多的是直接调用 start() 函数,所以我们直接跟入其间寻觅之后需求研讨的部分。

 

0x02 测验前的方针准备

当我们找到 start() 函数的时分,映入眼帘的实践上是一个很平整的流程,我们简化一下,以下图代码为例:

我们依然看到了 conf 中一些很古怪的选项,针对这些选项我们在 0x01 节中强调过,可以在某一些当地找到这些选项的头绪,我们以 conf.direct 为例,可以在 lib.parse.cmdline 中清晰找到这个选项的阐明:

依据阐明,这是直连数据库的选项,所以我们或许暂时并不需求关怀他,我们暂时只重视 sqlmap 是怎么检测缝隙的,而不关怀他是怎么样调用数据库相关操作的。

接下来稍有一些主意的读者当然知道,我们直接进行第四部分针对这个方针循环的剖析是最简略有用的 *** 了!

好的,接下来我们就翻开最中心的检测 *** :

进入循环体之后,首要进行查看 *** 是否通断的选项,这个选项很简略了解我们就不多叙说了;保证 *** 正常之后,开端设置 conf.url,conf.method,conf.data,conf.cookie 和 headers 等字段,并且在 parseTargetUrl() 中进行各种合理性查看;之后会依据 HTTP 的 Method 提取需求查看的参数;随后假如当时发动时参数接受了多个方针的话,会在第4步中做一些初始化的作业。

在结束上述操作之后,实行 setupTargetEnv() 这个函数也是一个十分重要的函数,其包括如下操作:

def setupTargetEnv():    _createTargetDirs()    _setRequestParams()     _setHashDB()    _resumeHashDBValues()    _setResultsFile()    _setAuthCred()
其间除了 setRequestParams() 都是关于自身存储(缓存)扫描上下文和效果文件的。当然我们最重视的点必定是setRequestParams() 这个点。在深化了解这一个进程之后,我们发现其间首要触及到如下操作:

所以我们回归之前的 start()  *** 中的 foreach targets 的循环体中,在 setupTargetEnv() 之后,我们现在现已知道了关于这个方针的一切的可以测验注入测验的点都现已设置好了,并且都存在了 conf.paramDict 这个字典中了。

至此,在正式开端检测之前,我们现已知道,conf.url, conf.method, conf.headers ... 之类的包括基础的测验的方针的信息,在 conf.paramDict 中包括具体的不同方位的需求测验的参数的字典,可以便利随时烘托 Payload。关于其具体的行为,其实大可不必过分关怀,由于我们其实并不需求具体的处理细节,这些细节应该是在我们遇到问题,或许遇到唔清楚的当地再跳出来在这些进程中寻觅,并且进行研讨。

 

0x03 万事俱备

可以说在读者了解上面两节叙述的内容的时分,我们就可以正式探查实在的 SQL 注入检测时分 sqlmap 都坐上了什么。其实简略来说,需求经过下面进程:

笔者经过对 controller.py 中的 start() 函数进行剖析,得出了上面的流程图。在整个检测进程中,我们暂时不触及细节;整个流程都是针对查看一个方针所要阅历的进程。

checkWaf

在 checkWaf() 中,文档写明:Reference: http://seclists.org/nmap-dev

运用nbtstat -n指令查看本机的 NetBIOS 称谓。

/2011/q2/att-1005/http-waf-detect.nse,我们可以在这里发现他的原理出处,有爱好的读者可以自行研讨。在实践完成的进程中代码如下:

笔者在要害部分现已把标示和箭头写明,便利我们了解。我们发现 payload 这个变量是经过随机一个数字 + space + 一个特制 Payload(触及到许多的关于灵敏关键词,可以很简略触发 WAF 阻拦)。

随即,sqlmap 会把 payload 刺进该刺进的方位:关于 GET 类的恳求,sqlmap 会在之前的 query 句子后边参加一个新的参数,这个参数名经过 randomStr() 生成,参数的值便是经过处理的 Payload。假如有读者不了解,我们在这里可以举一个比方:

假如我们针对

http://this.is.a.victim.com/article.php?id=1
这样的 URL 进行 Waf 的查看,sqlmap 会建议一个
http://this.is.a.victim.com/article.php?id=1&mbjwe=2472%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E%27%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--/%2A%2A/%3B%20EXEC%20xp_cmdshell%28%27cat%20../../../etc/passwd%27%29%23
的新的恳求,这个恳求会有很大概率触发 Waf 的反响,然后 sqlmap 经过判别回来页面和之前页面的 Page Ratio 来判别是否触发了 WAF。我们好像遇到一些问题

有心的读者或许发现,我们在上末节呈现了一个奇特生疏的词 Page Ratio, 这个词其实在整个 sqlmap 中是十分重要的存在,我们之后会在后续的文章中具体介绍这部分理论。

 

0x04 然后呢

其实我们当然可以持续解说每一个函数都做了什么,可是限于篇幅问题,我们或许要先暂停一下了;与此一起,我们本文的内容“基础流程”实践上现已介绍完了,并且引出了我们需求鄙人一篇文章介绍的概念之一“Page Ratio”。

所以接下来我们或许要结束本文了,可是我更期望的是,每一个读者都可以测验自己剖析,自己去吃透 sqlmap 的细节。

 

0x05 结束语

感谢读者的耐性,在接下来的文章中,笔者将会愈加深化介绍 sqlmap 最中心的算法和细节处理。

作者:@v1ll4n(安全研发工程师,现就职于长亭科技 )

接黑活网站:sqlmap 内核剖析 I: 基础流

调用的参数,如下所示:Solaris08: fffff80740dd5500 nt!KiDoubleFaultAbortShadow Stack = 0xFFFFF8074328A3E0调试判别 Cred 结构体大小sqlmap 内核分析 I: 基础流

接黑活网站https://github.com/3gstudent/Homework-of-C-Language/blob/master/FileTimeControl_WinAPI.cppfixedBitLocker Windows 7

[1][2][3]黑客接单网

“config.js”配备文件中指明引导模块“cloudcompute.api”,首要担任解析将“/bin/i386/ccmain.bin”模块注入到系统进程。注入 *** 也比较经典,挂起创建系统进程,映射模块内存到傀儡进程,刺进APC指向模块OEP结束注入。比较有特征的是“自动复生”机制,在结束注入往后注册回调函数监控傀儡进程句柄,一旦进程结束会再次触发注入进程,并且这个进程是递归的。该注入流程作为通用模板在后续代码中也会多次用到,细节进程如下:问:这些机器人安置在哪里?

SUID(设置用户ID)是颁发文件的一种权限,它会呈现在文件具有者权限的实施位上,具有这类权限的文件会在其实施时,使调用者暂时获得该文件具有者的权限。那末,为何要给Linux二进制文件设置这类权限呢?实在原因原由有许多,比方,法度ping必要root权限才华关上收集套接字,但实施该法度的用户平日都是由粗浅用户,来验证与其他主机的连通性。接黑活网站

合理许多恶意程序运用一些资源在杀毒软件和人的眼睛之前躲藏自己时,我们需求知道的是其图标并不是实在显现在屏幕上的图标,除了模仿Adobe的图标,他们都有一个一起点,它们都是我们所称的“真单色图标”(True Monochrome Iron),简称TMI。docker run -d -p 172.16.10.74:8080:8080 --name=jira cptactionhank/atlassian-jira:latest影响规划

2. swift文件夹,包括侵犯银行的操作系统; char * result = p_myfunAdd(str); SHA-1磕碰会被用到一些野生侵犯中吗?sqlmap 内核分析 I: 基础流

接黑活网站NameNode 默许端口 50070已然我们现已准备好了相应的文件,那么我们就可以运用dnx.exe来实行我们在“ConsoleApp”文件夹中存放的C#代码了。需求留心的是,这台设备现已启用了Device Guard。作业效果如下图所示:案例二:中国移动和包任意消费缝隙

首要来看看ExtraBacon的帮忙菜单:sys_call_table[__NR_open] = (unsigned long*)fake_open;

[1][2]黑客接单网

昨日,谷歌推出了新的安全 *** 来保护Android系统的 Linux 内核免受恶意侵犯和其他挟制。接黑活网站

RtlFreeHeap(0x230000L , 0x0L , 0x24c8570L) = 0x1echo aGet.Write(Post.responseBody) >>download.vbs sqlmap 内核分析 I: 基础流

36.96.0.0 36.127.255.255 2097152

查看shadow文件,发现root用户默许暗码p9zxxx。

重要的是你需求得到授权:无记名令牌。这是一个32个字符的字母数据字符串。

然后在运用的时分进行调用

相关文献链接:


本文标题:接黑活网站:sqlmap 内核剖析 I: 基础流

相关文章

31省新增48例境外输入病例怎么回事 30日哪些省出现了境外输入病例

3月30日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例48例,均为境外输入病例;境外输入现有确诊病例667例(含重症病例18例),现有疑似病例180例。累计确诊病例771例...

有什么软件能找取别人的微信密码

现在随着我国互联网技术的蓬勃发展,移动支付手段也得到了普及。现在的我们已经在无现金化的社潮当中成为了代表国家,走在了各路国家的前列。其中支付宝和微信这两款代表性的社交APP,更是给我们的生活带来了巨大...

查询他人陌陌信息

老母亲也终于享受到了久违一年的整觉,简直不能更嘚瑟。(内心独白:以后终于可以脱离皮皮陈出去浪到不回家,可以买各种小仙女的内衣,可以买各种美丽的连衣裙,but,一年的时间瞬间变得很短暂,哺乳生涯就这么草...

黑客接单网可信吗,黑客接单联系方式,丢狗找黑客被骗

1 /usr/bin/ruby1.8 500 manual mode[BCTF 2019 has started. Check in flag: OPGS{jr1p0zr-g0-O...

怎么设计自己的签名(如何看懂架子鼓鼓谱方法

怎么设计自己的签名(如何看懂架子鼓鼓谱方法教学)爵士鼓记谱方法相对其它有固定音高的记谱都要简单的多。它只是通过不同的符号标记对应的鼓或者镲等组件,并采用不同的线间位置记录多个不同鼓和镲的鼓谱记录方式。...

教你在线查开的房记录查询(怎么查开酒店记录查询)

教你在线查开的房记录查询(怎么查开酒店记录查询)这个在警察局里的网上都能查到的,如果有关系的话就很容易,不然就难了求采纳 在宾馆开的钟点房登记记录多久可以自行删除? 这是一个很多朋友都很关心的问题,不...