写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Out-of-Band状态连接:Meterpreter和friends
介绍
检测和利用SQL注入的工具。
官网:sqlmap官网
用户手册:sqlmapWiki
本文参考用户手册,有删减,算是低创,但并非完全翻译,有包含自己的抓包及部分使用sqlmap注入的内容,sqlmap实战在文末链接。
命令参数
红色为基本,黄色为提高,其余做了解,后序选项举例并不全,省略了部分用到概率很低的选项。
参数解释
选项 | 含义 | 描述 |
---|---|---|
-h,–help | 帮助 | 显示基本帮助消息并退出 |
-hh | 高级帮助 | 显示高级帮助消息并退出 |
–version | 版本 | 显示程序的版本号并退出 |
-v | VERBOSE | VERBOSE详细级别:0-6(默认1) |
目标 | ||
-u,-url=URL | URL | 目标URL(例如“ http://www.site.com/vuln.php?id=1”) |
-d | DIRECT | 连接字符串,用于数据库直接连接 |
-l | LOGFILE | 从Burp或WebScarab代理日志文件中解析目标 |
-m | BULKFILE | 扫描文本文件中给定的多个目标 |
-r | REQUESTFILE | 从文件加载HTTP请求 |
-g | GOOGLEDORK | 将Google dork结果处理为目标URL |
-c | CONFIGFILE | 从配置INI文件中加载选项 |
请求 | ||
-A | AGENT | HTTP User-Agent标头值 |
-H | HEADER | 额外的头部(例如“ X-Forwarded-For:127.0.0.1”) |
–method=METHOD | METHOD | 强制使用给定的HTTP方法(例如,PUT) |
–data=DATA | DATA | 要通过POST发送的数据字符串(例如“ id = 1”) |
–param-del=PARAM | PARAM | 用于分割参数值的字符(例如,&,;) |
–cookie=COOKIE | COOKIE | HTTP 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-agent | User-Agent | 使用随机选择的HTTP User-Agent标头值 |
–host = HOST | host值 | HTTP主机header值 |
–referer = REFERER | REFERER值 | 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=AUTH | HTTP身份验证类型(Basic, Digest, NTLM 或者 PKI) |
–auth-cred=AUTH | –auth-cred=AUTH | HTTP身份验证凭据(用户名:密码) |
–auth-file=AUTH | –auth-file=AUTH | HTTP认证PEM证书/私钥文件 |
–ignore-code=IG | ignore-code | 忽略(有问题的)HTTP错误代码(例如401) |
–ignore-proxy | ignore-proxy | 忽略系统默认代理设置 |
–ignore-redirects | ignore-redirects | 忽略重定向尝试 |
–ignore-timeouts | ignore-timeouts | 忽略连接超时 |
–proxy=PROXY | PROXY | 使用代理连接到目标URL |
–proxy-cred = PRO | proxy-cred | 代理身份验证凭据(用户名:密码) |
–proxy-file = PRO | proxy-file | 从文件加载代理列表 |
–tor | Tor | 使用Tor匿名网络 |
–tor-port | tor-port | TORPORT设置默认值以外的Tor代理端口 |
–tor-type | tor-type | TORTYPE设置Tor代理类型(HTTP,SOCKS4或SOCKS5(默认)) |
–check-tor | Check Tor | 检查Tor是否正确使用 |
–delay=DELAY | DELAY | 每个HTTP请求之间的延迟秒数 |
–timeout=TIMEOUT | TIMEOUT | 超时连接之前等待的秒数(默认为30) |
–randomize=RPARAM | RPARAM | 随机更改给定参数的值 |
–timeout=TIMEOUT | TIMEOUT | 超时连接之前等待的秒数(默认为30) |
–retries=RETRIES | RETRIES | 连接超时时重试(默认3) |
–randomize = RPARAM | RANDOM | 随机更改给定参数的值 |
–safe-url = SAFEURL | SAFEURL | 测试期间要经常访问的URL地址 |
–safe-req=SAFER… | POST SAFEURL | POST数据发送到安全URL |
–safe-freq = SAFE | SAFE | 测试两次访问给定安全URL之间的请求 |
–skip-urlencode | skip-urlencode | 跳过有效载荷数据的URL编码 |
–csrf-token = CSR | csrf-token | 用于保存反CSRF令牌的参数 |
–csrf-url = CSRFURL | csrf-url | 用来提取反CSRF令牌的URL地址 |
–force-ssl | force-ssl | 强制使用SSL / HTTPS |
–hpp | hpp | 使用HTTP参数污染方法 |
–eval = EVALCODE | EVALCODE | 在请求之前评估提供的Python代码(例如 “import hashlib;id2=hashlib.md5(id).hexdigest()”) |
优化 | ||
-o | Optimization | 开启所有性能优化参数 |
–predict-output | predict-output | 预测常见查询输出 |
–keep-alive | keep-alive | 使用持久HTTP连接 |
–null-connection | null-connection | 检索没有实际HTTP响应主体的页面长度 |
–threads = THREADS | THREADS | 最大并发HTTP请求数(默认为1) |
注入 | ||
-p | TESTPARAMETER | 可测试的参数 |
–skip=SKIP | SKIP | 跳过给定参数的测试 |
–skip-static | skip-static | 跳过似乎不是动态的测试参数 |
–param-exclude | param-exclude | 正则表达式可从测试中排除参数(例如“ ses”) |
–dbms=DBMS | DBMS | 强制将后端DBMS设置为提供的值 |
–dbms-cred=DBMS… | dbms-cred | DBMS身份验证凭据(用户:密码) |
–os = OS | OS | 强制后端DBMS操作系统提供值 |
–invalid-bignum | invalid-bignum | 使用大数字来使值无效 |
–invalid-logical | invalid-logical | 使用逻辑运算来使值无效 |
–invalid-string | invalid-string | 使用随机字符串使值无效 |
–no-cast | no-cast | 关闭有效载荷投射机制 |
–no-escape | no-escape | 关闭字符串转义机制 |
–prefix=PREFIX | PREFIX | 注入有效负载前缀字符串 |
–suffix=SUFFIX | SUFFIX | 注入有效载荷后缀字符串 |
–tamper=TAMPER | TAMPER | 使用给定的脚本篡改注入数据 |
探测 | ||
–level=LEVEL | LEVEL | 要执行的测试级别(1-5,默认为1) |
–risk=RISK | RISK | 执行测试的风险(1-3,默认值为1) |
–string=STRING | STRING | 当查询评估为True时匹配的字符串 |
–not-string=NOT… | NOT STRING | 查询评估为False时匹配的字符串 |
–regexp=REGEXP | REGEXP | 正则表达式,当查询评估为True时匹配 |
–code=CODE | CODE | 查询评估为True时要匹配的HTTP代码 |
–text-only | text-only | 仅基于文本内容比较页面 |
–titles | titles | 仅根据页面标题比较页面 |
技术 | ||
–technique=TECH | TECHNIQUE | 要使用的SQL注入技术(默认为“BEUSTQ”) |
–time-sec=TIMESEC | TIMESEC | 延迟DBMS响应的秒数(默认值为5) |
–union-cols=UCOLS | UCOLS | 要测试UNION查询SQL注入的列范围 |
–union-char=UCHAR | UCHAR | 用于暴力破解列数的字符 |
–union-from=UFROM | UFROM | 在UNION查询SQL注入的FROM部分中使用的表 |
–dns-domain=DNS… | DNS | 用于DNS渗透攻击的域名 |
–second-url=SEC… | SECOND URL | 搜索到的页面URL为二阶响应 |
–second-req=SEC… | SECOND REQ | 从文件加载二阶HTTP请求 |
指纹 | ||
-f, --fingerprint | fingerprint | 执行广泛的DBMS版本指纹 |
枚举 | ||
-a, --all | ALL | 检索所有内容 |
-b, --banner | BANNER | 检索DBMS标语 |
–current-user | current-user | 检索DBMS当前数据库 |
–current-db | current-db | 检索DBMS当前数据库 |
–hostname | hostname | 检索DBMS服务器主机名 |
–is-dba | is-dba | 检测DBMS当前用户是否为DBA |
–users | users | 枚举DBMS用户 |
–passwords | passwords | 枚举DBMS用户密码哈希值 |
–privileges | privileges | 枚举DBMS用户权限 |
–roles | roles | 枚举DBMS用户角色 |
–dbs | database | 枚举DBMS数据库 |
–tables | tables | 枚举DBMS数据库表 |
–columns | columns | 枚举DBMS数据库表列 |
–schema | schema | 枚举DBMS模式 |
–count | count | 检索表的条目数 |
–dump | dump | 转储DBMS数据库表条目 |
–dump-all | dumpall | 转储所有DBMS数据库表条目 |
-D DB | DATABASE | DBMS数据库枚举 |
-T TBL | TABLE | 要枚举的DBMS数据库表 |
-C COL | COLUMN | 要枚举的DBMS数据库表列 |
-U | USER | DBMS用户枚举 |
–exclude-sysdbs | exclude-sysdbs | 枚举表时排除DBMS系统数据库 |
–pivot-column=P… | pivot-column=P… | 枢轴列名称 |
–where=DUMPWHERE | DUMPWHERE | 在表转储时使用WHERE条件 |
–start=LIMITSTART | LIMITSTART | 要检索的第一个转储表项 |
–stop=LIMITSTOP | LIMITSTOP | 要检索的最后一个转储表项 |
–first=FIRSTCHAR | FIRSTCHAR | 第一个查询输出要检索的字符 |
–last=LASTCHAR | LASTCHAR | 最后一个查询输出要检索的字符 |
–sql-query=QUERY | QUERY | 要执行的SQL语句 |
–sql-shell | sql-shell | 提示输入交互式SQL Shell |
–sql-file=SQLFILE | SQLFILE | 从给定文件执行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=REGKEY | Windows注册表项 | |
–reg-value=REGVAL | Windows注册表项值 | |
–reg-data=REGDATA | Windows注册表项值数据 | |
–reg-type=REGTYPE | Windows注册表项值类型 | |
通用 | ||
-s | 从存储的(.sqlite)文件加载会话 | |
-t | 将所有HTTP通信记录到文本文件中 | |
–answers | 设置预定义的答案(例如“ quit = N,follow = N”) | |
–base64 | 包含Base64编码数据的参数 | |
–batch | batch | 从不要求用户输入,使用默认行为 |
–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-session | SESSION | 刷新当前目标的会话文件 |
–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 | |
杂项 | ||
-z | MNEMONICS | 使用短助记符(例如“ 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=WEBROOT | Web服务器文档的根目录(例如“ / var / www”) | |
–wizard | wizard | 面向初学者的简单向导界面 |
指定目标
直连数据库
选项:-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"
文件读取目标
- -l 从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件。
- -x 从sitemap.xml站点地图文件中读取目标探测。
- -m 从多行文本格式文件读取多个目标,对多个目标进行探测。
- -r 从文本文件中读取Http请求作为Sql注入探测的目标。
- -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正文。这种知识可以在盲目注射技术被用来区分True
、False
响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:Range
和HEAD
。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度。
设置多线程
选项:-–threads
使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。
设置预测输出
选项: --predict-output
此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads
选项不兼容。
注入
指定注入参数
选项:-p
sqlmap默认指定所有参数进行注入,当有多个参数时,通过-p参数可以指定对某个参数,包括http报头,例如user-agent进行注入。
选项:–skip
既然可以指定也可以排除,使用–skip选项就可以对某些参数不进行注入。
选项:–param-exclude
忽略包含具体内容的参数。要跳过对包含字符串token
或session
的参数的测试,可以使用--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
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!