初探渗透测试之打靶基本思路

文章发布时间:

最后更新时间:

文章总字数:
3.2k

预计阅读时间:
11 分钟

初探渗透测试之打靶基本思路

前言

基于红队笔记大佬在b站的第一个视频打靶基本思路做的学习笔记

「红队笔记」靶机精讲:W1R3S 1.0.1 - 渗透测试思路为王,细节多到即使对于纯萌新也能无感入圈。_哔哩哔哩_bilibili

学了几个月web,现在初探一下渗透,故记录一下打靶的全过程方便以后回顾。

另外感谢Bossfrank大佬的文字版笔记,可以对着视频一起学习。

红队打靶:W1R3S: 1.0.1详细打靶思路(vulnhub)_Bossfrank的博客-CSDN博客

先下个靶机,然后vm打开即可(网络模式选net,方便等下进行主机发现)。第一课用的靶机是w1r3s.v1.0.1,比较简单,适合新手入门。

https://download.vulnhub.com/w1r3s/w1r3s.v1.0.1.zip

第一步:主机发现

nmap基本操作

主要使用的工具是nmap,先学习一下nmap的基本操作,参考文章如下:

https://blog.csdn.net/smli_ng/article/details/105964486

https://blog.csdn.net/m0_60571990/article/details/128057684

image-20230910175714679

这张图讲的很详细,但是有一点需要注意,nmap新版中主机探测的参数已经改为了-sn。这个n的意思是只扫描有哪些主机在线,不扫描端口,相当于Ping扫描,能回包就证明存活。

sudo与-sn参数

在Unix-like系统中,nmap需要管理员权限才能发送和接收原始网络包。原始包是网络协议中最基础的数据块,直接包含协议的头部和数据负载,不包括任何操作系统或应用程序添加的额外信息。这种低级别的网络访问允许nmap进行更复杂和详细的网络扫描。

具体到-sn扫描,当使用管理员权限的时候,nmap将发送ARP请求(对本地网络)、ICMP echo请求(ping)、TCP SYN到端口443,TCP ACK到端口80,和ICMP时间戳请求。这种混合扫描策略有助于在各种网络环境中准确地发现活动主机。

如果不使用管理员权限运行nmap,则nmap不会发送ARP请求,只尝试连接目标主机的TCP 80端口和TCP 443端口。这是因为在没有管理员权限的情况下,操作系统限制了nmap发送和接收原始网络包的能力,因此nmap只能使用更高级别的网络操作,如TCP连接。

简单来说,就是使用管理员权限运行nmap可以进行更准确和详细的网络扫描,记得加上sudo。

另外,在某些网络环境中,ICMP包可能被防火墙或路由器阻止,这种情况下,-sn扫描可能无法正确地确定主机是否在线。需要使用其他扫描技术或者加上防火墙规避和欺骗的参数。比如加上--send-ip参数就能更精确地扫描。

扫描存活主机

先在没有开启靶机的情况下扫描一下,利用ifconfig参数可以知道这个192.168.197.128是kali自己的。

image-20230910182723342

然后开启靶机,再扫描一下:

image-20230910183029296

上下对比一下就知道靶机的ip是192.168.197.8。

第二步:端口扫描

既然已经拿到了靶机的ip,我们就可以使用nmap对该ip进行更加细致的端口扫描。

对全端口进行扫描

image-20230910184935593

这里这个-min-rate指定了最小速率,实验表明打靶机的情况下10000是比较合适的,太快遗漏,太慢浪费时间(而真实红队测试中为了避免被发现,速率要小得多),-p-表示对所有端口进行扫描,看哪个端口有服务开放,ip是写在最后面的。

扫描结果可以看出21有ftp,22有ssh,80有http,3306有mysql,这些都是常见的端口。

对特定端口服务版本扫描

TCP(-sT)和UDP(-sU)扫描

  • -sT:这是TCP连接扫描,也是nmap的默认扫描类型。在此扫描中,nmap会尝试建立一个完整的TCP连接到目标主机的每个指定端口。如果连接成功建立,那么该端口被标记为”open”。这种扫描类型可以在所有的系统上使用,无论用户是否具有管理员权限。
  • -sU:这是UDP扫描。在此扫描中,nmap会发送一个空的UDP数据包到目标主机的每个指定端口。如果收到一个”ICMP port unreachable”错误消息,那么该端口被标记为”closed”。如果没有收到错误消息,那么该端口被标记为”open|filtered”,表示该端口可能是开放的,也可能由于某种原因(如防火墙)被过滤(无法确定)。对于开放的UDP端口,通常不会有响应,这使得UDP扫描比TCP扫描更难以解释。此外,UDP扫描通常比TCP扫描慢,因为无连接的UDP协议没有内建的重传机制,而且许多系统对ICMP错误消息的生成速度有限制。

在对特定端口进行扫描的时候,往往要同时进行TCP和UDP扫描,以获取完整的信息。因为一个端口可能同时对这两者开放,也可能只对其中一者开放。

先用TCP扫描一下,用-sV表示需要获取端口服务版本,用-O表示获取靶机版本。

image-20230910190115341

可以看到四个服务都对TCP开放,然后列出了版本号(可以根据版本号找历史漏洞),另外可以看到是linux系统,再用UDP扫描:

image-20230910190354324

可以看到mysql不对UDP开放,其他三个不确定。

对特定端口漏洞扫描

使用nmap自带的脚本vuln来进行漏洞扫描nmap –script=vuln –p21,22,80,3306 192.168.197.8

image-20230910191130534

也可以使用-sC,默认脚本扫描,这里-sC能多扫出一个ftp匿名登录

image-20230911091917250

