参数动态性检测:
直接抄一下别人的流程图:
其实很简单,简而言之
-
将请求参数值替换成一个随机的四位数,发包获取结果
-
结果与原始页面做相似度的对比
-
如果不相似,那么这个参数具有动态性(这个参数的变化导致了页面的变化)
代码:
实际的代码也是很少。(如果在理解了页面相似度这个概念的前提下)
在开始检测的sql注入的start()
函数有调用到checkDynParam
函数
经过这个检测参数动态性的函数之后,就可以看到熟悉的提示了。
1 | [23:16:00] [INFO] testing if GET parameter 'id' is dynamic |
1 | def checkDynParam(place, parameter, value): |
函数功能注释也解释了。
这个函数用于测试参数是否是动态的。如果它是动态的话,(替换成一个新的值之后)那么页面的内容会发生变化。
如果这个参数不是动态的,那么动态性可能要取决于别的参数。
inspire:
在实际的渗透测试时,用brupsuite抓包的时候,会有这种感觉。
不知道对哪个参数下手,不知道对哪个参数的值替换成payload进行测试。
如果随机测了某个,又不知道其他的参数会不会漏。
但是如果了解了 参数动态性 这个概念之后,实际上这个问题可以转化为
这个数据包里面的哪些参数是动态的,也就是我修改了这个参数之后,服务端会拿对这个变化的参数进行处理,以致于页面(返回包)会发送变化。
那么很大可能性是 我这个参数影响到了某个sql语句的查询或者执行了。
那么这个参数就很有可能存在注入。
总结一下,一个参数存在注入的前提是 这个参数具有动态性。
那么是不是可以编写一个brupsuite插件或者一个小工具,对数据包的参数批量的先检测它是否具有动态性,毕竟这个是注入的前提之一。
refs:
根据这篇文章提出的关键概念点,可以比较好的作为了解sqlmap的路径。