SQLMAP 1.0 源码分析

本文详细分析了SQLMAP 1.0的源码,涵盖环境配置、注入流程、WAF检测、URL稳定性判断、参数动态性检查、真正的注入点检测和利用等方面。通过深入研究,揭示了SQLMAP如何通过检测URL稳定性、动态参数和WAF来确定SQL注入点,并介绍了其在布尔型、报错型、时间型和联合注入等方面的判断方法。此外,文章还探讨了payload加载和执行过程,以及数据库识别和数据获取的机制。
摘要由CSDN通过智能技术生成

环境

git下载好源码后,可以方便查看记录

  • git tag 查看版本

image-20181020133139610

 然后用 git checkout 1.0 切换到1.0的版本

image-20181020133221960

 编辑器使用的是vscode + python插件

初步

最直观的感受,相比最初的版本,sqlmap以及有了大致的雏形。目录也丰富了许多

image-20181020133526572

也加入了sqlmapapi,文件的数量和内容相比之前有了明显的增加,到底增加了什么呢,带着这个疑问,继续看源码。

注入流程

还是从sqlmap最精华的注入流程看起。启动流程和最初版本差不多,先检测各种变量,初始化各种变量,然后便“开始”了。为什么“开始”要打上引号呢,这其实是sqlmap中的一个start()函数,这个函数的作用是检测一个URL的稳定性,然后测试GET、POST、Cookie、和User-Agent参数是否动态和sql注入。

start()函数中,首先肯定是将这些要检测的数据(get参数、post参数、cookie等)分离出来,如果该链接中含有表单的话,还会询问你是否解析表单。

接着会创建一些文件和数据库来存储这次结果。即setupTargetEnv()函数所做的,但具体存储哪些,没有细究,之后再看吧。

接着检测连通性(checkConnection()函数所做的),就是访问一次网页,存储最初访问的时间和访问网页返回的数据。

然后便检测waf了。

WAF的检测

既然到了WAF的检测,我们就好好说说这个。在这个版本1.0默认是不会检测waf的,需要加上--identify-waf才会检测。

在初始化的时候,有一个函数专门用来加载检测waf的脚本。

image-20181020140234786

先遍历出waf目录下的py脚本,分离出目录名和文件名,排除__init__.py的文件名。若目录名不在python的环境变量下则加入进去且放到第一位,然后用__import__动态加载waf模块,和python中使用import原理类似,当然,引入的时候不能要.py这个后缀,所以用[:-3]来过滤掉。

加载的模块会检测是否有detect这个函数,没有回抛出异常。简单来说,加载waf模块就这么几个步骤。

image-20181020141606373

所以初始化的时候所有waf脚本就加载进来了,要使用的时候循环遍历脚本即可。

附waf脚本demo -> 360.py

#!/usr/bin/env python

"""
Copyright (c) 2006-2016 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""

import re

from lib.core.settings import WAF_ATTACK_VECTORS

__product__ = "360 Web Application Firewall (360)"

def detect(get_page):
    retval = False

    for vector in WAF_ATTACK_VECTORS:
        _, headers, _ = get_page(get=vector)
        retval = re.search(r"wangzhan\.360\.cn", headers.get("X-Powered-By-360wzb", ""), re.I) is not None
        if retval:
            break

    return retval

看到这个脚本,我想就有几个问题需要我们解决了,首先WAF_ATTACK_VECTORS定义的是什么?

通过查看定义,得到了它的定义。

# Payload used for checking of existence of IDS/WAF (dummier the better)
IDS_WAF_CHECK_PAYLOAD = "AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1-- 
  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值