2024年网络安全-sqlmap学习笔记_sqlmap --no-cast(2),程序员必学之一

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

对成功的SQL注入检测发出警报

找到SQL注入时发出提示音

从sqlmap特定的UDF和表中清除DBMS

检查依赖项

禁用控制台输出高亮

测试WAF等保护

模仿智能手机

在离线模式下工作(仅使用会话数据)

从数据目录中安全删除所有内容

跳过启发式检测WAF/IPS保护

交互式sqlmap shell

寻找脆弱目标

指定站点根目录

面向初学者的简单向导界面


介绍

检测和利用SQL注入的工具。

官网:sqlmap官网

用户手册:sqlmapWiki

本文参考用户手册,有删减,算是低创,但并非完全翻译,有包含自己的抓包及部分使用sqlmap注入的内容,sqlmap实战在文末链接。

命令参数

红色为基本,黄色为提高,其余做了解,后序选项举例并不全,省略了部分用到概率很低的选项。

参数解释

选项含义描述
-h,–help帮助显示基本帮助消息并退出
-hh高级帮助显示高级帮助消息并退出
–version版本显示程序的版本号并退出
-vVERBOSEVERBOSE详细级别:0-6(默认1)
目标
-u,-url=URLURL目标URL(例如“ http://www.site.com/vuln.php?id=1”)
-dDIRECT连接字符串,用于数据库直接连接
-lLOGFILE从Burp或WebScarab代理日志文件中解析目标
-mBULKFILE扫描文本文件中给定的多个目标
-rREQUESTFILE从文件加载HTTP请求
-gGOOGLEDORK将Google dork结果处理为目标URL
-cCONFIGFILE从配置INI文件中加载选项
请求
-AAGENTHTTP User-Agent标头值
-HHEADER额外的头部(例如“ X-Forwarded-For:127.0.0.1”)
–method=METHODMETHOD强制使用给定的HTTP方法(例如,PUT)
–data=DATADATA要通过POST发送的数据字符串(例如“ id = 1”)
–param-del=PARAMPARAM用于分割参数值的字符(例如,&,;)
–cookie=COOKIECOOKIEHTTP Cookie标头值(例如“ PHPSESSID = a8d127e …”)
–cookie-del=COO…分割符用于分割Cookie值的字符(例如;)
–load-cookies=L…cookie文件包含Netscape / wget格式的cookie的文件
–drop-set-cookie忽略Set-Cookie标头从响应中忽略Set-Cookie标头
–mobile模仿手机通过HTTP User-Agent标头模仿智能手机
–random-agentUser-Agent使用随机选择的HTTP User-Agent标头值
–host = HOSThost值HTTP主机header值
–referer = REFERERREFERER值HTTP引用header值
-H HEADER, --header额外的头部额外的头部(例如“ X-Forwarded-For:127.0.0.1”)
–headers=HEADERS\n分隔的多个头部额外的头部(例如“ Accept-Language:fr \ nETag:123”)
–auth-type=AUTH–auth-type=AUTHHTTP身份验证类型(Basic, Digest, NTLM 或者 PKI)
–auth-cred=AUTH–auth-cred=AUTHHTTP身份验证凭据(用户名:密码)
–auth-file=AUTH–auth-file=AUTHHTTP认证PEM证书/私钥文件
–ignore-code=IGignore-code忽略(有问题的)HTTP错误代码(例如401)
–ignore-proxyignore-proxy忽略系统默认代理设置
–ignore-redirectsignore-redirects忽略重定向尝试
–ignore-timeoutsignore-timeouts忽略连接超时
–proxy=PROXYPROXY使用代理连接到目标URL
–proxy-cred = PROproxy-cred代理身份验证凭据(用户名:密码)
–proxy-file = PROproxy-file从文件加载代理列表
–torTor使用Tor匿名网络
–tor-porttor-portTORPORT设置默认值以外的Tor代理端口
–tor-typetor-typeTORTYPE设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认))
–check-torCheck Tor检查Tor是否正确使用
–delay=DELAYDELAY每个HTTP请求之间的延迟秒数
–timeout=TIMEOUTTIMEOUT超时连接之前等待的秒数(默认为30)
–randomize=RPARAMRPARAM随机更改给定参数的值
–timeout=TIMEOUTTIMEOUT超时连接之前等待的秒数(默认为30)
–retries=RETRIESRETRIES连接超时时重试(默认3)
–randomize = RPARAMRANDOM随机更改给定参数的值
–safe-url = SAFEURLSAFEURL测试期间要经常访问的URL地址
–safe-req=SAFER…POST SAFEURLPOST数据发送到安全URL
–safe-freq = SAFESAFE测试两次访问给定安全URL之间的请求
–skip-urlencodeskip-urlencode跳过有效载荷数据的URL编码
–csrf-token = CSRcsrf-token用于保存反CSRF令牌的参数
–csrf-url = CSRFURLcsrf-url用来提取反CSRF令牌的URL地址
–force-sslforce-ssl强制使用SSL / HTTPS
–hpphpp使用HTTP参数污染方法
–eval = EVALCODEEVALCODE在请求之前评估提供的Python代码(例如 “import hashlib;id2=hashlib.md5(id).hexdigest()”)
优化
-oOptimization开启所有性能优化参数
–predict-outputpredict-output预测常见查询输出
–keep-alivekeep-alive使用持久HTTP连接
–null-connectionnull-connection检索没有实际HTTP响应主体的页面长度
–threads = THREADSTHREADS最大并发HTTP请求数(默认为1)
注入
-pTESTPARAMETER可测试的参数
–skip=SKIPSKIP跳过给定参数的测试
–skip-staticskip-static跳过似乎不是动态的测试参数
–param-excludeparam-exclude正则表达式可从测试中排除参数(例如“ ses”)
–dbms=DBMSDBMS强制将后端DBMS设置为提供的值
–dbms-cred=DBMS…dbms-credDBMS身份验证凭据(用户:密码)
–os = OSOS强制后端DBMS操作系统提供值
–invalid-bignuminvalid-bignum使用大数字来使值无效
–invalid-logicalinvalid-logical使用逻辑运算来使值无效
–invalid-stringinvalid-string使用随机字符串使值无效
–no-castno-cast关闭有效载荷投射机制
–no-escapeno-escape关闭字符串转义机制
–prefix=PREFIXPREFIX注入有效负载前缀字符串
–suffix=SUFFIXSUFFIX注入有效载荷后缀字符串
–tamper=TAMPERTAMPER使用给定的脚本篡改注入数据
探测
–level=LEVELLEVEL要执行的测试级别(1-5,默认为1)
–risk=RISKRISK执行测试的风险(1-3,默认值为1)
–string=STRINGSTRING当查询评估为True时匹配的字符串
–not-string=NOT…NOT STRING查询评估为False时匹配的字符串
–regexp=REGEXPREGEXP正则表达式,当查询评估为True时匹配
–code=CODECODE查询评估为True时要匹配的HTTP代码
–text-onlytext-only仅基于文本内容比较页面
–titlestitles仅根据页面标题比较页面
技术
–technique=TECHTECHNIQUE要使用的SQL注入技术(默认为“BEUSTQ”)
–time-sec=TIMESECTIMESEC延迟DBMS响应的秒数(默认值为5)
–union-cols=UCOLSUCOLS要测试UNION查询SQL注入的列范围
–union-char=UCHARUCHAR用于暴力破解列数的字符
–union-from=UFROMUFROM在UNION查询SQL注入的FROM部分中使用的表
–dns-domain=DNS…DNS用于DNS渗透攻击的域名
–second-url=SEC…SECOND URL搜索到的页面URL为二阶响应
–second-req=SEC…SECOND REQ从文件加载二阶HTTP请求
指纹
-f, --fingerprintfingerprint执行广泛的DBMS版本指纹
枚举
-a, --allALL检索所有内容
-b, --bannerBANNER检索DBMS标语
–current-usercurrent-user检索DBMS当前数据库
–current-dbcurrent-db检索DBMS当前数据库
–hostnamehostname检索DBMS服务器主机名
–is-dbais-dba检测DBMS当前用户是否为DBA
–usersusers枚举DBMS用户
–passwordspasswords枚举DBMS用户密码哈希值
–privilegesprivileges枚举DBMS用户权限
–rolesroles枚举DBMS用户角色
–dbsdatabase枚举DBMS数据库
–tablestables枚举DBMS数据库表
–columnscolumns枚举DBMS数据库表列
–schemaschema枚举DBMS模式
–countcount检索表的条目数
–dumpdump转储DBMS数据库表条目
–dump-alldumpall转储所有DBMS数据库表条目
-D DBDATABASEDBMS数据库枚举
-T TBLTABLE要枚举的DBMS数据库表
-C COLCOLUMN要枚举的DBMS数据库表列
-UUSERDBMS用户枚举
–exclude-sysdbsexclude-sysdbs枚举表时排除DBMS系统数据库
–pivot-column=P…pivot-column=P…枢轴列名称
–where=DUMPWHEREDUMPWHERE在表转储时使用WHERE条件
–start=LIMITSTARTLIMITSTART要检索的第一个转储表项
–stop=LIMITSTOPLIMITSTOP要检索的最后一个转储表项
–first=FIRSTCHARFIRSTCHAR第一个查询输出要检索的字符
–last=LASTCHARLASTCHAR最后一个查询输出要检索的字符
–sql-query=QUERYQUERY要执行的SQL语句
–sql-shellsql-shell提示输入交互式SQL Shell
–sql-file=SQLFILESQLFILE从给定文件执行SQL语句
暴力
–common-tables检查公用表是否存在
–common-columns检查是否存在公共列
用户定义的函数注入
–udf-inject注入用户自定义函数
–shared-lib=SHLIB共享库的本地路径
文件系统访问
–file-read=FILE…从后端DBMS文件系统读取文件
–file-write=FIL…在后端DBMS文件系统上写入本地文件
–file-dest=FILE…要写入的后端DBMS绝对文件路径
操作系统访问
–os-cmd=OSCMD执行操作系统命令
–os-shell提示输入交互式操作系统
–os-pwn提示输入OOB shell,Meterpreter或VNC
–os-smbrelay一键提示输入OOB shell,Meterpreter或VNC
–os-bof存储过程缓冲区溢出利用
–priv-esc数据库进程用户权限升级
–msf-path=MSFPATH安装Metasploit Framework的本地路径
–tmp-path=TMPPATH临时文件目录的远程绝对路径
Windows注册表访问
–reg-read读取Windows注册表项值
–reg-add写入Windows注册表项值数据
–reg-del删除Windows注册表项值
–reg-key=REGKEYWindows注册表项
–reg-value=REGVALWindows注册表项值
–reg-data=REGDATAWindows注册表项值数据
–reg-type=REGTYPEWindows注册表项值类型
通用
-s从存储的(.sqlite)文件加载会话
-t将所有HTTP通信记录到文本文件中
–answers设置预定义的答案(例如“ quit = N,follow = N”)
–base64包含Base64编码数据的参数
–batchbatch从不要求用户输入,使用默认行为
–binary-fields结果字段具有二进制值(例如“摘要”)
–check-internet在评估目标之前检查Internet连接
–crawl=CRAWLDEPTH从目标URL开始爬行网站
–crawl-exclude正则表达式可将网页从抓取中排除(例如“注销”)
–csv-del=CSVDEL输出中使用的定界字符(默认为“,”)
–charset=CHARSET盲SQL注入字符集(例如“ 0123456789abcdef”)
–dump-format转储数据的格式(CSV(默认),HTML或SQLITE)
–encoding用于数据检索的字符编码(例如,GBK)
–eta为每个输出显示估计的完成时间
–flush-sessionSESSION刷新当前目标的会话文件
–forms在目标URL上解析和测试表单
–fresh-queries忽略存储在会话文件中的查询结果
–har=HARFILE将所有HTTP通信记录到HAR文件中
–hex在数据检索期间使用十六进制转换
–output-dir=OUT…自定义输出目录路径
–parse-errors解析并显示响应中的DBMS错误消息
–preprocess=PRE.使用给定脚本进行响应数据的预处理
–repair具有未知字符标记(?)的Redump条目
–save=SAVECONFIG将选项保存到配置INI文件中
–scope=SCOPE从提供的代理日志中过滤目标
–test-filter通过有效载荷和/或标题(例如ROW)选择测试
–test-skip按有效载荷和/或标题跳过测试(例如,BENCHMARK)
–update更新sqlmap
–sqlmap-shell提示输入交互式sqlmap shell
杂项
-zMNEMONICS使用短助记符(例如“ flu,bat,ban,tec = EU”)
–alert=ALERT找到SQL注入后运行主机OS命令
–beep出现问题/发现SQL注入时发出嘟嘟的声音
–cleanup从sqlmap特定的UDF和表中清理DBMS
–dependencies检查缺少的(可选)sqlmap依赖项
–disable-coloring禁用控制台输出颜色
–gpage=GOOGLEPAGE使用指定页码的Google dork结果
–identify-waf对WAF / IPS防护进行彻底的测试
–list-tampers显示可用的篡改脚本列表
–mobile通过HTTP User-Agent标头模仿智能手机
–offline以脱机模式工作(仅使用会话数据)
–purge安全删除sqlmap数据目录中的所有内容
–skip-waf跳过启发式检测WAF / IPS保护
–smart仅在启发式为正的情况下进行全面测试
–sqlmap-shell提示输入交互式sqlmap shell
–tmp-dir=TMPDIR用于存储临时文件的本地目录
–web-root=WEBROOTWeb服务器文档的根目录(例如“ / var / www”)
–wizardwizard面向初学者的简单向导界面

