什么,一条指令直接黑了数据库!

news2024/10/7 14:32:54

什么,一条指令直接黑了数据库!

sqlMap

shigen最近研究了一下一款渗透工具sqlMap。它一款流行的开源工具,用于自动化SQL注入攻击和渗透测试。它专门设计用于检测和利用Web应用程序中的SQL注入漏洞。SQLMap具有丰富的功能集,可自动检测和利用SQL注入漏洞,获取数据库的敏感信息,以及执行各种数据库操作,如提取、修改或删除数据。它支持多种数据库管理系统(DBMS),包括MySQL、Oracle、SQLite、Microsoft SQL Server等。也支持多种注入技术,包括基于错误的注入、联合查询注入、布尔盲注和时间盲注。通过使用这些技术,它可以自动化地发现和利用各种类型的SQL注入漏洞。

它的官方地址在这里:sqlmap代码地址

sqlmap直接连接数据库

以下是我用sqlMap连接数据库并获得数据库的版本信息案例。

python3 sqlmap.py -d 'mysql://root:123456@127.0.01:3306/security' -f --banner

sqlmap直接连接数据库

对单一的URL进行探测

在这里,shigenspring boot写了一个接口,专门用来sqlMap的测试:

    @GetMapping(value = "findById2")
    public Result<User> findById2(@RequestParam(value = "id", defaultValue = "1", required = false) String id) {
        User user = userMapper.findById2(id);
        return Result.ok(user);
    }

相信这段代码阅读起来没有难度吧,我的接口就是去获得id这个字符串类型的参数,去数据库查询数据返回。

数据库的ORM框架采用的是mybatis plus,我也把我的操作数据库部分的代码放在这里:

@Select("select * from user where id = ${id}")
User findById2(@Param("id") String id);

相信细心的伙伴已经发现问题了!

接下来有请sqlMap的出场!

python3 sqlmap.py -u 'http://127.0.0.1:9000/penetration/findById2?id=20' -dbs

见证奇迹的时刻

我直接上我的结果!

获得所有的dbs

控制台输出了我本地的所有数据库,而且是准确的、全部的!是不是很恐怖。第一次我还不大相信,我还以为是shigen眼花了。

我看了一下控制台输出的有一个payload信息,它的参数是:id= 2 and 5685=5685, 而这只是一个案例,sqlmap在执行的时候,会注入很多这样总是在where之后条件成立的语句。

url探测

这样的就是一个很明显的案例,总是不断的在条件后边追加and条件,让sql尽可能的查询到数据出来,疯狂的挑衅、试探。

