[TOC]

前言:这是一个实训系统的靶场,靶场属于内网,仅供训练人员使用。这里仅作打靶场时的操作思路记录

渗透思维导图

1

渗透过程

首先打开操作机kali,知道目标机的ip,第一步进行端口扫描,查看开放端口情况

使用nmap工具对目标机器进行全端口扫描,扫描命令为:

1
nmap -p 1-65535 -Pn -sV 192.168.12.20

image-20260316172100586

可以看到目标开放了两个http端口,一个80(http),一个15020(https)

先从80入手

image-20260316172210714

网站上并无其他url可以浏览,下一步就进行目录扫描,查看目录情况

使用目录扫描工具dirb进行目录爬取:

1
dirb http://192.168.12.20/ /usr/share/dirb/wordlists/big.txt

image-20260316172304035

有一个/admin2目录,访问是一个登录口。

image-20260316172332015

查看源代码,发现底下有一个js代码:

image-20260316172419740

image-20260316172425412

从代码中可以看到是一个正向验证密码的算法,可以将算法倒过来计算:(1079950212331060÷1988+234562221224)-4469 = 777796730000,从这个算式中可以看出来,想让输入的密码为77779673,使用这个密码进行登录,就拿到第一个flag

image-20260316172449663

flag1{46202df2ae6c46db8efc0af148370a78}

接下来这个80端口没有其他发现,换目标端口,看看15020端口

image-20260316172541657

访问时会提示证书相关的内容,这一步点击 view Certificate 按钮,查看证书信息。

在证书界面看到了flag2:flag2{d88a088a4e4b6dba8329ae9f38a2a967}。

实战中,可以查询证书,找到没有暴露的子域名等

image-20260316172627585

接下来点击浏览器中警告界面中的Accept the Risk an Continue 按钮,访问页面

image-20260316172756829

页面上也是干干净净,直接扫目录

1
dirb https://192.168.12.20:15020 /usr/share/dirb/wordlists/big.txt 

image-20260316172828487

两个路径:

1
2
/blog
/vault

访问/blog目录,是个博客,查看源码,发现注释内容中有一个下载接口

image-20260316172921162

访问接口发现缺少参数 image

image-20260316172951983

可以验证一下是否存在LFI漏洞,从提示中并不能判断image参数是如何提交的,可以分别使用get和post方法提交,使用get请求,发现并无效果。

使用post请求,发现可以,然后在post数据中填写image=/etc/passwd,读取文件

下载成功

image-20260316173056431

可以看到用户账号

现在这里有一个文件包含漏洞,需要想办法利用来扩大受害范围:读取源码,进行白盒测试/代码审计

回到/blog页面,发现有一个评论功能,点进去

image-20260316173345999

flag在Kevin用户的home下,路径就是 /home/kevin/flag.txt

image-20260316173453160

第三个flag:flag3{d88a088a4e4b6dba8329ae9f38a2a967}

在上面目录扫描时,有一个/blog/admin路径,访问后是一个常规的登录框

因为不知道账号密码,可以利用LFI读取login.php文件

但是目前并不知道15020这个端口的路径,指纹识别发现是apache搭建的,可以先用文件包含漏洞读取default-ssl.conf文件

这里使用curl工具的post功能查看default-ssl.conf来确定网站的绝对路径。

1
curl -d "image=/etc/apache2/sites-available/default-ssl.conf" https://192.168.12.20:15020/blog/download.php -k

image-20260316174119950

然后尝试读取admin目录中的login.php文件。

路径为 /var/www/ssl/blog/admin/login.php

image-20260316174227851

发现一些文件信息,其中有个数据库相关的文件db.php,文件包含漏洞访问一下

image-20260316174304377

虽然得到了mysql的密码,但是在端口扫描时,并没有发现3306端口,所以这个点无法利用

在读取到index.php文件时,发现了第四个flag

image-20260316174416429

第四个flag:flag4{5cdb4d0fac55ea4d21057953a3a8d79e}

在目录扫描的过程中还有一个vault目录,尝试访问。

image-20260316174518821

使用wget命令下载目录,到本地使用find命令搜索有用信息。

1
wget -R index.html* --no-check-certificate -r https://192.168.12.20:15020/vault/

下载完成后会在本目录创建一个名为192.168.12.20:15020的文件夹,进入此目录后,使用命令

1
find . -type f ! -name 'index.html*'

直接排除掉不是 index.html相关的文件,查找一些有用的文件,在其中发现了ctf.cap文件和rockyou.zip

image-20260316184738642

解压rockyou.zip,里面是一个txt的字典文件。

使用wireshark打开ctf.cap文件,这是一个wireshark的文件,而且內容是关于Wifi handshake的。

cap是数据源文件,hccapx是从cap里面取出握手哈希数据的一种格式

使用aircrack-ng ctf.cap -j wifi命令从cap中提取握手包。

image-20260316184838317

然后使用hashcat工具对握手包进行爆破,字典使用上面解压的rockyou.txt

1
hashcat -m 2500 -a 0 wifi.hccapx ./rockyou.txt

image-20260316185243133

得到了密码结果minion.666。

使用此密码登录到login.php页面,用户名使用admin,进入后只有一些编辑和删除功能。

image-20260316185304073

看一下编辑和删除功能的页面代码,在读取index.php代码时已经知道还有edit.php,del.php等文件。依次尝试包含这些文件,通过代码审计发现edit.php存在sql注入。

image-20260316185354331

preg_replace()函数过滤了一些联合查询和延时查询的关键字

在classes/post.php文件找到find函数

image-20260316185428120

这里面的$id是没有做过滤的,所以只简单地做了一些字符替换过滤,然后直接拼接进sql语句了

通过代码审计和在页面上分别使用 ?id=1 and 1=1?id=1 and 1=2的返回结果不一样,可以判断为数字型

直接使用sqlmap工具,由于是登录状态,所以需要cookie

image-20260316185806673

工具里可以看到,使用的是盲注和benchmark()的延时注入

存在sql注入漏洞,于是查数据库、查表、查字段

image-20260316185909149

image-20260316185914170

在users的表中查询到字段login和password

从前面的源码中也可以知道,用户输入的id值经过了一些过滤,也导致了sqlmap查询不出来内容,所以前面查询表和字段时都使用的字典猜测,还有一种方法可以获取数据,使用sqlmap的–sql-query参数,也就是自己写sql语句。

1
sqlmap -u 'https://192.168.12.20:15020/blog/admin/edit.php?id=1' -H 'Cookie: PHPSESSID=p2e02vu4c230bs7fja6tf0thn2' --sql-query='select * from users where id=1'

image-20260316190004723

这一条记录为admin的信息,再查询id=2的内容。

以此类推,最后刚好id=2时找到flag

image-20260316190029341

最后得到第五个flag:flag5{dbc0c030c2c30c1b5820ac7403b49328}。