指定目标

直连数据库

选项:-d

服务型数据库(前提知道数据库用户名和密码)

格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:

python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner

直连结果

可能出现的问题:

缺少包

提示是缺少包的问题,通过提示,使用以下命令可安装所需包(根据自身python版本及平台修改命令)

  git clone https://github.com/petehunt/PyMySQL/
  cd PyMySQL/
  python ./setup.py install
  pip3 install sqlalchemy

安装PyMySQL成功

安装sqlalchemy成功

文件型数据库(前提知道数据库绝对路径)

格式:

DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)

URL探测

选项:-u或者–url

http协议及https协议都可以,指定端口时使用ip:port在url中添加即可。

  python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"

文件读取目标

  1. -l     从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件。
  2. -x    从sitemap.xml站点地图文件中读取目标探测。
  3. -m   从多行文本格式文件读取多个目标,对多个目标进行探测。
  4. -r     从文本文件中读取Http请求作为Sql注入探测的目标。
  5. -c    从配置文件sqlmap.conf中读取目标探测。

-l 博主仅安装了Burpsuite,展示下Burpsuite如何操作。

Burpsuite日志文件设置

部分日志

示例

python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log

根据日志批量检测

按y进行探测并继续。

-x 这个很多站点都没有了,有的也基本没有GET、POST,就不做展示了。