==>  Preparing: select * from user where id = ?
==> Parameters: 20) AND 6535=9250 AND (2651=2651(String)

--dbs仅仅是sqlMap命令或者说功能的冰山一角,它还有这些强大的功能:

  Enumeration:
    These options can be used to enumerate the back-end database
    management system information, structure and data contained in the
    tables

    -a, --all           Retrieve everything
    -b, --banner        Retrieve DBMS banner
    --current-user      Retrieve DBMS current user
    --current-db        Retrieve DBMS current database
    --passwords         Enumerate DBMS users password hashes
    --dbs               Enumerate DBMS databases
    --tables            Enumerate DBMS database tables
    --columns           Enumerate DBMS database table columns
    --schema            Enumerate DBMS schema
    --dump              Dump DBMS database table entries
    --dump-all          Dump all DBMS databases tables entries
    -D DB               DBMS database to enumerate
    -T TBL              DBMS database table(s) to enumerate
    -C COL              DBMS database table column(s) to enumerate

我就不带着大家一一去尝试了,我就在这展示一个--tables的案例:的确,我本地的数据库中所有的数据表都被扫出来了,你看,seata的四张表!

获得所有的表结构

更多的使用案例技巧,shigen也会持续的分享,欢迎评论 点赞 在看 关注,这样就不会错过很多的干货了!

**也要默默的提一嘴:SQLMap是一个强大的工具,但在使用它时需要遵守法律和道德规范。毕竟数据的价值你懂的,一不小心局里蹲!**况且现在宕数据,人家(云服务)有监控,查看数据,人家(云服务)有记录,无处藏身!

后记

你以为文章在这里就结束了?我还要分享一个问题:到底我的代码漏洞是如何被发现的,直接攻击进了数据库?不能怪sqlMap太厉害了,那这样全世界的数据库都不安全,重点在这里,${id}

重点

  • ${id}是字符串替换方式,直接将参数值嵌入到SQL语句中,存在安全风险。
  • #{id}是预编译参数占位符方式,通过占位符传递参数值并由数据库驱动程序进行参数绑定,更安全可靠。

这里的预编译参数有点像我们最开始学习的prepareStatementmybatis或者mybatis plus底层是这样处理的:

  1. 占位符生成:MyBatis会将#{id}中的id作为参数名,并根据数据库厂商的不同生成相应的占位符。例如,对于MySQL数据库,占位符可能是?;对于Oracle数据库,占位符可能是:1:2等。
  2. 参数绑定:MyBatis会将参数值绑定到生成的占位符上。这个过程由底层的数据库驱动程序负责完成。数据库驱动程序通过使用预编译语句(PreparedStatement)来处理这些占位符,并将参数值安全地绑定到占位符上。

所以,很多公司规范包括阿里巴巴java开发手册都明确的规定:占位符使用#{}

以上就是今天全部的内容啦,shigen一起,每天不一样!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/941506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工厂方法模式的概述和使用

目录 一、工厂方法模式概述1. 定义2. 使用动机 二、工厂方法模式结构1. 模式结构2. 时序图 三、工厂方法模式的使用实例四、工厂方法模式的优缺点五、工厂方法模式在Java中应用 原文链接 一、工厂方法模式概述 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式&…

高通面临难题,Oryon核心存在问题,高通8cx Gen 4芯片将推迟发布

"高通公司面临难题&#xff0c;可能会导致骁龙8cx Gen 4的发布时间推迟"&#xff0c;关于骁龙8cx Gen 4处理器&#xff0c;还有一些其他值得关注的特点和功能。首先&#xff0c;据悉&#xff0c;骁龙8cx Gen 4采用了高通自家研发的Oryon核心架构&#xff0c;这是一项…

春秋云镜 Brute4Road

flag1 fscan扫描发现&#xff0c;6379开放ftp可以匿名登录 这里直接尝试了去打redis但是只有主从复制能成功&#xff08;这里应该是靶场有设置吧&#xff0c;对6379操作过后再次操作就会显示端口拒绝访问直接重置就可以了&#xff09; 之后用脚本一把梭哈即可获得shell #更改…

C++ list模拟实现

list模拟实现代码&#xff1a; namespace djx {template<class T>struct list_node{T _data;list_node<T>* _prev;list_node<T>* _next;list_node(const T& x T()):_data(x),_prev(nullptr),_next(nullptr){}};template<class T,class Ref,class Pt…

好用的网页制作工具就是这6个,快点来看!

对于网页设计师来说&#xff0c;好用的网页设计工具是非常重要的&#xff0c;今天本文收集了6个好用的网页设计工具供设计师自由挑选使用。在这6个好用的网页设计工具的帮助下&#xff0c;设计师将获得更高的工作效率和更精致的网页设计效果&#xff0c;接下来&#xff0c;就一…

Android studio APK切换多个摄像头(Camera2)

1.先设置camera的权限 <uses-permission android:name"android.permission.CAMERA" /> 2.布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"and…

vue过渡及动画

文章目录 前言类名使用自己定义动画样式多个元素过渡使用第三方库 前言 对于vue中的过渡与动画&#xff0c;官网上是这样概述的&#xff1a; Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。包括以下工具&#xff1a; 在 CSS 过渡和动画中自动…

基于空洞卷积DCNN与长短期时间记忆模型LSTM的dcnn-lstm的回归预测模型

周末的时候有时间鼓捣的一个小实践&#xff0c;主要就是做的多因子回归预测的任务&#xff0c;关于时序数据建模和回归预测建模我的专栏和系列博文里面已经有了非常详细的介绍了&#xff0c;这里就不再多加赘述了&#xff0c;这里主要是一个模型融合的实践&#xff0c;这里的数…

避雷!教你正确区分流量卡,不看可别后悔!

分不清真假流量卡&#xff1f; 想要手机流量卡&#xff0c;不小心买到了物联卡&#xff0c;结果被商家割了韭菜&#xff1f; 对于流量卡的套路太多了&#xff1f;你是否还傻傻分不清楚&#xff0c;今天&#xff0c;这篇文章教你正确区分这两种不同类型的卡。 ​ 赶紧收藏&am…

文件重命名与隐藏编号一键搞定!让不同类型的文件整齐有序

大家好&#xff01;在整理和管理不同类型的文件时&#xff0c;我们经常遇到文件名不规范、编号杂乱的情况&#xff0c;使得文件整体显得混乱无序。为了帮助您达到整齐有序的效果&#xff0c;我们自豪地推出了一款高效的工具——文件重命名与隐藏编号软件&#xff01;让您能够轻…

Redis进阶 - JVM进程缓存

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis进阶 - JVM进程缓存 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-jvm-process-cache.html 传统缓存的问题 传统的缓存策略一般是请求到达 Tomcat 后&#xff0c;先查询 Redis &…

Qt开发实例_实时监测磁盘剩余空间

一、前言 当计算机磁盘空间不足,会导致应用程序无法继续存储数据,导致错误和不稳定的情况。所以,实时检测磁盘空间剩余大小对于许多应用程序来说都非常重要。 这种需求在许多应用程序中都存在,例如文件管理器、图像编辑器、视频播放器、云存储服务等等。在这些应用程序中…

Python+Appium自动化测试-编写自动化脚本

之前已经讲述怎样手动使用appium-desktop启动测试机上的app&#xff0c;但我们实际跑自动化脚本的过程中&#xff0c;是需要用脚本调用appium启动app的&#xff0c;接下来就尝试写Python脚本启动app并登陆app。环境为Windows10 Python3.7 appium1.18.0 Android手机 今日头条…

Apex导航菜单权限动态分配的实现

改动之处 return is_have_permission_wxx(V(WXX_USER_ID), 2,V(WXX_ROLE_ID)); 改之后 return is_have_permission_wxx(V(USER_ID), 2,V(ROLE_ID)); 创建新的动态菜单“动态菜单1” 共享组件→列表→创建→动态 selectlevel,m1.NAME label,f?p&||APP_ID.:||m1.…

17-会话机制

cookie 和 session cookie存储在本地 session是在服务器端进行用户信息的保存,一个字典 Cookie: # 1. 设置 : 通过response对象设置response redirect(xxx)response render_template(xxx)response Response(xxx)response make_response(xxx)response jsonify(xxx)# 通过…

xxl-job学习(一篇文章解决)

前言&#xff1a;学习xxl-job需要有git&#xff0c;springboot的基础&#xff0c;学起来就很简单 xxl-job是一个分布式的任务调度平台&#xff0c;其核心设计目标是&#xff1a;学习简单、开发迅速、轻量级、易扩展&#xff0c;现在已经开放源代码并接入多家公司的线上产品线&a…

详解过滤器Filter和拦截器Interceptor的区别和联系

目录 前言 区别 联系 前言 过滤器(Filter)和拦截器(Interceptor)都是用于在Web应用程序中处理请求和响应的组件&#xff0c;但它们在实现方式和功能上有一些区别。 区别 1. 实现方式&#xff1a; - 过滤器是基于Servlet规范的组件&#xff0c;通过实现javax.servlet.Filt…

热烈祝贺重庆融能成功入选航天系统采购供应商库

经过航天系统采购平台的严审&#xff0c;重庆融能机电设备股份有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台&#xff0c;服务航天全球范围千亿采购需求&#xff0c;目前&#xff0c;已有华为、三一重工、格力电器、科大讯飞等企业…

酒店资产如何管理提升资产利用效率

酒店资产管理系统是一种专门为酒店行业设计的管理软件&#xff0c;可以帮助酒店实现资产的全生命周期管理。一个好的酒店资产管理系统应该具备以下功能&#xff1a;  资产登记&#xff1a;可以对酒店的各种资产进行登记&#xff0c;包括房间、家具、设备等&#xff0c;记录资…

结合近日核污水排放问题浅析数字孪生技术革命对城市环境保护的作用

近期&#xff0c;日本核电站排放核污水引发全球关注&#xff0c;环境保护再次成为重要议题。随着数字孪生技术的进步&#xff0c;数字孪生技术正展现出其强大潜力&#xff0c;为环境保护提供前所未有的洞察和解决方案。本文将深入探讨数字孪生技术如何在环境保护领域发挥作用&a…