结果如上图所示,可以看到这个http有一个dos攻击,这种卑劣的攻击手段对我们的启发不大,同时发现了一个wordpress的登录页面,一会可以关注一下有什么漏洞。

一共有四个端口:21,22,80,3306。

(1)80端口是http的web端口,且已经知道里面可能有wordpress的cms,具有较大的攻击面。这应该是最有可能的突破口。

(2)22是ssh远程登录端口,通常没啥漏洞,但是也不绝对,有可能存在弱口令或者暴力破解登录啥的,但这不是我们直接入手的角度,应该放在最后考虑。

(3)21端口是ftp文件传输协议的端口,有可能存在匿名登录,FTP服务器中也可能有一些信息,也有一定的攻击面。FTP的突破口比较单一,操作比较容易。

(4)3306端口是MySQL数据库的端口,前面漏洞扫描也并没有发现太多的思路,不过如果能登录数据库(无密码或者在别的信息里找到了密码),应该也有信息。

综上,先试试21,再看80,接着3306,最后22。

第三步:FTP渗透

FTP与匿名登录

FTP(文件传输协议)是一种用于在网络上传输文件的协议。FTP协议允许用户和服务器之间进行交互,上传和下载文件。为了访问FTP服务器,通常需要用户名和密码。

然而,有些FTP服务器允许所谓的”匿名登录“。在匿名登录中,用户不需要提供用户名和密码,或者可以使用特定的用户名(通常是”anonymous“)和任意的密码(通常是用户的电子邮件地址,但这个并不会被检查)来登录。

匿名FTP服务器常常用于公开分发文件,例如软件应用程序、游戏、音乐或文档等。任何人都可以连接到这样的服务器,并下载或者在一些情况下上传文件。

请注意,虽然匿名FTP为公开分发文件提供了便利,但它也带来了安全风险。首先,任何人都可以访问服务器,可能会导致服务器被滥用。其次,传输过程中的数据并不加密,可能会被窃取或篡改。因此,现在许多网站和服务已经转向使用更安全的协议,如SFTP(SSH文件传输协议)或FTP over SSL(也就是FTPS),这两种协议都提供了数据加密功能。

image-20230911092144947

由于刚刚扫描出存在匿名登录,这里就直接登录ftp下载文件(文件里可能有我们需要的信息)

binary,防止非.txt格式内容改变

prompt,下载不需要交互确认

使用mget下载文件,下载完再一个一个看:

看到一段类似hash的,使用kali自带的工具hash-identifier,鉴定结果为HASH,上网解密,也可以用kali自带的john(需要你把hash保存在一个文件中)来解密,而且john有多种破解模式,还可以使用wordlist指定密码字典。

image-20230910193808752

总之,ftp得到的信息就是这些信息没什么用,作者说这不是通往root的路。

image-20230910194427376

虽然没什么用,但是这些信息我们最好也保存一下,可能接下来的渗透过程中会派上用场。

第四步:http渗透

目录扫描

直接访问http://192.168.197.8,可以看到是一个apache的默认页面,可以简单浏览一下这个页面看看有没有什么信息,一般这个默认页面不会有什么攻击面。

下一步进行目录扫描,有很多款目录扫描工具,随便挑一款扫就行,也可以自行指定字典。

image-20230911093809150

扫出了一大堆,但是可以看到关键的子目录就只有三个,wordpress,administrator和JavaScript,这第三个显然对我们的攻击没什么帮助,试着访问第一个。

但是由于直接访问192.168.197.8/wordpress总是会自动跳转localhost,只得放弃。

访问administrator,发现关键信息,直接给到CMS是Cuppa,等一下就可以利用这个信息寻找Cuppa的历史漏洞。

image-20230911094229530

这个页面还有一个交互按钮,可以install,但是我们在渗透测试中做这种可能会引起管理员注意或者对服务造成永久性变化的行为需要慎重

所幸这里点了一下install之后由于不能创建管理员账户而无事发生。

CMS指纹与寻找sploit

使用kali内置的工具searchsploit来寻找cuppa历史的漏洞,或者也可以在google上搜寻:

image-20230911094354002

-m参数表示mirro,可以把这个漏洞的文档下载下来,查看之后发现是一个文件包含漏洞,文档中给到了漏洞的成因和payload。

image-20230911141412405

可以看到这里通过request获取的参数urlConfig直接就include了,有文件包含漏洞,而且下面还有两个payload,第一个是远程文件包含,包含一个shell,第二个是读本地文件,而且穿越多少层目录都给你写出来了。

尝试直接访问,发现访问是访问得了(记得换一下url,写上目标机的ip),但是并没有显示出文件的内容,可以尝试用curl发。

image-20230911142114961

记得加一个–data-urlencode,使用curl成功获得了文件的内容,发现并没有用户密码,这种情况就要访问shadow文件。

访问了shadow文件看到了经过hash加密的密码,尝试使用john直接解密

root密码一直破解不出来(可能需要的时间比较长),但是www-data的密码和w1r3s的密码破解出来了,可以先用ssh登录然后再考虑提权问题。

第五步:linux权限提升

www-data和w1r3s显然后者的权限会更大,以后者ssh登录。

image-20230911144225556

可以看到这个账户竟然有sudo的权限(以后提权就没那么简单了),使用sudo bash开一个root终端,可以在/root/flag.txt里找到完成的标志。

image-20230911144342610

总结

学了一下,打了第一个靶机,虽然这个靶机很简单,但是学到了很重要的渗透测试思路:主机发现,端口扫描,对80,21等特定端口的渗透(自动化),权限提升。

红队笔记的视频真的讲的很好,跟着好好学,他说要陪你打100个靶机(目前已经打了49个),不知道我能坚持跟着打多少个。。。