-m 多个目标就是指多个url,你可以把自己想要探测的多个url写到txt文本中

python sqlmap.py -m urls.txt

-r 把抓到的http包复制到txt文件中,进行探测

示例

httpbin抓包

python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt

get

这里提示没有参数,你可以尝试其他的,或者靶场中的。

网络安全-sqlmap实战之sqlilabs-Less12中有使用。

-c 配置文件探测

sqlmap.conf

从配置文件中我们可以看到一些参数,填写参数即可。

Google dork注入

选项:-g

就是一些google高级搜索作为url, 常见的高级搜索有infile,inurl,intitle,filetype等。

  python sqlmap.py -g "inurl:\".php?id=1\""

翻墙到goole

不怎么样,翻了墙也半天没反应,了解下好了。

Http参数

有关Http协议的内容,可以参考网络-http协议学习笔记(消息结构、请求方法、状态码等)

设置请求方法

sqlmap一般会调用合适的请求方法,但是,PUT等请求方法sqlmap不会自动调用,需要手动配置。

选项:–method=PUT

POST提交参数

sqlmap默认的是使用GET方法,可以使用–data参数来进行数据提交,key=value形式,使用&连接。

选项:–data=DATA

python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"

建议学习–forms参数

设置参数分隔符

默认的分割符为&,可以进行设置,个人认为就用默认的就好了

