前言
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
在mysql、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。那么他创建的这两个函数可以执行系统命令。
在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建
接下来我会通过注入、SQLSERVER数据库、Mysql数据库进行介绍os shell原理。
注入
必要条件:
- 拥有网站的写入权限
- Secure_file_priv参数为空或者为指定路径。
普通注入--os-shell主要是通过上传一个sqlmap的马,然后通过马来进行命令执行。
测试环境:
操作系统: Microsoft Windows Server 2012 Standard
数据库:Mysql 5.1.60
脚本语言:PHP 5.4.45
Web容器:Apache 2.4.39
利用sqlmap进行注入检测。
![f3b6614b5c95a52de6eb1620ceb5f34b.png](https://i-blog.csdnimg.cn/blog_migrate/313dae475e7ed68bf6df4e9cee66440d.jpeg)
然后执行--os-shell
。
![3a15fb038d8df924070c41ebfe4f345f.png](https://i-blog.csdnimg.cn/blog_migrate/576af0ac4abebf7e0f96feb8694fe792.jpeg)
这个时候sqlmap主要做了三件事情:
1、进行目标的一个基础信息的探测。
2、上传shell到目标web网站上。
3、退出时删除shell。
wireshark捕获数据包,只查看http数据包。
![b75dc0bdce3aad4f6c52af064a825168.png](https://i-blog.csdnimg.cn/blog_migrate/e4327403f6f7ba1d975f5e6557c6ace0.jpeg)
1、sqlmap上传一个上传功能的马。