聊一聊SQLMAP在进行SQL注入时的整个流程

当许多小伙伴发现或判断注射时,他们大多数选择直接去sqlmap,结果往往不令人满意。因此,他们有想法写从执行到注射sqlmap的判断发生了什么。

本文将从我们所能看到的角度进行分析,看看sqlmap发送了什么有效载荷,以及这些有效载荷是如何产生的,而无需深入代码层。

测试环境:

sqlmap(1。3 .6 .58 # dev)BurPsuite http://ATtact。com?1.php?id=1@

测试方式

使用sqlmap的代理参数,我们将代理设置为8080端口,并使用burpsuite来抓取数据包。

sqlmap。py-u ‘ http://攻击。com?1.php?id=1′ -代理=’ http://127。0 .0 .1:8080 ‘

(经过长时间的测试,本地构建的环境似乎无法捕获包,因此我们找到了一个带有注入点的网站,该漏洞已报告给漏洞平台)

抓取到的包如下 :

聊一聊SQLMAP在进行SQL注入时的整个流程

sqlmap 的准备工作

我们还观察到sqlmap发送的默认用户代理是这样的。

因此,为了避免被记录在晶片或日志中,我们可以在后面添加一个随机代理参数。

首先,我们的sqlmap会不断发送大量数据包来检查目标网站是否稳定:

defcheckDynParam(地点、参数、值)3360 ‘ ‘ ‘此函数检查用户参数动态“如果是动态的,那么内容过滤器,或者是dynamics tymightdependennanotherparameter ‘ ”

我不明白这是什么。让我们看看源代码中说了什么。

根据输出语句的关键字搜索,我跟踪了这个checkDynParam函数。它的一般功能是修改我们现在已经获得的参数值,以查看页面在修改前后是否返回相同(有时会注入多个参数,然后一些不相关的参数在修改后保持不变)。如果有变化(或者这个参数是真实有效的),sqlmap将进入下一步。

下一个数据包和函数如下:

passwordsinbandquery=’ select USer,authentication _ StringFromMySQl。USer ‘ condition=’ USer ‘/盲查询=’ select DISTINCT(authentication _ string))来自从MySQl . USerwhere USer=’ % s ‘ LIMIT % d,1 ‘ COUNT=’选择COUNT(DISTINT(身份验证_字符串))来自mysql.user

解码:

这里有一个非常有趣的地方。我的sqlmap是1.3.6版。我不知道他以前是否从mysql.user获得过身份验证字符串值,但有趣的是,这个值仅高于mysql版。密码只会变成authentication_string,我们也可以从queries.xml中找到该语句,

发现默认值是authentication_string,所以我们直接在queries.xml中修改该语句,将查询列表更改为Password,然后再次测试。

后来的测试发现,sqlmap会在不修改的情况下用完密码,检查有效负载后,sqlmap首先检查authentication_string,然后检查密码:

聊一聊SQLMAP在进行SQL注入时的整个流程

检查源代码。然后我发现(SQL map/Plugins/GENERIC/USERS . py):

在这里,我用replace替换了两个列出的语句,其中有一个ifel语句。如果我* * *次都没找到,我会换掉它,这样我们的问题就解决了。SQLMAP仍然认为很好。

总结

sqlmap包含太多内容。找出里面有什么需要花很多时间。当然,收获是成比例的。清楚地理解sqlmap的过程原理将极大地改进我们的sql注入技术。

极牛网精选文章《聊一聊SQLMAP在进行SQL注入时的整个流程》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/5078.html

(43)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年7月4日 下午10:45
下一篇 2019年7月5日 上午10:29

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部