选项:–param-del=PARAM

python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"

设置Cookie

以下两种情况可能会使用:

  • 测试页面需要登录,登录状态用cookie识别
  • 想要检测是否存在Cookie注入

–cookie=COOKIE。同时,–leverl=2或者2以上

设置User-Agent

选项:–user-agent,-A,–random-agent

Sqlmap发送的HTTP请求中的User-Agent默认值为:

  sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"

sqlmap

很明显,sqlmap默认的User-Agent中含有sqlmap,而一般的网页浏览是浏览器,比如下图使用火狐浏览器进行访问,因此,探测目标可能根据User-Agent对sqlmap进行拦截等处理,有必要进行User-Agent的伪造。

火狐

使用-A参数进行修改,如下所示。

-A

再次抓包后发现User-Agent已修改。

当然,没必要每次用浏览器抓包,你可以保存下来,或者使用–random-agent参数,用sqlmap中自带的一些。

user-agents

当“–level”参数设置为3或更高时,Sqlmap会检测User-Agent是否存在注入漏洞。

Host

选项:–host

使用该参数可以手动指定HTTP头中的Host值。

当“–level”参数设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞。

Referer

选项:–referer

使用该参数可以指定HTTP头中的Referer值。

当“–level”设置为3或更高时,Sqlmap会检测Referer是否存在注入漏洞

