【Web安全】注入攻击

news2024/9/29 7:28:13

目录

前言

1、注入攻击

1.1 SQL注入

1.2  数据库攻击技巧

1.2.1 常见的攻击技巧

1.2.2 命令执行

1.2.3 攻击存储过程

1.2.4 编码问题

1.2.5 SQL Column Truncation

1.3 正确防御SQL注入

1.4 其他注入攻击

1.4.1 XML注入

 1.4.2 代码注入

1.4.3 CRLF注入


前言

年底了……期末了……实验一堆一堆的来,我的csdn-flag不得不倒了,所以近期没有之前更新的勤了,为我失去的3个粉感到抱歉哈哈哈QWQ。希望在熬过这个学期期末之后,能够重返之前的学习热情,保持良好的学习习惯,明年咱们搞事业!!!

1、注入攻击

注入攻击的本质,是把用户输入的数据当成代码执行。这里有两个关键条件:

  • 用户能够控制输入
  • 原本程序要执行的代码,拼接了用户输入的数据

1.1 SQL注入

SQL注入应该都耳熟能详了,可以分为根据报错注入、堆叠注入、二次注入、宽字节注入和盲注(布尔盲注、时间盲注、dnslog注入)……这里就不再进行详细讲解。

【每天学习一点新知识】跟咩咩一起学“宽字节注入”_RexHarrr的博客-CSDN博客
DVWA之SQL注入_RexHarrr的博客-CSDN博客

DVWA 之 SQL Injection Blind(SQL盲注)_RexHarrr的博客-CSDN博客

1.2  数据库攻击技巧

SQL注入是基于数据库的一种攻击。不同数据库有着不同的功能、不同的语法和函数,因此针对不同的数据库,SQL注入的技巧也不同。

1.2.1 常见的攻击技巧

SQL注入可以猜解数据库的对应版本,如下面这个payload,如果mysql的版本是4,则会返回True

http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4

可以利用union select来确认表名admin、列名passwd是否存在

id=5 union all select 1,2,3 from admin
id=5 union all select 1,2,passwd from admin

同理可猜解出具体值,但比较繁琐。sqlmap就是个很好的自动化工具。

【每天学习一点新知识】sqlmap的使用_RexHarrr的博客-CSDN博客_sqlmap 刷新session

在注入攻击的过程中,常常会用到一些读写文件的技巧。如在MySQL中,就可以通过LOAD_FILE()读取系统文件,并通过INTO DUMPFILE写入本地文件。(要求当前数据库用户有读写权限)

当然除了INTO DUMPFILE之外,也可以使用INTO OUTFILE,前者适用于二进制文件,它会将目标文件写入同一行内,后者更适用于文本文件。

写入文件的技巧,经常被用于导出一个webshell,为攻击者的进一步攻击做铺垫,因此在设计数据库安全方案时,可以禁止普通数据库用户具备操作文件的权限。

1.2.2 命令执行

在MySQL中,除了可以通过导出webshell间接执行命令外,还可以利用用户自定义函数,即UDF来执行命令。

在流行的数据库中,一般都支持从本地文件系统中导入一个共享库文件作为自定义函数。使用如下语法可以创建UDF

CREATE FUNCTION f_name RETURNS INTEGER SONAME shared_library

在创建UDF之后,可以使用sys_eval()等函数执行系统命令

  • sys_eval:执行任意命令,并将输出返回
  • sys_exec:执行任意命令,并将退出码返回
  • sys_get:获取一个环境变量
  • sys_set:创建或修改一个环境变量

一般来说,在数据库中执行系统命令,要求具有较高权限。在建立数据库账户时应该遵循“最小权限原则”,尽量避免给Web应用使用数据库的管理员权限。

1.2.3 攻击存储过程

存储过程为数据库提供了强大的功能 ,它和UDF很像,但存储过程必须使用CALL或EXECUTE来执行。

例如在SQL server中

EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
EXEC master.dbo.xp_cmdshell 'ping '

除了xp_cmdshell之外,还有一些其他的存储过程对攻击过程很有帮助。

可以操作注册表的存储过程有:

  • xp_regaddmultistring
  • xp_regdeletekey
  • xp_regdeletevalue
  • xp_regenumkeys
  • xp_regenumvalues
  • xp_regread
  • xp_regremovemultistring
  • xp_regwrite

此外,以下存储过程对攻击者也很有用

xp_availablemedia:显示机器上有用的驱动器

xp_servicecontrol:允许用户启动、停止服务

xp_dirtree:允许获得一个目录树

xp_enumdsn:列举服务器上的ODBC数据源

xp_loginconfig:获取服务器安全信息

xp_makecab:允许用户在服务器上创建一个压缩文件

……

除了利用存储过程直接攻击外,存储过程本身 也可能会存在注入漏洞。若外部传入的变量未经过任何处理,将直接造成SQL注入问题。

