版权声明:本教程为笔者原创,转载需征求笔者同意。
港真,这一篇也是在教你怎么赚钱的PoC指南,所以呢,如果你通过这篇文章赚钱了,请不要吝啬你的转发跟点赞。呀比!
学过了无框架的PoC编写跟基于Bugscan框架的编写,我们来学习基于Pocsuite框架的SQL注入PoC编写,接下来看代码2_2_2.py
中使用了 Python 标准库中的 urllib2 来发送 HTTP 请求,而在 Pocsuite 中,框架要求使用 Pocsuite 框架封装好的 req , 其实它就是 python 的 requests 库,具体的用法直接看 requests 帮助文档就好了。
为什么不让你在 PoC 中直接 import requests
呢?上面我已经说过了,哦,好像没说,我们在批量的时候,有一些站为了防机器人,需要看你有没有 HTTP 请求头的,比如有一些 WAF 会检测请求中是否有 User-Agent, 对,就是怕有些人忘记了,于是框架就处理了这些啊。再比如,你这个 PoC 中需要 Cookie ,你总不能在扫描的时候弹一个框让用户写 Cookie 吧,那你批量的时候不累死用户了。对,这些东西,框架都帮你解决了。
好了看代码:
代码 2_2_3.py
:
将上面的代码保存为 2_2_3.py
然后下载 Pocsuite 框架后,用 Pocsuite 框架执行我们的 PoC, 执行结果如图 2-5:
图 2-5
本想在注释里面解释一下的,写完发现代码实在是太乱了,于是我还是放下面解释吧。
我们先看一下代码整体结构:
最上面是引入一些类库,中部是一个 PoC 的类,继承自 PoCBase 类,类中有两个函数,_verify
和 _attack
,这两个分别是 verify 和 attack 模式的入口函数,然后还有一个用户自己定义的函数parse_result
, 用于统一输出。
下面是针对每个具体的部分的说明,其实在人家框架里面已经有详细说明了,我重复一下。
上面这些代码的意思是引入 pocsuite 的类库,当然你直接去按目录找肯定是找不到的,因为这个是老版本的 pocsuite 框架的目录结构,为了兼容老版本的就这么处理了。在加载的时候会自动将其替换成正确的路径。总结起来就一句话,人这么规定的你就这么写就对了。
这一部分代码,用于填写一些基础信息,PoC 多的情况下很有用的。根据漏洞实际情况填写就行了。
这里就是具体的 verify 的代码了。如果你看过 代码 2_2_2.py
,那么这段代码对你来说并不是问题,与代码 2_2_2.py
不同的是,这里使用了 req 来发送数据,还有一处不同的就是输出不再是 print 了,而是将我们要输出的信息保存在了一个叫 result 的字典里面,然后再调用 parse_result 将其输出。
这里是 attack 模式的入口,这个是带有攻击性质的验证模式,也就是说,在这个函数里面,你可以直接注出管理员密码出来。相对于 _verify
来说,这个就稍微复杂了那么一丢丢。我偷了个懒不想写了,就让它返回 verify 了。
这个函数,是我自己定义的一个函数,有些人有问题,到底能不能自己定义函数,答案就是 能!记住,_verify
和 _attack
是入口,也就是框架要调用这两个函数,程序执行进来了以后,你想怎么调用就怎么调用。
关于这里面的代码,就是调用了框架输出的实例 Output 了而已。
这是最后,也是比较容易忽视的地方,一定要注意在最后要调用 register 来注册你的 PoC 类,这样框架才知道你这个类是 PoC 类,就会去调用它。
总结
本小节中主要讲了 基于报错的 SQL 注入 PoC 编写,也就是针对有回显的 SQL 注入,我们 PoC 模拟了浏览器提交数据的这一过程,我们判断是否存在漏洞的依据就是看返回页面的内容是否有我们预期的值。
这里要注意的就是,我们判断的凭据不是说我提交了 abcde 到目标服务器,目标返回一个 abcde 就可以了,而是要证明我们的代码执行了,所以可以提交 ASCII 码到服务器,如果返回了对应的字符,就证明了可以执行。而为了减少误报,本着概率的角度,我们要使用稍微长的一个随机字符串(一定要注意随机,比如一个很长的单词 Christmas 就不行,这种有意义的字符串出现的概率有些大)。
有 md5 函数时,我们就可以在 payload 中执行 md5 函数,如果没有,就使用 char(xx)组合的形式。
2015/12/29 感谢 喵小姐指正
2016/01/11 新增 sqli-labs 推荐
点击“阅读原文”就可以跟Medici.Yan在评论区交流哦
本文始发于微信公众号(inn0team):PoC 编写指南(基于Pocsuite框架SQL注入PoC编写)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论