额外的HTTP头部

选项:-H,–header,–headers

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner

添加blog头部

当然,对于已有的头部字段,也可以修改。

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner

修改User-Agent头部

协议认证

选项:–auth-type和–auth-cred

“–auth-type”用于指定认证方式,支持四种身份认证方式:Basic、Digest、NTLM、PKI

一般就是Basic,输入登录的用户名和密码,类似于Postman中的Basic Auth。

设置代理

选项:–proxy、–proxy-cred、–proxy-file和–ignore-proxy

使用参数“–proxy”来设置一个HTTP(S)代理,格式是“http(s)😕/ip:port”。

如果代理需要认证,使用参数“–proxy-cred”来提供认证凭证,格式是“username:password”。

使用参数“–proxy-file”来指定一个存储着多条代理的文件。

使用参数“–ignore-proxy”忽略本地代理设置。

一些代理

代理使用失败

事实证明,不花钱就想得到免费ip代理,,,是在想peach。。。

Tor匿名网络

选项:–tor、–tor-type、–tor-port和–check-tor

我的Tor还没有设置好,可能因为国内的原因吧,网桥配置了,但一直连接不上。所谓的深网也好,暗网也罢,其实也有蛛丝马迹的,遵守法律,做一位合格的好公民!

设置延迟

前端时间看见一位b站up主,吐槽自己的亲戚好友,让他使用刷*等软件刷视频赚钱,然后他写了一个脚本,跳过广告,自动滚屏,然后一天弄了几十块,还没提现,就被后台封号了。

为什么提到这个呢,因为一些后台会看你的访问频率,检测DDOS攻击或其他危险行为,所以这里我们设置延迟,让两个数据包之间有延迟,模拟人工浏览器访问。

–-delay

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner

设置超时

选项:-–timeout

超时时间默认是30秒,可以用参数“–timeout”指定超时时间。

设置重试次数

选项:-–retries

超时后Sqlmap会进行重试,重试次数默认为3,可以用参数“–retries”指定最大重试次数。

设置随机化参数

选项:-–randomize

使用该参数,Sqlmap会随机生成每次HTTP请求中参数的值,可以进行简单的fuzz,类似于Peach,内部原理是变异还是什么目前还不清楚。

前面是xxx,后面是123

前面是a=xxx,sqlmap有随机的赋值a其他的值,a=123时,也会随机更改为4184等值。

设置日志过滤目标

选项:-–scope,配合-l参数

指定一个Python正则表达式对代理日志进行过滤,只测试符合正则表达式的目标,如:

python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

设置忽略

选项:–ignore-code

如果测试的站点偶尔返回导致常规sqlmap运行出现问题的HTTP错误代码(例如,401(未授权)),想忽略该站点并继续进行测试,可以使用 --ignore-code

设置HTTP私钥

选项:–auth-file

文件格式为包含证书和私钥的PEM格式

设置安全模式

选项:--safe-url--safe-post--safe-req--safe-freq

避免过多的请求失败后会话被破坏,对表明safe的不进行任何类型的注入

  • --safe-url:测试期间经常访问的URL地址。
  • --safe-post:HTTP POST数据发送到给定的安全URL地址。
  • --safe-req:从文件加载并使用安全的HTTP请求。
  • --safe-freq:测试两次访问给定安全位置之间的请求。

设置忽略URL编码

选项:–skip-urlencode

使用该参数可以关闭URL编码,服务器端不支持RFC标准时使用。

绕过反CSRF保护

选项:--csrf-token--csrf-url

许多站点都以令牌,每个页面响应期间随机设置的隐藏字段值的形式结合了反CSRF保护。SqlMap的会自动尝试识别并绕过这种保护,但也有选项--csrf-token,并--csrf-url可以用来进一步微调它。选项--csrf-token可用于设置包含随机标记的隐藏值的名称。在网站为此类字段使用非标准名称的情况下,这很有用。选项--csrf-url可用于从任意URL地址检索令牌值。如果易受攻击的目标URL最初不包含必要的令牌值,但需要从其他位置提取该令牌值,则此功能很有用。

强制使用SSL / HTTPS

选项: --force-ssl

如果用户想要向目标强制使用SSL / HTTPS请求,则可以使用此选项。在使用选项--crawl收集URL或为-l选项提供Burp日志的情况下,这个选项很有用。

性能优化

选项:-o

