前置知识点

这里你需要学习的有几个前置知识点:
1、nmap的参数意义。
nmap的扫描参数是很重要的,可以略微学习一下。

1
2
3
4
常用几种(me)
-sV:服务版本检测。
-sP:Ping扫描,用于探测存活主机。
-sS:TCP SYN扫描,快速扫描常用端口。

学习链接:
https://zhuanlan.zhihu.com/p/585377081
https://blog.csdn.net/weixin_41489908/article/details/132202381
2、请确认你的靶机情况:若你是自己开虚拟机自己打,请把两台虚拟机的网络设置改成:"仅主机模式";若是一个团队一起学习:请改为桥接
简而言之就是仅主机模式就是虚拟机仅与真实机连接(不能联网,只能Ping通虚拟机);桥接是与这整个局域网(路由器)连接。
关于虚拟机的几种网络设置的学习链接:https://blog.csdn.net/Edward1027/article/details/124785835

你确定你掌握了吗,那就开始吧。

扫描主机ip|判断靶机ip|探针开放端口

开启靶机,看到一个登录界面(?)。

这算是一个比较真实的实战环境,就是开局啥也不给,全靠自己找。那么我们就可以开启kali,一顿乱扫先。
这里我两种方法都试了一下,由于-sP参数是仅扫主机,-sS参数(端口)可以直接判断哪台主机是靶机ip(192.168.146.129)。
sP参数判断存活主机

sS参数扫描每个主机上的端口服务

且已知开放端口:

1
2
3
4
5
6
7
21/tcp   open  ftp
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
445/tcp open microsoft-ds
2049/tcp open nfs
2121/tcp open ccproxy-ftp

扫描靶机端口|判断每个端口下的服务

既然知道了靶机的ip,那么开始扫描端口。

1
2
3
4
扫描「指定端口」,使用 -p 参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口
nmap 192.168.31.180 -p 80
nmap 192.168.31.180 -p 80,3389,22,21
nmap 192.168.31.180 -p 1-65535

这里其实用上面扫描主机时-sS参数即可,只是记录下思路。

针对每个端口开始测试

温馨ps:针对上面两个操作,nmap -sS -sV -A -n -p- ip(一步到位)
进入正题。

80端口

首先,经过端口扫描后发现开启了7个端口,分别是:21 22 80 111 445 2049 2121 开启了这些服务http,ftp,smb,ssh。先访问一下80端口得网页看看。
这里有个小插曲:我竟然进不去!(小闹剧,靶机不用时还是关机的好qwq)
引出一个习惯:扫描后一定要先ping一下看ping不ping得通。
好了,再次进入正题,进入80端口。
发现是一个简易的小网页,没有什么特别的。

有一个超链接点一下只是重定向到一个毫不相干的网页,不予理睬。

目录扫描

网页目录扫描:使用web工具扫描:nikto,dirb,dirbuster
这里提供以上三个目录扫描工具的学习链接:
dirb:https://blog.csdn.net/qq_38612882/article/details/122648462
dirbuster:https://blog.csdn.net/weixin_41489908/article/details/115434107
nikto:https://www.cnblogs.com/opama/p/4928657.html


这里发现了一个readme.txt文件,对这个文件进行访问。
发现一个密码,暂时不知道是用来登陆什么的。(可能是ssh或ftp服务的密码)

尝试FTP匿名登录(21端口)

首先知道:anonymous是匿名用户。
匿名登陆成功。

那我们操作一下,看一下有什么敏感文件。

如上图,发现不了什么敏感文件,接下来换ssh。

ssh服务(22端口)

首先ssh连接的语句:

1
ssh smbuser@ip

发现无权限进行操作。(需要公私钥(密钥对)才可进行连接)

SMB共享服务(445端口)

由于445端口开启的是SMB共享服务,那么可以有以下思路:
使用smbmap对smb信息枚举
SMBMap允许用户枚举整个域中的samba共享驱动器。用户可以使用该工具列出共享驱动器、驱动器权限、共享内容、上传/下载功能、文件名自动下载模式匹配,甚至远程执行命令。该工具原本的设计初衷是为了简化在大型网络中搜索潜在敏感数据的过程。

