一些无聊的网络相关内容
12.2K subscribers
111 photos
2 videos
2 links
一些无聊的网络相关内容。或者说,也不算无聊吧
Download Telegram
    FUN_002546f8(0x164,5,0,"targetlib_ifc_impl.c",0x15,"auer_getPbxSerialNumber",0x18,0xd3,
"%s: serial=%s","auer_getPbxSerialNumber",param_1);
}
[...]
return;
}

幸运的是,该函数的原始名称以字符串的形式包含在该函数中。具体来说,其名称是auer_getPbxSerialNumber,从字面不难看出,这个函数检索的是PBX的序列号。第12行和第13行中调用的函数可能会生成相应的日志信息。为了便于在其他地方认出它,我们将其重命名为auer_debuglog。同时,我们还将当前函数FUN_00289af4重命名为auer_getPbxSerialNumber。然后,我们可以使用键盘快捷键"Alt + Left Arrow "跳回之前访问过的函数
 else {
strncpy(param_1,param_2,param_3);
param_1[param_3 - 1] = '\0';
}
[...]
}

该函数似乎是strncpy函数的包装器,它将字符串从一个地址复制到另一个地址。由于值8是作为参数给出的,我们不妨假设这表示检索MD5哈希值的前八个字符
虽然这个后门密码允许我们重置管理员密码并获得PBX上的完全权限,但我们想知道是否在其他地方也使用了该密码生成器。于是,我们使用Ghidra的交叉引用搜索来查找密码生成函数的其他调用,并找到了以下代码:
iVar5 = strcmp((char *)password,(char *)&local_d8);
if (iVar5 != 0) {
[...]
FUN_0019441c(param_1[2],"TkLand",&local_5c4);
generate_backdoor_password(0,1,local_5c4,&local_2d8);
iVar5 = strcmp((char *)password,(char *)&local_2d8);
goto joined_r0x00015678;
们用上面的方法计算了密码,然后尝试通过用户Schandelah进行登录,但是,身份验证却失败了。目前来看,失败的原因可能有多种,由于我们无法调试PBX,所以,必须再次通过反编译代码来检查密码生成过程的每一步。最后,发现是因为未能正确理解strncpy包装器的实现:虽然strncpy确实只复制了八个字符,但是包装器auer_strncpy却能确保字符串以null字符结尾:
strncpy(param_1,param_2,param_3);
param_1[param_3 - 1] = '\0';

因此,后门密码实际上仅由MD5哈希值的七个字符组成,例如:
$ echo -n 1234123412r2d230.08.2021 | md5sum | egrep -o '^.{7}'
当传递管理员用户名admin时,系统将执行这个代码分支。首先,它会检查存储在变量local_d8中的实际管理密码。如果用户输入的密码不匹配,则再次将其与使用后门例程生成的“后备”密码进行比较。但是,这一次,将读出为PBX配置的国家代码,并将其作为参数传递。因此,这会使用两个字母的国家代码生成管理员用户的后备密码,例如:
$ echo -n 1234123412r2d230.08.2021DE | md5sum | egrep -o '^.{7}'
92fcdd9
随后通过WriteProcessMemory函数往svchost.exe中地址180000的内存写入数据,写入的数据内容在22291DB地址上。
BOOL WriteProcessMemory( [in] HANDLE hProcess, [in] LPVOID lpBaseAddress, [in] LPCVOID lpBuffer, [in] SIZE_T nSize, [out] SIZE_T *lpNumberOfBytesWritten )
进入shellcode后第一个call eax是为了启动一个线程,通过微软官方文档我们得知CreateThread函数,我们得知第三个参数就是指向要由线程执行的应用程序定义的函数的指针。这个指针代表线程的起始地址。我们可以创建一个线程直接跳到该地址进行调试。
HANDLE CreateThread( [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] SIZE_T dwStackSize, [in] LPTHREAD_START_ROUTINE lpStartAddress, [in, optional] __drv_aliasesMem LPVOID lpParameter, [in] DWORD dwCreationFlags, [out, optional] LPDWORD lpThreadId )
Media is too big
VIEW IN TELEGRAM
Fragnesia
*
一个通用的 `exploit`,用于提升 Linux 系统的本地权限。
它属于 Dirty Frag 漏洞类别(原理相同),但实际上是独立的。
是的,又来了 )))
最近,我需要快速搭建一个 Git 服务器,但不想部署过于复杂的系统,所以我想分享一种久被遗忘的方法,可以在不使用 GitLab、Gogs 或 Gitea 的情况下创建远程 Git 仓库。

Git 使用两种数据传输协议:HTTP 和 SSH。对于初学者来说,使用 HTTP 协议通常不会遇到问题,但使用 SSH 协议在配置访问权限(通过公钥)时可能会遇到一些困难。