该参数将开启所有性能优化

  • --keep-alive
  • --null-connection
  • --threads=3 如果未设置为更高的值。

设置持久HTTP连接

选项:-–keep-alive

该参数让Sqlmap使用HTTP长连接,头部的Connection字段会变为keep-alive。该选项与“–proxy”不兼容。

设置不接收HTTP的body

选项:-–null-connection

有特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文。这种知识可以在盲目注射技术被用来区分TrueFalse响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:RangeHEAD。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度。

设置多线程

选项:-–threads

使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。

设置预测输出

选项: --predict-output

此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads选项不兼容。

注入

指定注入参数

选项:-p

sqlmap默认指定所有参数进行注入,当有多个参数时,通过-p参数可以指定对某个参数,包括http报头,例如user-agent进行注入。

选项:–skip

既然可以指定也可以排除,使用–skip选项就可以对某些参数不进行注入。

选项:–param-exclude

忽略包含具体内容的参数。要跳过对包含字符串tokensession的参数的测试,可以使用--param-exclude="token|session"

设置URL注入位置

在特殊情况下,注入点位于URL本身内,除非手动指出,否则sqlmap不会对URL路径执行任何自动测试。必须在命令行中通过在在参数值后附加一个星号(*)(注意:%INJECT HERE%还支持Havij样式)来指定这些注入点。

例如,当使用Apache Web服务器的mod_rewrite模块或其他类似技术时,此功能特别有用。

示例:

python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

设置任意注入位置

与URL注入点类似,星号(*)也可以用于指向GET,POST或HTTP标头中的任意注入点。注入点可以通过提供选项-u的GET参数值(一个或多个),提供选项--data的POST参数值(一个或多个),HTTP标头中提供的选项值(S) ,-H--headers ,--user-agent,--referer,--cookie,在通用处内部HTTP请求从文件中加载带有选项-r,来指定。

示例:

python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"

指定DBMS

选项:-dbms

sqlmap支持以下数据库(有些我还没听说过╮( ̄▽  ̄)╭):

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、Informix、MariaDB、Percona、MemSQL、TiDB、CockroachDB、HSQLDB、H2、MonetDB、Apache Derby、Amazon Redshift、Vertica、Mckoi、Presto、Altibase、MimerSQL、CrateDB、Greenplum、Drizzle、Apache Ignite、Cubrid、InterSystems Cache、IRIS、eXtremeDB、FrontBase

示例:

--dbms mysql 5.0

版本号可以省略,DBMS版本号不一样,并不都是5.0这种,SQL Server数据库版本号是年号,例如08(代表SQL Server2008)

指定DBMS运行所在OS

选项: --os

指定操作系统,支持Windows和Linux

关闭负载转换机制

选项:–no-cast

NULL值转换为空格

关闭字符转换机制

选项:–no-escape

强制使用大数字来使值无效

选项: --invalid-bignum

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。使用此选项,可以强制使用大整数值来实现相同的目标(例如id=99999999)。

强制使用逻辑运算来使值无效

开关: --invalid-logical

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。通过此选项,可以强制使用布尔运算来实现相同的目标(例如id=13 AND 18=19)。

强制使用随机字符串来使值无效

选项: --invalid-string

在sqlmap需要使原始参数值(例如id=13)无效的情况下,它将使用经典取反(例如id=-13)。通过此选项,可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。

自定义注入负载设置

选项:--prefix--suffix

在某些情况下,仅当用户提供要添加到注入有效负载的特定后缀时,漏洞参数才可利用。当用户已经知道查询语法并想通过直接提供注入有效载荷前缀和后缀来检测和利用SQL注入时,这些选项很方便出现的另一种情况就会出现。

