什么是sqlmap?
sqlmap是一个开源的渗透测试工具,它自动化了检测和利用SQL注入缺陷 以及接管数据库服务器的过程。它配备了一个强大的检测引擎 ,以及终极渗透测试仪中的许多小众功能,其广泛的功能和选项包括数据库指纹,枚举,数据库提权,访问目标文件系统,并在获取完全操作权限时执行任意命令。

开发语言: Python
sqlmap目前支持的数据库共 25 种
全面支持 MySQL , Oracle , Microsoft SQL Server , Microsoft Access , PostgreSQL , IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, MariaDB, MemSQL, TiDB, CockroachDB, HSQLDB, H2, MonetDB, Apache Derby, Amazon Redshift, Vertica, Mckoi, Presto, Altibase, MimerSQL, CrateDB, Greenplum, Drizzle, Apache Ignite, Cubrid, InterSystems Cache, IRIS, eXtremeDB, FrontBase, Raima Database Manager, YugabyteDB and Virtuoso 数据库。
强大的 sqlmap有哪些功能?
- 判断可注入的参数
- 判断可以用那种SQL注入技术来注入
- 识别出哪种数据库
- 根据用户的选择,读取哪些数据
- 可执行情况
- 当前数据库用户名称和拥有的权限
- 发现WEB虚拟目录
- 上传 getshel
- 绕过防火墙
sqlmap的基本工作流程
当给 sqlmap这么一个url的时候,它会
- 检测网站是否能够访问
- 检测是否有Waf
- 判断可注入的参数
- 判断可以用那种SQL注入技术来注入
- 识别出哪种数据库
- 根据用户输入的参数,进行操作
sqlmap支持的 六种 不同注入模式
- 基于布尔盲注 :即可以根据返回页面判断条件真假的注入。
- 基于时间盲注 :即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间)来判断。
- 基于报错注入 :即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
- 联合查询注入 :可以使用 union的情况下的注入。
- 堆查询注入 :可以同时执行多条语句的执行时的注入。
- 内联查询注入 :在Sql语句中执行sql语句。
相关官方网址集合
- sqlmap官网 :https://sqlmap.org
- sqlmap Github :https://github.com/sqlmapproject/sqlmap/wiki
- Python 官网 :https://www.python.org/
- Kali系统官网 :https://www.kali.org/
windows系统安装
- sqlmap是基于Python开发的,所以要有Python环境。在python官网https://www.python.org下载与自己操作系统匹的环境,并安装。注意:老版本SqlMap 2.6≤所需Pyhton版本<3.0 ,最新版本SqlMap1.5.9已经支持Python3
- 将 sqlmap从官网上下载下来,并安装到 python的运行目录下。在 sqlmap的目录中,创建一个cmd的快捷方式,并改名为
sqlmap,双击便可直接运行。 - 输入执行 sqlmap. py -h 若显示一下界面,说明安装完成

Linux系统安装
- 安装Kali系统自带SqlMap无需任何配置即可使用,或者去 sqlmap官网 自行下载linux版本安装包
- GET提交方式
- POST 提交方式
- 常用参数
- 进阶参数
- doc 目录:包含 sqlmap的简要说明,具体使用说明、作者信息等。
- extra 目录:包含了 sqlmap的额外功能,例如发出声响、运行cmd、安全执行等。例如-beep参数。
- lib 目录:sqlmap核心目录。
- plugins 目录:包含了 sqlmap目前支持的25种数据库信息和数据库通用事项。
- tamper 目录:这里包含了各种辅助脚本,比如常见的waf绕过脚本。
- thirdparty 目录:包含了第三方插件,例如优化、保持连接、颜色。
- data 目录:
- procs 目录:包含了 mssql、 mysql、 oracle、 postgresql的触发程序。
- shell 目录:包含了注入成功后的8种shell远程命令执行。
- txt 目录:包含了表名字典,列名字典,UA字典等。
- udf 目录:涉及UDF提权相关的文件。
- xml 目录:存放多种数据库注入检测的 payload等信息。
- 执行指定SQL语句
- 交互式的SQL命令行
- 执行文件中的SQL语句
危害与防御
- 了解SQL注入可以进行文件读写操作带来的危害
- 如果当前web页面存在SQL注入漏洞,且当前的用户是root权限,且可以进行文件读写操作。
- 我们可以在知道绝对路径的情况下,尝试上传一个一句话木马,并用菜刀连接后,获取到网站的 getshell。
- SQL注入导致的文件读写的防御方法
- 将 secure-file-priv的参数在 my.ini中配置为 secure-file-priv=null将会限制 mysqld不允许导入导出操作。
- secure-file-priv可以通过 select @@secure_file_priv;查询得到。
- 在用户输入可控参数时,对敏感语句进行过滤。
读文件
- 满足以下条件
- 有读文件权限
- max allowed packed //读写文件最大的字节数
- 知道绝对路径
- 文件必须在服务器上存在
如何查看 secure-file-priv的值:show variables like 'secure%'
- 利用mysql的 load_file 函数
- 读取文件
写文件
- 满足以下条件
- 有写文件权限
- 知道绝对路径
- 必须能绕过单引号过滤
- 利用mysql的 outfile 和dumpfile函数
outfile 函数:可写多行,数据格式可能会受操作系统影响
dumpfile 函数:可写单行,数据格式不会受操作系统影响
- 上传文件
- 执行命令
分析sqlmap --os-shell原理(简单分析写入的php文件)
- 生成一个带有上传功能 的小马 tmpuvbhi.php,写到目标机指定目录
执行效果:

小马代码截图:

小马简单分析:
当上传upload的值非空时,获取上传目录路径,根据php版本不同,选择合适的HTTP 文件上传变量 来接收。若php < 4.1.0,使用$HTTP_POST_FILES,否则使用$_FILES
- 当sqlmap 使用 --os-shell时,会利用这个带有上传功能的小马 tmpuvbhi.php来上传一个带有命令执行功能 的大马

大马代码截图:

大马简单分析:
- 涉及的函数:
- disable_functions
- 为了安全,运维人员会禁用PHP的一些“危险”函数,将其写在php.ini配置文件中,就是我们所说的disable_functions了。
- disable_functions其实是一个黑名单机制,我们可以通过观察是否存在可利用的漏网之鱼,直接通过其实现绕过即可。
- 常规绕过:exec,shell_exec,system,passthru,popen,proc_open
- 更多详细绕过姿势参考下方:https://baijiahao.baidu.com/s?id=0&wfr=spider&for=pc
- 2>&1
- 程序运行后会打开三个文件描述符,分别是标准输入0,标准输出1和标准错误输出2。
- 在调用脚本时,可使用2>&1来将标准错误输出重定向到标准输出。
- 只需要查看脚本的错误时,可将标准输出重定向到文件,而标准错误会打印在控制台,便于查看。
- >> log.txt会将重定向内容追加到log.txt文件末尾。
- 通过查看/proc/进程id/fd下的内容,可了解进程打开的文件描述符信息。
- 过程简单分析:
- 断开连接自动删马
当 --os-shell退出连接后,目标机中的小马和大马会自动删除
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/3061.html