网络安全学习-WEB安全常见漏洞

news/2025/2/26 6:28:02

注入类漏洞

SQL注入漏洞

定义

sql注入漏洞,就是将用户可控的数据拼接到了sql语句当中,一起提交到了数据库执行。

攻*击者通过注入语句,改变sql执行的逻辑,通过控制部分sql语句,攻击者可以查询到数据库钟任何自己需要的数据,利用数据库的一些特性们,可以直接获取数据库服务器的系统权限。

网络安全<a class=学习-WEB安全常见漏洞_数据库" height="148" src="https://i-blog.csdnimg.cn/img_convert/0b228d5e11da2ff8fc60571efd7fdde4.png" width="780" />

漏洞分类
  • Error-based SQL injection 报错型注入
  • Boolean-based blind SQL injection 布尔型注入
  • Time-based blind SQL injection 基于时间延迟注入
提交的参数类型
  • 数字型
  • 字符型
  • 搜索型
示例-报错型

网络安全<a class=学习-WEB安全常见漏洞_数据库_02" height="456" src="https://i-blog.csdnimg.cn/img_convert/1e179e622513170b31403c13ee83e332.png" width="772" />

以上注入,又被叫做万能密码,可以实现一些网站用户登录

实例-bool型

在靶场环境,输入http://localhost:81/sqli/Less-8/?id=1打开该平台,这时会向数据库送人一条查询:

 

SELECT * FROM table_name WHERE id=1

显示如下界面

网络安全<a class=学习-WEB安全常见漏洞_数据_03" height="300" src="https://i-blog.csdnimg.cn/img_convert/df5360e4e8ec65396dd9c83991c01029.png" width="746" />