实际上,在 Git 中,SSH 的工作方式与我们通常使用的方式类似:它使用用户名 git 通过公钥进行连接,并打开一个 shell,但不是 bash 或 zsh,而是 git-shell。它限制了对系统的额外访问,并且只与仓库文件进行交互。此外,包含仓库名称的目录必须采用 <仓库名称>.git 的格式。以下是一个通过 SSH 配置访问权限的示例。
apt update && apt install -y git

# 创建 git 用户
useradd -m git -s /usr/bin/git-shell

# 启用基于公钥的身份验证
sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 创建 .ssh 目录和 authorized_keys 文件
mkdir -p /home/git/.ssh
touch /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
chown -R git:git /home/git/.ssh
echo 'ssh-ed25519 <公钥(来自其他设备)>' >> /home/git/.ssh/authorized_keys

# 创建仓库
REPO_NAME="repo"
su -s /bin/bash git -c "mkdir -p ~/${REPO_NAME}.git && cd ~/${REPO_NAME}.git && git init --bare"


所有这些操作都可以在配置简单的虚拟机上正常运行。现在,您可以将您的分支推送到远程仓库:
REPO_NAME="repo"
git remote add origin "ssh://git@<主机名>:${REPO_NAME}.git"
git push remote master


#ToolTricks
This media is not supported in your browser
VIEW IN TELEGRAM
假设我们有一个用于渗透测试、漏洞扫描等目的的外部服务器,并且我们希望将其隐藏,避免被其他机器人和安全分析工具发现。 这听起来很简单,但如果服务器上存在开放端口怎么办? 应该如何处理?

1️⃣ 首先进行 ping 测试。 默认情况下,流行的 Linux 发行版都有一个服务,负责处理 ICMP 数据包。
要禁用它很简单。 只需要在防火墙中添加一个规则来阻止这些数据包即可。

nft add rule inet filter input icmp type echo-request drop

2️⃣ 端口。 必须始终记住,我们的服务器上 24/7 都有机器人和扫描器在运行。

首先,为了安全起见,最好添加规则来阻止所有连接。 VPS 提供商通常会默认安装 Zabbix 等代理。 在这种情况下,最好编写规则来阻止所有流量,然后根据需要逐步添加白名单:

# 清除当前规则
sudo nft flush ruleset

# 创建表和链
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0; policy drop; }
nft add chain inet filter output { type filter hook output priority 0; policy drop; }
nft add chain inet filter forward { type filter hook forward priority 0; policy drop; }


# 排除 lo 接口
nft add rule inet filter input iif lo accept
nft add rule inet filter output oif lo accept


# 允许 22/tcp 端口的流量
nft add rule inet filter input ct state established,related accept
nft add rule inet filter output ct state established,related accept
nft add rule inet filter input tcp dport 22 ct state new accept
nft add rule inet filter output tcp sport 22 accept
nft list ruleset > /etc/nftables.conf



要隐藏开放端口,只需将其移动到非标准端口(例如,tcp/64022 而不是 tcp/22)。 可以在不更改打开套接字的服务的配置的情况下进行此操作:

nft add chain ip nat prerouting { type nat hook prerouting priority 0; }
nft add chain ip nat postrouting { type nat hook postrouting priority 100; }
nft add rule ip nat prerouting tcp dport 64022 dnat to :22


或者,如果不想处理规则,可以使用 socat:

socat TCP-LISTEN:64022,fork TCP:localhost:22
Please open Telegram to view this post
VIEW IN TELEGRAM
假设出现这种情况:正在进行渗透测试,

在这种情况下,记录所有操作的日志就显得非常重要。以下是一个简单的技巧,它可以自动记录 90% 的操作,

1️⃣ 首先,需要在每次执行命令时,在终端中添加日期和时间。为此,可以修改你的命令行解释器的提示符。

这并不复杂,只需打开相应的配置文件并修改变量即可。

zsh (kali linux): 修改 ~/.zsh_rc 文件中的 PROMPT 变量。

