网络安全-sqlmap学习笔记

目录

介绍

命令参数

指定目标

直连数据库

服务型数据库(前提知道数据库用户名和密码)

文件型数据库(前提知道数据库绝对路径)

URL探测

文件读取目标

Google dork注入

Http参数

设置请求方法

POST提交参数

设置参数分隔符

设置Cookie

设置User-Agent

Host

Referer

额外的HTTP头部

协议认证

设置代理

Tor匿名网络

设置延迟

 设置超时

设置重试次数

设置随机化参数

设置日志过滤目标

设置忽略

设置HTTP私钥

设置安全模式

设置忽略URL编码

绕过反CSRF保护

强制使用SSL / HTTPS

性能优化

设置持久HTTP连接

设置不接收HTTP的body

设置多线程

设置预测输出

 


介绍

检测和利用SQL注入的工具。

官网:sqlmap官网

用户手册:sqlmapWiki

本文参考用户手册,有删减,算是低创,但并非完全翻译,有包含自己的抓包等内容。

命令参数

参数解释
选项 含义 描述
-h,--help

 
帮助 显示基本帮助消息并退出
-hh 高级帮助 显示高级帮助消息并退出
--version 版本 显示程序的版本号并退出
-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 ..”)
--random-agent User-Agent 使用随机选择的HTTP User-Agent标头值
--auth-type=AUTH AUTH HTTP身份验证类型(Basic, Digest, NTLM 或者 PKI)
--auth-cred=AUTH --auth-cred=AUTH HTTP身份验证凭据(用户名:密码)
--proxy=PROXY PROXY 使用代理连接到目标URL
--tor Tor 使用Tor匿名网络
--delay=DELAY DELAY 每个HTTP请求之间的延迟秒数
--timeout=TIMEOUT TIMEOUT 超时连接之前等待的秒数(默认为30)
--randomize=RPARAM RPARAM 随机更改给定参数的值
--check-tor Check Tor 检查Tor是否正确使用
-p TESTPARAMETER 可测试的参数
--dbms=DBMS DBMS 强制将后端DBMS设置为提供的值
--level=LEVEL LEVEL 要执行的测试级别(1-5,默认为1)
--risk=RISK RISK 执行测试的风险(1-3,默认值为1)
--technique=TECH TECHNIQUE 要使用的SQL注入技术(默认为“BEUSTQ”)
-a, --all     ALL 检索所有内容
-b, --banner        BANNER 检索DBMS标语
--current-user current-user 检索DBMS当前数据库
--passwords passwords 枚举DBMS用户密码哈希值
--tables tables 枚举DBMS数据库表
--columns columns 枚举DBMS数据库表列
 --schema schema 枚举DBMS模式
--dump dump 转储DBMS数据库表条目
 --dump-all  dumpall 转储所有DBMS数据库表条目
-D DB DATABASE DBMS数据库枚举
 -T TBL TABLE 要枚举的DBMS数据库表
 -C COL COLUMN 要枚举的DBMS数据库表列
 --os-shell   提示输入交互式操作系统外壳
--os-pwn   提示输入OOB shell,Meterpreter或VNC
--batch   从不要求用户输入,使用默认行为
--flush-session SESSION 刷新当前目标的会话文件
--sqlmap-shell   提示输入交互式sqlmap shell
--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"

文件读取目标

  1. -l     从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件。
  2. -x    从sitemap.xml站点地图文件中读取目标探测。
  3. -m   从多行文本格式文件读取多个目标,对多个目标进行探测。
  4. -r     从文本文件中读取Http请求作为Sql注入探测的目标。
  5. -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

这里提示没有参数,你可以尝试其他的,或者靶场中的。

-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"

设置参数分隔符

默认的分割符为&,可以进行设置,个人认为就用默认的就好了

选项:--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

设置延迟

前端时间看见一位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日志的情况下,这个选项很有用。

性能优化

设置持久HTTP连接

选项:-–keep-alive

该参数让Sqlmap使用HTTP长连接,头部的Connection字段会变为keep-alive。该选项与“–proxy”不兼容。

设置不接收HTTP的body

选项:-–null-connection

有特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文。这种知识可以在盲目注射技术被用来区分TrueFalse响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:RangeHEAD。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度

设置多线程

选项:-–threads

使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。

设置预测输出

选项: --predict-output

此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads选项不兼容。

 

未完待续...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章