信息安全实训第五天ctf竞赛 WriteUp

实训目的

了解CTF竞赛的规则及流程。

了解Web渗透的相关概念和所含范畴。

掌握SQL注入的基本方法。

掌握XSS攻击的基本方法。

掌握文件上传的基本方法。

实训背景知识

SQL注入

SQL注入(SQL Injection)是一种代码注入技术,攻击者通过在应用程序的输入字段中插入(或“注入”)恶意的SQL代码,从而欺骗应用程序的后端数据库服务器执行非授权的任意SQL命令。如果应用程序没有正确地验证和过滤用户输入,攻击者就可以利用这个漏洞来读取、修改或删除数据库中的数据,甚至可能执行更高级别的攻击,如权限提升、数据窃取等。SQL注入的危害非常严重,可能导致数据泄露、系统被篡改或完全被破坏。因此,防范SQL注入是Web应用程序安全的重要一环。

防范SQL注入的基本策略:

1.使用参数化查询或预处理语句:这是防范SQL注入的最佳方法。通过这种方法,用户输入被视为数据而非代码,从而避免了恶意SQL代码的注入。

2.输入验证和过滤:对用户输入进行严格的验证和过滤,确保输入符合预期的格式和类型。例如,如果期望的输入是数字,那么应该拒绝任何非数字字符。

3.错误处理:不要向用户显示详细的数据库错误信息。这可以防止攻击者利用错误信息来猜测数据库的结构和内容。

4.最小权限原则:数据库连接应该使用具有最小必要权限的账户。这样,即使攻击者成功注入了SQL代码,他们也只能执行该账户有权执行的操作。

5.Web应用程序防火墙(WAF):使用WAF可以帮助识别和阻止SQL注入攻击。WAF可以监控和分析传入的HTTP请求,并检测可能的恶意模式。

6.更新和修补:保持Web应用程序、数据库管理系统和所有相关组件的更新状态。

文件上传

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是非常直接和有效的,因为“文件上传”本身通常没有问题,问题在于文件上传后,服务器如何处理、解释这些文件。如果服务器的处理逻辑存在安全漏洞,就可能导致严重的后果。

文件上传漏洞的危害包括:上传的文件如果是web脚本语言,服务器的web容器可能会解释并执行这些脚本,导致代码执行。攻击者还能将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块。攻击者还可能上传一个合法的文本文件,其内容包含恶意脚本,再通过“本地文件包含漏洞”执行此脚本。

要利用文件上传漏洞,需要满足以下条件:

上传的文件能够被web容器解释执行,即文件上传后所在的目录应该是web容器所覆盖到的路径。

用户能够从web访问这个文件。如果文件上传了,但用户无法通过web访问,或者web容器无法解释这个脚本,那么也不能称之为漏洞。

用户上传的文件没有被安全检查、格式化、图片压缩等功能改变内容,否则可能导致攻击不成功。

为了防止文件上传漏洞,可以采取以下措施:

1.在判断文件类型时,结合使用MIME Type、后缀检查等方式,并推荐使用白名单方式。

2.使用随机数改写文件名和文件路径,以增加攻击的成本。

3.单独设置文件服务器的域名,由于浏览器同源策略的关系,这可以解决一系列客户端攻击。

文件包含

文件包含是程序开发中的一项常用技术,它允许开发者将重复使用的函数或代码片段写入单个文件中,然后在需要的地方直接引用这个文件,而不是重复编写相同的代码。这种方式可以极大地提高代码的可维护性和重用性。

然而,文件包含也可能导致安全漏洞。当开发者希望代码更灵活,将被包含的文件设置为变量,通过动态变量来引入需要包含的文件时,如果服务器端未对变量值进行合理地校验或者校验被绕过,就可能导致文件包含漏洞。攻击者可以通过构造特定的输入,来控制被包含的文件名称,从而引入恶意文件或敏感文件(如数据库配置文件、服务器etc/passwd文件等),导致敏感信息泄露或执行恶意代码。

在PHP中,常见的引发文件包含漏洞的函数有include()、require()、include_once()和require_once()。当使用这些函数时,如果传入的文件名没有经过合理的校验,就可能操作预想之外的文件,导致文件泄露或代码注入。

为了防止文件包含漏洞,可以采取以下措施:

过滤用户输入:在后台将要包含的文件直接写死,或者在用户输入的情况下做好检查,使用白名单的方式对用户的输入进行限制。

调整PHP参数配置:可以考虑将PHP配置文件中的allow_url_fopen和allow_url_include两个参数设置为Off,以增强系统的安全性。

实训任务1 白云新闻搜索

中国又出现了一个搜索巨头!据报道,中国网络大亨小明近日编写了一个搜索引擎,叫白云新闻搜索,具体链接在下方,该搜索链接功能欠打,界面乏力,小明出一包辣条悬赏漏洞,豪言入侵高手都去试试,你服不服?不服就去试试呗~(答案为flag{}形式,提交{}内内容即可)

步骤1:过滤的方式是什么?如何破解?

步骤2:破解后尝试进行SQL注入

步骤3:构造截断型(--)永真句(or 1=1或or 1)确认是否为字符串拼接型查询

步骤4:确认后构造union联合查询设法获得各个表名

步骤5:根据表名查询表字段名

步骤6:根据表字段查询表数据

步骤7:flag在其中一张表中

提示1:UNION 内部的 SELECT 语句必须拥有相同数量的列。对应列必须拥有相似的数据类型。

提示2:

INFORMATION_SCHEMA:是MySQL自带数据库,看作信息数据库,并且只读。

INFORMATION_SCHEMA.TABLES:提供了关于数据库中的表的信息,属于那个数据库实例(TABLE_SCHEMA)。

INFORMATION_SCHEMA.COLUMNS:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。

1、TABLE_SCHEMA:数据库实例名称;

2、TABLE_NAME:数据存放对象表名称;

3、TABLE_TYPE:数据存放对象类型(表或视图);

4、TABLE_ROWS:数据量;

5、COLUMN_NAME:字段名称

6、COLUMN_COMMENT:字段注释

7、COLUMN_TYPE:字段类型

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值