【2022争霸赛*干货满满】渗透安全之网站命令注入攻击SQL注入原理实战讲解分享
  

山东_朱文鑫 887614人觉得有帮助

{{ttag.title}}
本帖最后由 山东_朱文鑫 于 2022-10-17 01:02 编辑

大家好,我是大白, 成功最终属于耐心等待得人。优质的帖子也在尽力中提供,也希望各位道友多多支持,让我引劫渡劫成功哈哈哈。

大白队口号就是:砸锅卖铁我最行,拼死拼活就要赢!!!!!!!!!!!!

今天分享新的篇章为渗透安全篇的第一章网站命令注入攻击SQL注入原理讲解分享,再分享前,对于这个新的篇章我想了好长时间需不需要进行分享,对于好多小伙伴来说,这个更加偏向于安服,总体来说确实更加偏向于安服但是对于安全知识的了解以及更加层次的学习甚至使用都比较重要,也同样是随着越来越多小伙伴的私信让我开始做渗透安全篇的分享。





SQL注入对于小伙伴来说其实并不陌生,对于我们身边的攻击事件来说也并不陌生,我们往往在深信服SIP安全感知平台上可以看到很多的SQL注入事件,但是我们真的了解这个是什么东西嘛?

*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取!!!!

SQL注入是什么?

       SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

       SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。
那么既然是网站攻击那么我们就要涉及到WEB的结构:

WEB结构简单来说三层架构(3-tier architecture) 通常意义上就是将整个业务应用划分为:

      界面层(User Interface layer)

      业务逻辑层(Business Logic Layer)

      数据访问层(Data access layer)。

      区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构被应用于众多类型的软件开发。

由数据库驱动的Web应用程序依从三层架构的思想也分为了三层:

      表示层。

      业务逻辑层(又称领域层)

      数据访问层(又称存储层)

拓扑结构如下图所示:



用户访问实验楼主页进行了如下过程:

       1.在 Web 浏览器中输入 www.shiyanlou.com连接到实验楼服务器。

       2.业务逻辑层的 Web 服务器从本地存储中加载 index.php 脚本并解析。

       3.脚本连接位于数据访问层的 DBMS(数据库管理系统),并执行 Sql 语句。

       4.数据访问层的数据库管理系统返回 Sql 语句执行结果给 Web 服务器。

       5.业务逻辑层的 Web 服务器将 Web 页面封装成 HTML 格式发送给表示层的 Web 浏览器。

       6.表示层的 Web 浏览器解析 HTML 文件,将内容展示给用户。

在三层架构中,所有通信都必须要经过中间层,简单地说,三层架构是一种线性关系

      SQL 注入漏洞产生的条件 A:参数用户可控:前端传入的参数内容由用户控制 B:参数带入数据库的查询:传入的参数拼接到 SQL 语句,并且带入数据库的查询

关于数据库:

       a) 在 MySQL5.0 版本后,MySQL 默认在数据库中存放一个information_schema的数据库,在该库中,我们需要记住三个表名,分别是 schemata,tables,columns。

       b) Schemata 表存储的是该用户创建的所有数据库的库名,需要记住该表中记录数据库名的字段名为 schema_name。

       c) Tables 表存储该用户创建的所有数据库的库名和表名,要记住该表中记录数据库 库名和表名的字段分别是 table_schema 和 table_name.

       d) Columns 表存储该用户创建的所有数据库的库名、表名、字段名,要记住该表中记录数据库库名、表名、字段名为 table_schema、table_name、columns_name。

1. 数据库查询语句:
数据库查询语句如下: 想要查询的值 A= select 所属字段名 A from 所属表名 where 对应字段名 B=值 B

关于几个表的一些语法:

// 通过这条语句可以得到所有的数据库名



// 通过这条语句可以得到所有的数据表名



// 通过这条语句可以得到指定security数据库中的所有表名



// 通过这条语句可以得到所有的列名



// 通过这条语句可以得到指定数据库security中的数据表users的所有列名



//通过这条语句可以得到指定数据表users中指定列password的数据(只能是database()所在的数据库内的数据,因为处于当前数据库下的话不能查询其他数据库内的数据)



       刚刚讲过当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句

       这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。

Sql 注入带来的威胁主要有如下几点:

      1.猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
      2.绕过认证,列如绕过验证登录网站后台。
      3.注入可以借助数据库的存储过程进行提权等操作

使用DVWA渗透测试平台,作为攻击测试的目标:



先输入 1 ,查看回显 (URL中ID=1,说明php页面通过get方法传递参数):



那实际上后台执行了什么样的Sql语句呢?点击 view source查看源代码 ,其中的SQL查询代码为:



可以看到,实际执行的Sql语句是:


我们是通过控制参数Id的值来返回我们需要的信息。

如果我们不按常理出牌,比如在输入框中输入


实际执行的Sql语句就会变成:


这条语句的意思是查询users表中user_id为1的数据并按第一字段排行。

输入如下时都返回正常:



当输入如下时,返回错误:


由此可知,users表中只有两个字段,数据为两列。

接下来我们使用 union select联合查询继续获取信息。
      union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union
          查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为 2,接下来就好办了。

输入进行查询 :


如下将会返回当前网站所使用的数据库名字:

如下将会返回执行当前查询的用户名:


实际执行的Sql语句是 :



通过上图返回信息,我们成功获取到:

- 当前网站使用数据库为 dvwa .

- 当前执行查询用户名为 root@localhost .

同理我们再输入如下进行查询::


如下获取当前数据库版本:


如下获取当前操作系统:


实际执行的Sql语句是:



通过上图返回信息,我们又成功获取到:

- 当前数据库版本为 : 5.6.31-0ubuntu0.15.10.1.

- 当前操作系统为 : debian-linux-gnu

接下来我们尝试获取 dvwa 数据库中的表名。


如图所示是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含如下两个字段:【分别记录 DBMS 中的存储的表名和表名所在的数据库。】



我们输入如下进行查询:


实际执行的Sql语句是:




通过上图返回信息,我们再获取到:

- dvwa 数据库有两个数据表,分别是如下图所示:


     有些伙伴肯定还不满足目前获取到的信息,那么我们接下来尝试获取重量级的用户名、密码。

      由经验我们可以大胆猜测users表的字段为 user 和 password ,所以输入如下进行查询:

实际执行的 Sql 语句是:



可以看到成功爆出用户名、密码,密码采用 md5 进行加密,可以到解密网站进行反向解密。直此,同学们应该已经对 Sql 注入有了一个大概得了解,也清楚了 Sql 注入的强大。

SQL攻击常见基本流程:

       第一步:SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。

       第二步:收集后台数据库信息。同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。

       第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。

       第四步:查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。

       第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。

以上就是本次的渗透安全之网站命令注入攻击SQL注入原理讲解分享,SQL注入攻击刚刚分享的只是其中的种方式进行注入攻击,对于SQL注入的攻击方式还是分为很多种的攻击手法的盲注,以及攻击方式上的数字型注入、字符型注入等,有时间我们再详细探讨一下这些技术,感谢大佬们的参阅,此贴先到这里后续会带上更加实用的帖子,感谢大家!

*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取!!!!
[而且不要问为啥命令不敲而是用图片,因为带上了发帖时就显示社区服务器无响应]

励志分享超清壁纸语句~~:



环境影响人的成长,但它实在不排挤意志的自由表现。——车尔尼雪夫斯基

好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!!

打赏鼓励作者,期待更多好文!

打赏
79人已打赏

339015 发表于 2022-10-17 23:54
  
感谢楼主分享,文章详细介绍了SQL注入的思路与实例分析,非常详细,期待更多优秀的分享
网泰王晓庆 发表于 2022-10-17 08:31
  
楼主分析的很详细,不错的实战经验,小白用户一看就懂,非常好的技术干货帖,顶一个!
山西6666 发表于 2022-10-19 16:21
  

有助于学习!!!!!!!!
新手751436 发表于 2022-10-19 16:35
  
感谢楼主分享,收藏了以后有时间慢慢看。
嘀嘀柠柠 发表于 2022-10-19 16:42
  
楼主的文章图文并茂,清晰易懂,看完这波操作可以轻松上手了,如遇到问题再向楼主请教~
柏敬科 发表于 2022-10-19 17:30
  
果然是高手在民间,楼主帖子写的不错,很有参考价值,还想看更多精彩分享,期待楼主下一篇好帖!
爱疯ion 发表于 2022-10-19 18:12
  
有助于学习!!!!!!!!
新手378833 发表于 2022-10-19 21:00
  

有助于学习!!!!!!!!!
新手626351 发表于 2022-10-19 21:02
  

有助于学习!!!!!!!!!
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
技术咨询
功能体验
新版本体验
产品连连看
GIF动图学习
标准化排查
自助服务平台操作指引
运维工具
2023技术争霸赛专题
通用技术
秒懂零信任
技术晨报
信服课堂视频
用户认证
安装部署配置
深信服技术支持平台
安全攻防
SDP百科
设备维护
社区帮助指南
答题自测
每日一记
玩转零信任
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

ggbang

本周建议达人

adds

本周提问达人