当攻击者使用嵌入(')的查询,即:

http://localhost:81/sqli/Less-8/?id=1'

网络安全<a class=学习-WEB安全常见漏洞_数据_04" height="220" src="https://i-blog.csdnimg.cn/img_convert/ead4b8e08fe4f8c50d618de9d077986b.png" width="796" />

黄色文本消失,也没有得到任何错误信息,使用其他攻击方式的情况于此相同。

攻击者可以通过盲注来进行验证,该注入查询返回的一定是TRUE或者FALSE。

再次验证是否为布尔型注入,插入判断语句:

http://localhost:81/sqli/Less-9/id=1 AND 1=1 --+

其中 --+在数据库中代表注释的意思

对应的后端数据库查询为:

 

SELECT * FROM table_name WHERE id=1' AND 1=1

获取数据库名等信息

首先确定数据库中字符串长度,简单来说就是获取数据名的长度。

http://localhost:81/sqli/Less-9/id=1' AND (length(database())=1 -+

确定页面没反应,则认为返回的是FALSE,意味着当前数据库名的长度不等于1

尝试判断数据库名的长度为2

http://localhost:81/sqli/Less-9/id=1' AND (length(database())=2 --+

当尝试判断数据库名的长度为8的时候,

http://localhost:81/sqli/Less-9/id=1' AND (length(database())=8 --+

此时页面有变化,显示TRUE.可以判断出数据名为8。通过一些自动化工具,自动化遍历出该信息。

计算机无法理解人类的语言,可以通过ASCII码,将字符集中的每一个符号都对应一个整数,比如字母,数字,标点符号,特殊字符和操作符号。

可以使用ASCII码枚举出这8个字符。

网络安全<a class=学习-WEB安全常见漏洞_数据库_05" height="327" src="https://i-blog.csdnimg.cn/img_convert/adf9d46aeeca6c5348f9646625dd2538.png" width="450" />

下一条查询使用关键字ascii substr检查出当前数据库名中的第一个字符串对应ASCII码是否大于100

http://loaclhost:81/sqli/Less-8/?id=1' AND (ascii(substr((selectdatabase()),1,1))) > 100 --+

网络安全<a class=学习-WEB安全常见漏洞_数据库_06" height="219" src="https://i-blog.csdnimg.cn/img_convert/cf24a32aca8b4533a40a8fd586f7679b.png" width="722" />

可以看出第一个字符串的ASCII的码确实大于100.

同理,可以尝试判断第二个字符的ASCII是多少

http://loaclhost:81/sqli/Less-8/?id=1' AND (ascii(substr((selectdatabase()),2,1))) > 101 --+

按照如上方法,可以得到全部8个字符

网络安全<a class=学习-WEB安全常见漏洞_数据库_07" height="68" src="https://i-blog.csdnimg.cn/img_convert/9124ea6048313f42c7035df8e2d9b683.png" width="559" />

sql注入工具

 sqlmap

 自己开发脚本

sql注入安全方法措施
  • 使用参数化查询

网络安全<a class=学习-WEB安全常见漏洞_sql_08" height="123" src="https://i-blog.csdnimg.cn/img_convert/642b85a3f9200005c33d466b4ed42faf.png" width="525" />

  • 严格限定参数类型和格式,明确参数检验的边界,必须在服务端正式处理之前对提交的数据的合法性进行检查;
  • 验证输入/参数过滤,即黑/白名单验证

XSS-跨站脚本攻击

XSS漏洞,从本质上来说就是将数据注入到了静态脚本代码中,(HTML或者javascript等),当浏览器渲染了整个HTML文档的过程中,

触发了注入的脚本,导致了XSS攻击的发生

网络安全<a class=学习-WEB安全常见漏洞_数据_09" height="145" src="https://i-blog.csdnimg.cn/img_convert/21aa468ef3175fc1e1d238bba2a4c388.png" width="391" />

XSS的危害

客户端

  • 窃取cookie
  • 转发邮件
  • 放置木马
  • 刷流量

服务器端

  • 串改页面
  • 蠕虫
  • 内网扫描
XSS的分类
  • Reflected XSS ,反射型,非持久

代码一般存在于连接中,请求这样的链接的时候,跨站代码经过服务端反射回来,这类跨站代码一般不存储到服务端

  • Stored XSS ,存储型,持久

这时利用起来最方便的跨站类型,跨站代码存储于服务端,比如数据库中

  • DOM based XSS

一种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题。

反射性XSS

过程如下

网络安全<a class=学习-WEB安全常见漏洞_数据_10" height="558" src="https://i-blog.csdnimg.cn/img_convert/252d1a88c05f93ef9ffbc0acc5e11833.png" width="607" />

  1. 用户正常登录
  2. 攻击者把恶意的URL提交给用户
  3. 用户请求恶意攻击者的URL
  4. 服务器对攻击者的JS做出回应
  5. 攻击者的JS在客户端浏览器执行
  6. 用户的浏览器向攻击者发送会话令牌
  7. 攻击者劫持用户会话
利用页面参数调用

网络安全<a class=学习-WEB安全常见漏洞_数据_11" height="473" src="https://i-blog.csdnimg.cn/img_convert/37e94eea1bed59a77881ec2f9c85e07f.png" width="1169" />

使用alert 弹框测试

存储型XSS

网络安全<a class=学习-WEB安全常见漏洞_数据库_12" height="494" src="https://i-blog.csdnimg.cn/img_convert/33122f31936e5e61e4e41d7c5e8484e6.png" width="600" />

  1. 用户正常浏览信息
  2. 通过发帖向服务器发送存在恶意代码的帖子
  3. 用户查看发帖网页,查看帖子内容
  4. 服务器将恶意的代码发送给用户
  5. 用户端浏览器执行恶意代码

存储型XSS可能出现的位置

用户注册类,用户名,注册邮箱,手机号,个人说明,留言评论,发布文章公告

网络安全<a class=学习-WEB安全常见漏洞_数据_13" height="391" src="https://i-blog.csdnimg.cn/img_convert/3960d8d686b462755d6ec64b8ef0c700.png" width="1055" />

基于DOM型XSS

不可控的危险数据,未经过过滤传入存在缺陷的,javascript代码处理,最终春发DOM XSS漏洞

网络安全<a class=学习-WEB安全常见漏洞_数据_14" height="403" src="https://i-blog.csdnimg.cn/img_convert/8893a769b2563da0bcec0116bc2a29a5.png" width="153" />

与前面两种XSS的区别就在于xss代码不需要服务器解析响应的直接参与,触发xss靠的是浏览器端的DOM解析。

通过前端脚本修改页面的DOM节点形成的XSS,代码可见,从前端获取到的DOM中的数据在本地执行,从效果上来说也是反射型XSS

XSS的防范措施

程序开发者:

  • 对用户提交的内容进行合法性校验
  • 对用户提交的内容进行转义处理
  • 对用户输入的长度进行限制
  • 限制Cookie到期时间

网络安全<a class=学习-WEB安全常见漏洞_数据库_15" height="496" src="https://i-blog.csdnimg.cn/img_convert/e22477fc20a6c1e5d8c8090b995b490e.png" width="400" />

跨站脚本伪造CRSF

  • 在用户会话下对某个请求发出GET/POST请求,而请求并非用户自愿发出
  • 网站通过cookie识别用户,当用户在某个网站成功进行身份验证后,浏览器会得到一个标识其身份的COOKIE,只要不关闭浏览器或者退出,以后访问这个网站都会带上这个cookie
  • 如果这期间被人诱骗了请求了这个网站的url,则相当于发出了身份认证请求后,可能会执行一些用户不想做的敏感操作
  • 服务器接受到攻击者伪造的来自浏览器的请求并执行

网络安全<a class=学习-WEB安全常见漏洞_数据_16" height="530" src="https://i-blog.csdnimg.cn/img_convert/bf63961ee10bc7cab5779183fc59617f.png" width="1041" />

缺陷代码举例

A站点

网络安全<a class=学习-WEB安全常见漏洞_数据库_17" height="218" src="https://i-blog.csdnimg.cn/img_convert/1e496a83b34a961de8a4f42eb3d81c76.png" width="1102" />

恶意站点上的代码

网络安全<a class=学习-WEB安全常见漏洞_sql_18" height="233" src="https://i-blog.csdnimg.cn/img_convert/838763bb956694618b7db41bf5a00a8e.png" width="835" />

CSRF和XSS的区别
攻击流程
  • 攻击者发现XSS漏洞--构造代码--发送给受害人--受害人打开--攻击者获取受害人的cookie--完成攻击
  • 攻击者发现CSRF漏洞--狗仔代码--发送给受害人--受害人打开--受害人执行代码--完成攻击

区别
  • XSS容易发现,因为攻击者需要登录后台完成攻击,管理员可以看日志发现攻击者
  • CSRF不同,他的攻击一直是管理员自己实现的,攻击者只负责了构造代码
CSRF防护
  • HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从那个页面链接过来的
  • request.getHeader("REFERER");
  • 通过检查Referer的值,可以判断请求是合法的还是非法的,那么Refere Check可以用于监控CSRF攻击的发生

文件上传漏洞

非法文件长传产生的主要原因就是在服务器端没有对用户上传的文件类型进行校验或者校验不完整,导致用户可以长传恶意脚本到服务器

网络安全<a class=学习-WEB安全常见漏洞_数据库_19" height="482" src="https://i-blog.csdnimg.cn/img_convert/317d83a396602d2d47be22b6017113d6.png" width="1003" />

文件上传绕过

网络安全<a class=学习-WEB安全常见漏洞_sql_20" height="422" src="https://i-blog.csdnimg.cn/img_convert/1ed4df7608af708853cabddd9cc316e5.png" width="893" />

代码实例

网络安全<a class=学习-WEB安全常见漏洞_数据库_21" height="530" src="https://i-blog.csdnimg.cn/img_convert/c6de9e34090832edc9512b862ad62e18.png" width="933" />

可以利用该漏洞上传webshell,病毒以及其他恶意代码能够进行进一步提权,获取数据库信息(拖库)甚至拿到服务器权限

防护

在不影响业务的前提下

  1. 服务器端添加上传文件类型白名单,校验功能,仅允许业务需求类型上传
  2. 服务器端添加上传文件名特殊字符过滤机制,防止特殊字符引起的文件解析漏洞
  3. 服务器端添加上传文件重命名机制,包含文件后缀格式重命名
  4. 服务器端添加上传文件内容识别机制,防止恶意文件伪装成图片等类型文件上传
  5. 服务器端到单独创建上传目录,并限制目录解析权限,杜绝目录解析网页类型文件路径遍历-任意文件下载
路径遍历漏洞原因

服务器端,接受浏览器传来的文件名称,在服务器端拼凑成文件的绝对路径,并且输出流下载

网络安全<a class=学习-WEB安全常见漏洞_sql_22" height="320" src="https://i-blog.csdnimg.cn/img_convert/310ab7b4e0905b2e953601cd51f2f15d.png" width="1129" />

防护

方法1

  1. 要下载的文件地址保存到数据库中
  2. 文件ID使用随机数命名
  3. 文件路径保存到数据库,用户提交文件对应ID下载文件
  4. 下载文件之前做权限的判断
  5. 记录文件下载日志

方法2:

针对文件的访问,直接给出文件路径的链接,如:

 

<a href ="http://xx.xx.xx.xx//upload/file1.jgp">

失效的身份认证和会话劫持
  1. 用户身份验证凭证没有使用哈希或者加密保护
  2. 认证凭证可以猜测
  3. Sessionid暴露在URL
  4. Sessionid没有超时限制
  5. 密码,会话ID和其他认证凭据使用未加密传输

越权
垂直越权漏洞

也叫权限提升漏洞,由于WEB应用程序没有做权限控制或者仅仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或者控制其他角色拥有的数据或者页面,达到权限提升的目的

水平越权漏洞

WEB用用程序接收到用户请求,修改某条数据的时候,没有判断数据的所属人,或者判断数据所属人的时候,从用户提交的REQUEST参数(用户可以控制数据)中,获取了数据所属人的ID,导致恶意攻击者可以通过变换数据ID,或者更换所属人id,导致恶意攻击者可以通过变换数据ID,或者变换所属人id,修改不属于自己的数据,恶意用户可以栓除或者修改其他人的数据。

远程命令执行漏洞

strust2远程命令执行

攻击者通过构造特定数带入OGNL表达式即可能被解析并且执行,而OGNL可以用来获取和设置java对象的属性,同时也可以对服务器端对象进行修改,所以只要绕开strust2的一些安全策略,攻击者甚至可以执行系统命令进行系统攻击

在strust2中,DefaultActionMapper类支持以action,redirect:.redirectAction作为导航或者是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于strust2中没有对这些前缀进行过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

java反序列化漏洞
  • 序列化 ObjectOutputStream类-->writeObject()

该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中,按照java的标准约定是给文件一个.ser扩展名

  • 反序列化ObjectOutputStream类-->readObject()

该方法从一个源输入流中读取字节序列,再把他们反序列化为一个对象,并将其返回.

如果java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行.

网络安全学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

需要网络安全学习路线和视频教程的可以在评论区留言哦~

最后

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失


http://www.niftyadmin.cn/n/5868205.html

相关文章

【Uniapp-Vue3】导入uni-id用户体系

在uniapp官网的uniCloud中下载uni-id用户体系 或者直接进入加载&#xff0c;下载地址&#xff1a;uni-id-pages - DCloud 插件市场 进入以后下载插件&#xff0c;打开HbuilderX 选中项目&#xff0c;点击确定 点击跳过 点击合并 右键uniCloud文件夹下的database文件夹&#x…

React进阶之React核心源码解析(三)

React核心源码解析 diff多节点比较diff两轮遍历比较第一轮比较第二轮比较Update 状态更新Concurrent Modediff 多节点比较diff isArray方法比较 节点更新// 更新前 <ul><li key="0" className="before">0<li><li key=

【二值图像与手动/自动阈值的详解】

二值图像与手动/自动阈值的详解 目录 二值图像与手动/自动阈值的详解一. 什么是二值图像&#xff1f;二. 二值图像的特点三. 二值图像的生成四.二值图像中的阈值作用及使用方法1. 阈值的概念2. 阈值的作用3. 阈值的类型4. 阈值的选择方法4. 阈值的使用方法5. 阈值的选择对结果的…

在股市交易的强化学习中寻找最佳交易历史

“Finding Optimal Trading History in Reinforcement Learning for Stock Market Trading” 论文地址&#xff1a;https://arxiv.org/pdf/2502.12537 摘要 本文探讨了在金融深度强化学习模型中优化时间窗口的方法&#xff0c;并采用了二维卷积神经网络&#xff08;CNN&#x…

MATLAB学习之旅:图像处理与计算机视觉应用

在前面的学习中&#xff0c;我们已经深入了解了MATLAB在数据建模与仿真方面的强大功能。从基础的数据处理到复杂的模型构建与仿真分析&#xff0c;MATLAB为我们提供了丰富的工具和函数&#xff0c;帮助我们解决各种实际问题。如今&#xff0c;我们将迈向下一个充满挑战与创新的…

MediaToolkit:.NET 开发者的多媒体处理工具

在开发过程中处理音频和视频文件是许多应用程序的重要功能。MediaToolkit 是一个强大的库&#xff0c;帮助轻松处理这些多媒体文件。封装了 FFmpeg 的功能&#xff0c;使得复杂的任务变得简单。支持更多功能&#xff0c;如视频裁剪、缩略图提取和转码等。 安装 第一步&#x…

图像处理、数据挖掘、数据呈现

目录 图像处理方法 阈值分割 图像处理方法 图像平滑 图像锐化 图像增强 阈值分割 边缘检测 阈值分割 特征提取 提取边界 区域提取 主成分压缩 POI 多源数据 数据挖掘 多源数据提取 关联度提取 位置集群&#xff0c; 新闻事件&#xff0c; 权限 个人喜好 历史…

Webpack打包过程中如何处理ES6模块的循环依赖?

在 Webpack 打包过程中&#xff0c;ES6 模块的循环依赖问题是一个常见的挑战。循环依赖指的是两个或多个模块相互引用&#xff0c;从而形成一个闭环。在处理循环依赖时&#xff0c;Webpack 采取了一些策略来确保模块能够正确加载。 1. 循环依赖的概念 假设有两个模块 A 和 B&…