1
smbmap -H 192.168.146.129

发现共享文件夹sbmdata有读写权限。

使用smbclient来连接这个文件夹试一试(交互式登录),密码还是尝试刚才获取到的,成功连接。

get secure后,在文件夹查看,发现一个用户名密码(这个用户名是用来登录ftp的重要key)。

开干

那其实这里其实有思路了,就是通过smbdata的可写操作伪造私钥,实现ssh登录从而getshell。

查看ssh配置文件

登录ftp查看ssh配置文件(由于前面是匿名用户所以看不到配置文件)。
经过尝试用户名为smbuser,密码为rootroot1,登陆后get ssh配置文件。

在kali文件夹查看ssh配置文件,发现用户密钥文件存放路径为~/.ssh/authorized_keys。

伪造公钥私钥并且上传

别急着关闭ftp服务,然后在smbuser用户下创建一个ssh目录,用于伪造公钥和私钥创建连接。

1
mkdir ~/.ssh

新打开一个shell窗口,创建公钥和私钥

1
ssh-keygen -t rsa


然后上传公钥到.ssh/authorized_keys目录下

1
put /root/.ssh/id_rsa.pub ~/.ssh/authorized_keys

脏牛提权

这时尝试使用ssh连接,成功登陆上,但是权限太低了,查看内核版本号发现可以使用脏牛提权。

接下来就进行脏牛提权
新开一个shell,键入

1
2
searchsploit dirty    #搜索漏洞库
searchsploit -m 40616.c #下载到本地

继续开启ftp服务,上传脏牛文件到靶机。

然后使用ssh连接,gcc编译提权。

1
2
gcc -ptheard dirty.c -o dirty -lcrypt #gcc编译
./dirty 123456 #运行

成功提权,成为root。

获取flag

最后便可以开心的获取flag啦!

总结|一些觉得有用的klg

1、这是我第一次打这种靶机,学习到了不少知识点,这种需要依靠你一步一步扫描探索的靶机是会比打那些ctf更全面一点点的。
2、主要渗透思路:扫描主机、扫描端口、扫描目录、根据端口进行测试。
3、匿名用户是anonymous。
以下知识点from:https://www.cnblogs.com/dg05/p/17805595.html
4、searchsploit
searchsploit是集成在kali中的命令。kali中有一个本地漏洞库,可以searchsploit命令进行漏洞查询,查询成功后可以看到对应的exp
searchsploit的简单使用:
查找linux内核版本3.1的漏洞:searchsploit linux kernel 3.1
配合grep查找内核3.1的提权漏洞:searchsploit linux kernel 3.1 | grep ‘Privilge Escalation’
假如exp为40616.c,将其拷贝到当前目录:earchsploit -m 40616 
5、ssh-keygen
ssh-keygen是生成公私钥的工具,默认保存在~/.ssh中,私钥为id_rsa,公钥为id_rsa.pub
参数:
-t,指定生成密钥类型(rsa,dsa),默认rsa
-f,指定存放密钥的路径,默认~/.ssh
-P,指定私钥的密码
如:

1
ssh-keygen -t rsa

6、ssh免密登录
  1.在客户端用ssh-keygen生成公私钥。
  2.将公钥追加到服务器的authorized_keys文件中(一般在用户家目录的.ssh下,有时候还需要自己创建)。
  3.客户端通过ssh对服务器发起请求,并把公钥传递到服务器。
  4.服务器检索authorized_keys,确认公钥是否存在。
  5.如果存在,生成随机数R,并用公钥加密。
  6.将密文传输到客户端。
  7.客户端用私钥解密密文,得到R。
  8.服务端和客户端通信会产生一个会话id(SessionKey),客户端用md5对R和SessionKey加密生成密文。
  9.客户端将md5密文传给服务器。
  10.服务器端同样生成md5(R,SessionKey)。
  11.如果两个密文匹配,则认证成功,实现了ssh免密登录。