PROMPT=$'%F{%(#.blue.green)}┌──%{$fg[yellow]%}[%D{%d.%m.%y} %D{%H:%M}]\n%F{%(#.blue.green)}├──${debian_chroot:+($debian_chroot)─}${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV))─}(%B%F{%(#.red.blue)}%n&#039;$prompt_symbol$'%m%b%F{%(#.blue.green)})-[%B%F{reset}%(6~.%-1~/…/%4~.%5~)%b%F{%(#.blue.green)}]\n└─%B%(#.%F{red}#.%F{blue}$)%b%F{reset} '

bash (kali linux): 修改 ~/.bash_rc 文件中的 PS1 变量。

PS1=$prompt_color'┌──[\D{%d.%m.%Y %H:%M}]\n'$prompt_color'├──${debian_chroot:+($debian_chroot)──}${VIRTUAL_ENV:+(\[\033[0;1m\]$(basename $VIRTUAL_ENV)'$prompt_color')}('$info_color'\u'$prompt_symbol'\h'$prompt_color')-[\[\033[0;1m\]\w'$prompt_color']\n'$prompt_color'└─'$info_color'\$\[\033[0m\] ';;

现在,在命令列表中,每条命令都将包含开始和结束执行的日期和时间(如帖子中的截图所示)。

2️⃣ 接下来,需要配置自动记录命令列表。这时,TMUX 可以派上用场。正确配置的终端多路复用器可以成为一个强大的工具,优于图形化终端。

要记录命令历史,需要安装一个插件,并在每次启动 tmux 时添加配置。

$> git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

# 配置文件应该如下所示
$> cat .tmux.conf

# 插件列表
set -g @plugin 'tmux-plugins/tpm' 
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-logging'
set -g history-limit 500000


# 启动 Tmux Plugin Manager
run '~/.tmux/plugins/tpm/tpm' 

$> tmux source ~/.tmux.conf


只需进入 tmux,然后按下 CTRL + b,再按下 SHIFT + i。现在,每次启动 tmux 时,您都可以使用 CTRL + b,SHIFT + p 开始记录。退出终端后,记录将保存到您的主目录中,以文本文件的形式。



#redteam #ToolTricks
Please open Telegram to view this post
VIEW IN TELEGRAM
🔵 dnsx:用于 DNS 分析和侦察的通用工具

您正在对大型公司的基础设施进行外部侦察。您拥有根域名,但没有完整的子域名列表。标准的工具(dig、nslookup)无法处理如此大的数据量:检查数千个域名需要数小时,而通配符记录会使结果中出现大量虚假主机。您需要快速获取干净的、活跃的子域名列表,包括它们的 IP 地址和 CNAME,检查是否存在开放的区域传输(AXFR),并准备数据以进行后续扫描。

为了解决这个问题,您应该选择什么? dnsx

主要功能

🟡大规模异步解析
dnsx 使用数千个并行 goroutine,并支持自定义解析器。这使得它能够在几分钟内处理数万个域名,而传统的顺序处理方式则需要更长的时间。

通过 Cloudflare 和 Google DNS 解析 A 记录:
dnsx -l domains.txt -r 1.1.1.1,8.8.8.8 -a -resp -silent


🟡灵活的 RCODE 和记录类型过滤
支持根据响应代码(NOERROR、NXDOMAIN、SERVFAIL 等)和 DNS 记录类型进行过滤。

仅获取有效的域名:
subfinder -silent -d example.com | dnsx -silent -rcode noerror -o valid.txt

提取 CNAME 记录:
subfinder -silent -d example.com | dnsx -silent -cname -resp


🟡检测开放的区域传输 (AXFR)
当使用 -axfr 标志时,dnsx 会自动尝试对每个域名执行区域传输:
echo example.com | dnsx -axfr -silent


🟡根据模板生成子域名
-w 标志允许您将一个前缀列表附加到输入列表中的每个域名(通过 -l)。这是一种基于模板的生成方式,而不是暴力破解。

dnsx -l root_domains.txt -w dev,api,staging,admin -a -silent


它将检查:dev.example.com, api.example.com 等。

-d 标志接受单个域名,而不是文件。对于域名列表,请使用 -l。

🟡反向 DNS 查找 (PTR)
用于在 IP 地址范围内进行侦察:
echo 241.0.73.0/24 | dnsx -silent -ptr -resp-only


🟡创建 DNS 数据库
将所有子域名及其 IP 地址收集到一个文件中,以便进行分析或关联:
subfinder -silent -d example.com | dnsx -a -resp -o dns_library.txt


🟡智能处理通配符记录
通配符记录(*.example.com)经常导致在枚举过程中出现误报。dnsx 能够自动检测此类模式:如果解析到相同 IP 地址/记录的唯一名称数量超过阈值,则该工具会将它们标记为通配符,并在输出中排除它们(除非指定了 -wildcard 标志)。

结果:一个干净的相关主机列表,无需手动后处理。

#pentest #redteam
⚡️ `nixos-cli` 旨在通过统一的命令行界面,替代 NixOS 中分散的工具,例如 `nixos-rebuild`。

* 作为 nixos-rebuild 和其他标准 NixOS 脚本的直接替代品。
* 提供 TUI 界面,用于管理版本和预览选项。
* 提供包装和非包装版本的 Ix 包,以避免不必要的重建。
* 通过 pkgs.testers.runNixOSTest 进行集成测试。