1.2.4 编码问题

典型就是宽字节注入

 【每天学习一点新知识】跟咩咩一起学“宽字节注入”_RexHarrr的博客-CSDN博客

1.2.5 SQL Column Truncation

在MySQL的配置选项中,有一个sql_mode选项。当设置为default时,即没有开启STRICT_ALL_TABLES选项时,MySQL对于用户插入的超长值只会提示warning,而不是error,这可能会导致发生一些截断问题。

1.3 正确防御SQL注入

  • 使用预编译语句,绑定变量
  • 使用安全的存储过程来对抗SQL注入
  • 检查输入数据的数据类型
  • 使用安全函数

1.4 其他注入攻击

1.4.1 XML注入

XML是一种常用的标记语言,通过标签对数据进行结构化表示。其注入方法和HTML注入类似。

如下段代码会产生一个XML文件

如果用户输入

 

则最终生成的XML文件里会被插入一条数据

 1.4.2 代码注入

 由于不安全函数或方法引起的,典型代表为eval(),如:

$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

攻击者可以构造如下payload:

/index.php?arg=1;phpinfo()

有时候代码注入可以造成命令注入,如

<?php
$varerror = system('cat '.$_GET['pageid'],$valoretorno);
echo $varerror;
?>

攻击者可以利用system()函数执行他想要的系统命令

vulnerable.php?pageid=loquesea;ls

对抗代码注入、命令注入,需要禁用eval()、system()等可以执行命令的函数,如果一定要用,则需要对用户的输入进行处理。此外,在PHP/JSP中避免使用动态include远程文件,或者是安全地处理它。

1.4.3 CRLF注入

CRLF实际上是两个字符:CR是Carriage Return(ASCII 13,\r),LF是Line Feed(ASCII 10,\n)。\r\n这两个字符用于换行,其十六进制分别为0x0d、0x0a.

CRLF常被用于不用语义直接的分隔符,所以通过注入CRLF字符很可能改变原有语义。

CRLF不仅能用于log注入(日志信息),凡是用CRLF作为分隔符的地方都可能存在这种注入,如注入HTTP头。在HTTP中,HTTP头是用\r\n来分隔的,如果服务器没有过滤\r\n,又把用户输入的数据放在HTTP头中,则很可能导致安全隐患。这种在HTTP头中的CRLF注入,又称“Http Response Splitting”(两次\r\n意味着HTTP头的结束,内容会被插入到HTTP Body中执行)

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

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

相关文章

Kotlin高仿微信-第53篇-添加好友

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

数商云SRM系统询比价有何优势?供应商平台助力汽车零部件企业快速查找供应商

随着中国汽车行业的高速发展、汽车保有量的增加以及汽车零部件市场的扩大&#xff0c;我国汽车零部件行业得到了迅速发展&#xff0c;增长速度整体高于我国整车行业。数据显示&#xff0c;我国汽车零部件的销售收入从2016年3.46万亿元增长至2020年的4.57万亿元&#xff0c;年均…

世界杯——手动为梅西标名

梅西的铁粉来集赞啦。 今天带来了一个为图片添加字样的小功能&#xff0c;我们的测试目标图片是&#xff1a; 我们的测试目标是&#xff1a; 我们使用的是Python语言&#xff0c;使用了Image包用作图片处理&#xff0c;matplotlib包用作坐标查阅&#xff0c;这个坐标还是很好看…

微服务框架 SpringCloud微服务架构 8 Gateway 网关 8.5 全局过滤器

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构8 Gateway 网关8.5 全局过滤器8.5.1 全局过滤器 GlobalFilter8.5.2 案例8.…

segmentation

(用于医学图像分割的金字塔医学transformer) Pyramid Medical Transformer for Medical Image Segmentation 基于CNN的模型通过低效地堆叠卷积层来捕获长期依赖性&#xff0c;但基于注意力的模型明确地构建了所有范围的关系。然而&#xff0c;为全局关系分配可学习参数是昂贵…

WebAPI项目搭建及其发布测试

目录 1.创建项目 2.配置 3.发布 4.测试页面 1.创建项目 &#xff08;1&#xff09;创建ASP.NET Web应用程式&#xff0c;如下图&#xff1a; &#xff08;2&#xff09;选择Empty,勾选Web API&#xff0c;点击确定创建&#xff0c;如下图&#xff1a; &#xff08;3&#x…

解决Netty那些事儿之Reactor在Netty中的实现(创建篇)-上

本系列Netty源码解析文章基于 4.1.56.Final版本 在上篇文章深入讲解Netty那些事儿之从内核角度看IO模型中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以及ReactorIO线程模型的底层基石IO多路复用技术在内核中的实现原理。 最后我们引出了netty中使用的主从…

代码随想录刷题day52 300.最长递增子序列;674. 最长连续递增序列;718. 最长重复子数组

