博文

目前显示的是 一月, 2020的博文

CISCN2019 Dropbox Writeup

图片
0x00关于本文 感谢@glzjn大佬提供的buuoj复现环境! 0x01漏洞突破口 LFI  在注册登陆简单测试之后可以轻易地发现download.php的LFI漏洞  后退两个目录即可获取源码(怎么知道是后退两个目录?多试试就知道了),我们发现download.php有这一行 if  ( strlen ( $filename ) <  40  &&  $file -> open ( $filename ) &&  stristr ( $filename ,  "flag" ) ===  false ) { 看来很不幸,没法直接读flag 但是好在这个漏洞可以把题目中的所有源码都下载下来,方便我们审计 0x01 反序列化漏洞发现 看到download.php代码中存在这一行 include   "class.php" ; 一般来说像CTF题目这种超级超级小规模的项目是不会需要真正用到OOP来开发的,除非....想要用到相关的漏洞,比如反序列化 哪里有反序列化点呢?就藏在文件操作中。(相关阅读 利用 phar 拓展 php 反序列化漏洞攻击面 ) 在download.php中存在如下代码(事实证明download.php并不能正常利用,在之后我会讲) $file  =  new   File (); ... $filename  = ( string )  $_POST [ 'filename' ]; ... $file -> open ( $filename ) 跟到File类里面的open函数中,这个$filename被直接带入 file_exists ( $filename ) 这样大黑客们就可以利用phar://伪协议用反序列化搞事情,好了我们开始审计代码! 0x02 POP Chain构造 我们现在需要构造POP Chain来RCE或者文件读取,要审计反序列化,我们第一步是需要找到起点,那就是__destruct或__wakeup函数,不过这道题目里面没有__wakeup函数,只有两个__destruct函数。

ThinkPHP v5.0.x反序列化 Pop Chain复现(附POC)

图片
0x00关于本文 本文内容是针对 ThinkPHP v5.0. fx 反序列化利用链挖掘 的复现。 本文会从一 个只会反序列化基础知识的小白的视角一步一步复现这个利用链,在阅读本文的时候需要具备一定反序列化的基础,同时配合 ThinkPHP v5.0.x 反序列化利用链挖掘 阅读。 在复现的过程中由于原文写的过于模糊,有一部分利用链不太一样但是开头结尾是一样的。 同时很不幸,该利用链不能在Windows上利用(待会我会说原因的),期待各位大佬找到一条通用的pop chain 0x01环境搭建 首先需要有个ThinkPHP V5.0.24的环境,这个过程就略过去了,接着再在application/index/controller/Index.php写下如下代码 <?php namespace   app\index\controller ; class   Index {      public   function   index ()     {          echo   "Welcome thinkphp 5.0.24" ;          unserialize ( base64_decode ( $_POST [ 'payload' ]));     } } 为什么我要选择使用base64_decode的办法传递Payload呢,那是因为在序列化字符串中往往有一些不可见字符,复制的话会漏掉,索性base64 0x02万事开头难--第一个类的反序列化及为什么要命名空间(namespace)以及extents 想要搞反序列化必然是需要一个起点的,原文使用了Windows类来开始 那首先我们需要一个Windows类 于是构建代码如下 <?php namespace   think\process\pipes ; class   Windows { } $x = new   Windows (); echo   serialize ( $x ); echo   "<p>" ; echo   base64_encode ( serialize ( $x

【0day】不一样的密码重置漏洞(以U█P教务系统为例)

图片
0x00 概述 在阅读了 Host-Header欺骗在密码找回中的利用 之后,我很受启发,拿着 ██ 大学的教务系统做了测试,发现了同类型漏洞存在,并且改进了漏洞利用方式使其具有更高的杀伤性。 由于 ██ 大学直接选择的是著名的U█P系统作为教务系统,因此这是个通用型的漏洞,理论上通杀各类U█P系统。 但对于该漏洞的利用需要受害者的交互还会在邮箱中留下记录,出了事一查一个准,因此妄想通过该漏洞拿到老师账号改成绩是不现实的。 0x01 背景:HOST头不可信 在编写WEB应用的时候,程序员往往不会直接把网站的host硬编码到代码中,而是通过动态手段获取(如$_SERVER['HTTP_HOST'])。 但是问题在于这个HOST并不是WEB应用自己带的,而是用户提供的!下面举个小例子来证明这一点。 看看以下代码 <?php var_dump ( $_SERVER [ 'HTTP_HOST' ]); ? > 我们可以直接访问来测试它 获取如下结果 再用localhost.fbi.gov来访问(localhost.fbi.gov指向了127.0.0.1) 获取到的HOST就变成了localhost.fbi.gov 我们可以看到,这个HTTP_HOST是从用户提交的HOST头中获取的,因此是不可信的 所以,攻击者可以通过污染HOST头让服务器做出一些设计者意想不到的事情。 0x02 漏洞发现 首先我们注意到,██大学教务系统在使用IP或者域名访问来请求重置密码的时候,链接的HOST不一样 这是用IP访问的时候 这是用域名访问的时候 我们可以猜测,这个链接的开头是由HOST头动态拼接的,因此或许可以利用这一点来实现攻击,但是在我初次尝试的时候遇到了一点挫折 服务器拒绝了我提供的HOST头,直白的host deny不留一丝情面 但是只需要略施小计就会发现只要我们提供的HOST头里面包含了合法的HOST就能够通过它的认证 现在我们可以通过替换这个HOST头实施攻击了 首先在BurpSuite中做出如下替换 接着再申请找回密码,密码重置邮件就变成这样了 可