易受攻击的源代码示例(:

query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

为了检测和利用此SQL注入,您可以让sqlmap 在检测阶段为您检测边界(如SQL有效负载前缀和后缀的组合),也可以自行提供。

例如:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc"

payload前缀为’),后缀为 AND(‘abc’=‘abc’(注意空格)

这将导致所有sqlmap请求最终以如下查询结束:

query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";

网络安全-sqlmap实战之sqlilabs-Less3文章中有使用。

设置Tamper脚本

选项:–tamper

在后端数据与数据库管理系统之间的输入验证机制较弱的情况下,此选项可能非常有用且功能强大。通过tamper脚本绕过昂贵的企业级IPS设备或Web应用程序防火墙(WAF)。

要利用此选项,需要为sqlmap提供一个以逗号分隔的篡改脚本列表,它将处理有效负载并将其转换为有效负载。可以定义自己的篡改脚本,在tamper/文件夹中使用sqlmap脚本,也可以对其进行编辑,只要将它们以逗号分隔作为选项的值即可连接。

示例:

--tamper="between.py,randomcase.py"

tamper脚本

使用脚本或自己编写脚本后再来补充。

设置DBMS认证

选项:–dbms-cred=username:password

很少使用,了解即可

探测

设置探测等级

选项: --level

此选项需要一个参数,该参数指定要执行的测试级别。有五个级别。默认值是1,其中执行有限数量的测试(请求)。反之亦然,级别5将详细测试大量有效负载和边界(如SQL有效负载前缀和后缀)。

sqlmap使用的有效负载在文本文件中指定xml/payloads.xml。按照文件顶部的说明进行操作,如果sqlmap错过了注入,则您也应该可以添加自己的有效负载进行测试!

此选项不仅会影响尝试使用哪些有效负载sqlmap,还会影响检查中采用的注入点:始终测试GET和POST参数,HTTP cookie头值从2级开始探测。HTTP User-Agent / Referer头的值从3级开始探测。

总而言之,检测SQL注入越难,则--level必须设置的越高。

xml文档

union_query

在标签中存在标签,level设置为3、1时,分别执行两个测试。

设置风险参数

选项: --risk

此选项需要一个参数,该参数指定执行探测的风险。存在三个风险值。默认值为1,对于大多数SQL注入点而言,该值是无害的。风险值2将增加基于查询时间的SQL注入的测试添加到默认级别,值3也添加基于OR的SQL注入测试。

设置页面比较参数

默认情况下,通过将注入的请求页面内容与原始未注入的页面内容进行比较,可以将True查询与False查询(基于布尔的盲SQL注入漏洞的粗略概念)区分开。这个概念并非总是可行,因为有时页面内容在每次刷新时都会更改,甚至不注入任何内容,例如,当页面具有计数器,动态广告横幅或动态呈现的HTML的任何其他部分时,可能是随时间变化的并不是用户的输入。为了绕过此限制,sqlmap会努力识别响应正文的这些片段并进行相应处理。

选项:-–string

指定包含字符串,查询为True

选项:-–not-string

指定包含字符串,查询为False

选项:-–regexp

指定通过正则表达式匹配字符串,结果为True

选项:–-code

指定匹配HTTP响应码,查询为True

示例:

--code=200

选项:–text-only

设置页面内容中包含文本

示例:

--text-only="这是页面需要包含的文本"

选项:–titles

前提是你知道如何根据返回的字符串内容区分查询真假,例如,登录页面title为Login时为真,Forbidden时为假。

示例:

--titles="Login"

注入技术

进行探测时的注入技术

选项:–technique

sqlmap支持以下注入技术

  • B:Boolean-based blind(基于布尔的盲注)
  • E:Error-based(报错注入)
  • U:Union query-based(联合查询注入)
  • S:Stacked queries(堆叠查询注入)
  • T:Time-based blind(基于时间的盲注)
  • Q:Inline queries(内联查询注入)

使用多个技术时连着写即可

示例

--technique=BU

设置时间盲注的延迟时间

选项:–time-sec

默认为5秒,空格后跟一个整数值来设置。

设置联合查询列数

选项:–union-cols

默认范围是1到10。当level值较高时列数检测范围的会扩大到50列。

可以用此参数指定列数检测范围,例如,-–union-cols 12-16意味着使用12到16列来测试UNION查询SQL注入。

设置联合查询字符

选项: --union-char

默认情况下,sqlmap使用NULL字符测试UNION查询SQL注入技术。但是,通过提供更高的--level值,sqlmap也将使用随机数执行测试,因为在某些特殊情况下,UNION查询测试NULL失败,而使用随机整数则成功。

例如,使用--union-char abc来手动告诉sqlmap使用特定字符测试这种类型的SQL注入。

设置联合查询表

选项: --union-from

在某些UNION查询SQL注入情况下,需要在FROM子句中强制使用有效且可访问的表名。例如,Microsoft Access要求使用此表。如果不提供一个UNION查询,SQL注入将无法正确执行(例如--union-from=users

DNS渗透攻击

选项: --dns-domain

DNS渗透SQL注入攻击在论文《Data Retrieval over DNS in SQL Injection Attacks》中可以查看,而在sqlmap内部实现的介绍可以在DNS exfiltration using sqlmap幻灯片中找到。

针对目标网络很有可能对外部流量进行限制,或者设置WAF。
通过设置DNS流量来突破限制–dns-domain“dns服务器”,需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获得Web应用程序中数据内容。

设置二阶注入

选项:--second-url

注入结果如果需要显示在其他页面,需要用此选项指明显示注入结果的页面,该选项后跟一个url。

选项:--second-req

用于发送到显示结果的服务器的请求文件。

指纹

默认情况下,sqlmap会自动进行DBMS指纹识别。

选项:-f或–-fingerprint

执行广泛的数据库管理系统指纹识别可以添加此选项。

选项:-b或-–banner

得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。

枚举

枚举全部

选项:-all

不建议这样做,因为它会生成大量检索有用和无用数据的请求。

枚举DBMS的Banner信息

选项:-b或-–banner

得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" -b --batch

banner

枚举DBMS当前用户

选项: --current-user

通过此选项,可以枚举DBMS的用户,该用户正在有效地从Web应用程序对后端DBMS执行查询。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-user --batch

user

枚举DBMS当前数据库

选项: --current-db

使用此选项,可以枚举Web应用程序连接到的数据库管理系统的数据库名称。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-db --batch

db

枚举服务器主机名

选项: --hostname

通过此选项,可以枚举数据库管理系统的主机名。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --hostname --batch

hostname

检测当前用户是否是数据库管理员

选项: --is-dba

可以检测当前的数据库管理系统会话用户是否是数据库管理员,也称为DBA。则sqlmap将返回True,反之返回False

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --is-dba --batch

dba

枚举数据库管理系统用户

选项: --users

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举用户列表。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --users --batch

users

枚举并破解数据库管理系统用户的密码哈希值

选项:--passwords

当会话用户具有对有关DBMS用户密码信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的密码哈希。sqlmap将首先枚举用户,然后为每个用户枚举不同的密码哈希。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --password --batch

pwd

枚举数据库管理系统用户权限

选项: --privileges

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的特权。通过特权,sqlmap还将向您显示哪些是数据库管理员。

可以提供选项-U以指定要枚举特权的用户。

如果提供"CU"用户名,它将被视为当前用户的别名,并枚举该用户的特权。

在Microsoft SQL Server上,此功能将显示每个用户是否是数据库管理员,而不是所有用户的特权列表。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --privileges --batch

privilege

枚举数据库管理系统用户角色

选项: --roles

当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的角色。

可以提供选项-U以指定要枚举特权的用户。

如果提供"CU"用户名,它将被视为当前用户的别名,并枚举该用户的特权。

仅当DBMS是Oracle时,此功能才可用。官网是这么写的,但是,我测试mysql也是可以的。

python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --roles --batch

roles

枚举数据库管理系统的数据库

选项: --dbs

当会话用户具有对包含有关可用数据库信息的系统表的读取访问权限时,可以枚举数据库列表。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据库表

选项:--tables--exclude-sysdbs-D

当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库管理系统数据库的表列表。

如果没有使用option提供特定的数据库-D,则sqlmap将枚举所有DBMS数据库的表。

还可以提供此选项--exclude-sysdbs以排除所有系统数据库。

请注意,在Oracle上,必须提供TABLESPACE_NAME而不是数据库名称。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据库表列

选项:--columns-C-T-D

当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库表的列列表。sqlmap还枚举每列的数据类型。

此功能取决于-T用于指定表名称的,也可以取决于-D指定数据库名称。如果未指定数据库名称,则使用当前数据库名称。可以提供-C选项来指定表列名称(逗号隔开)。

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举数据值

选项:–dump

配合前面的-C等使用,枚举出某些列的数据值

网络安全-sqlmap实战之sqlilabs-Less1 中有使用

网络安全-sqlmap实战之sqlilabs-Less3 中有使用

枚举schema信息

选项:--schema--exclude-sysdbs

可以使用此开关检索DBMS模式。模式清单将包含所有数据库,表和列,以及它们的类型。与--exclude-sysdbs仅包含非系统数据库的部分架构结合使用,即可检索和显示。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --schema --exclude-sysdbs --batch

结果

检索数据表的条目数量

选项--count

如果用户在显示所需条目之前只想知道表中的条目数,则可以使用次选项。

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -count -D security --batch

结果

获取数据信息

选项:–start,–stop,–first,–last

–start和–stop表示表的条目范围

python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -D security -T users --start 1 --stop 6 --dump --batch

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值