代码随想录刷题day52 300.最长递增子序列&#xff1b;674. 最长连续递增序列&#xff1b;718. 最长重复子数组 二维dp的初次应用&#xff0c;关于子序列的一系列问题。 300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;Leetcode&#xff09; 子序列的一个入门题…

java中set接口、哈希表、哈希值、HashSet、LinkedHashSet、方法的可变参数

set接口&#xff1a; set接口和list接口一样&#xff0c;都是继承于Collection接口&#xff0c;它与Collection接口中的方法基本一致。特点&#xff1a;不允许存储重复元素&#xff0c;元素没有索引。它主要有两个实现类&#xff1a;HashSet&#xff08;具有哈希表结构&#x…

微服务框架 SpringCloud微服务架构 9 初识 Docker 9.2 Docker 与虚拟机的差别

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构9 初识 Docker9.2 Docker 与虚拟机的差别9.2.1 Docker 与虚拟机9.2.2 总结…

基于Android的二维码识别系统的研究与实现(eclipse开发)

目 录 1 Android系统开发背景与意义 1 1.1 Android系统平台的出现 1 1.2 Android系统的发展 1 1.3 Android系统架构的介绍 1 1.4 Android开放系统 3 1.5 Android系统的特点 3 2 二维码识别系统背景介绍 3 2.1 二维码识别系统背景 3 2.1.1 二维码技术产生的背景 3 2.1.2 二维码分…

图像压缩原理-JPEG

搬来一个基础啊 给自己看~~ 非技术指正勿扰 图像的格式有很多种&#xff0c;比如PNG&#xff0c;JPEG等等&#xff0c;但当我们把一张图用工具变成各种其他格式时&#xff0c;其在计算机文件系统显示的文件大小各不一样&#xff0c;但是当你打开显示时&#xff0c;从视觉角度…

Android进阶之路 - Json解析异常

在App与H5交互时&#xff0c;有一个调原生分享的需求&#xff0c;交互方面没有问题&#xff0c;因为分享需要多值&#xff0c;所以采用json进行传递&#xff0c;在app接收进行解析时遇到了这个解析异常 Value &#xfeff; of type java.lang.String cannot be converted to JS…

【操作系统一】图解TCP/IP模型+实战

【操作系统一】OSI模型和TCP/IP模型一、OSI模型1、什么是OSI模型2、osi七层参考模型3、我更想介绍TCP/IP模型二、TCP/IP模型1、TCP/IP模型起源2、TCP/IP模型是五层还是四层&#xff1f;3、两层TCP/IP模型4、传输层&#xff08;也叫传输控制层&#xff09;4.1 TCP4.3、三次握手4…

【算法面试题汇总】LeetBook列表的算法面试题汇总---动态规划题目及答案

整理不易留个小心心呗&#x1f970; 如果有更好的或者是我有错的地方还请各位大佬指出哦 有些是copy的还望不要介意 动态规划至少有k个重复字符的最长子串二叉树中的最大路径和最长连续序列打家劫舍完全平方数最长上升子序列*零钱兑换矩阵中的最长递增路径至少有k个重复字符的最…

java计算机毕业设计ssm民宿管理系统设计7lky4(附源码、数据库)

java计算机毕业设计ssm民宿管理系统设计7lky4&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Linux服务器上Neo4j的安装、迁移

目录 1、环境 2、下载 3、修改配置 4、启动及其他命令 5、客户端访问&#xff1a; 6、数据迁移 1、环境 Neo4j是基于Java的图形数据库&#xff0c;运行Neo4j需要启动JVM进程&#xff0c;因此必须安装JAVA SE的JDK。 neo4j版本&#xff1a;neo4j-community-3.5.6 2、下…

使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda

使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务&#xff0c;让学生可以在 100 USD的金额下&#xff0c;自行练习所要使用的 AWS 服务&#xff0c;如何进入 Learner Lab 请参考 使用 Learner Lab …

第十三章 DFS与BFS(保姆级教学!!超级详细的图示!!)

第十三章 DFS与BFS一、深度优先搜索1、什么是DFS&#xff1f;2、DFS代码模板&#xff08;1&#xff09;问题&#xff1a;&#xff08;2&#xff09;分析&#xff1a;&#xff08;3&#xff09;模板&#xff1a;3、DFS代码分析二、广度优先搜索1、什么是BFS&#xff1f;2、BFS代…

就是把一个数组中相同类别数据,组成新的数组

效果图如上&#xff0c;就是把一个数组中相同类别数据&#xff0c;组成新的数组&#xff0c;每个数组最后加一个空对象&#xff0c;对象对应的格式要做些许改变 分店 品牌 业绩(元) 订单个数 单值(元) {{item.shopname}} {{item.shopname}} {{item.shopname}} {{item.shopname}…