第27章 揪住黑客!
罗韜神色变得郑重了些。
打开源文件,把主工程文件导入自己的编译器,一行一行地查看源码。
林青玉轻手轻脚走进寢室,站在罗韜身后。
隨著时间一点点地过去,她的一颗心渐渐下沉。
突然,罗韜身体向前探去,仔仔细细看了片刻,嘴里道:“发现一处问题。”
说话间移动滑鼠,將一行代码標为高亮。
林青玉连忙凑过去看,发现那行代码是——
fprintf(logfile, log_entry);
“这一行,存在格式化字符串漏洞。”
罗韜手指指著屏幕,对著林青玉解说起来。
“对方若是知道这个漏洞,就会发送一条特製的公开消息,其中嵌入大量的格式化符號——比如%x、%n这些格式说明符。
%x可以从栈上读取数据,泄露內存信息。
%n可以向任意內存地址写入任意值。
因为,%n会將当前已输出的字符数写入对应地址。
攻击者利用这些,一步步地推移栈上的指针,最终覆盖函数返回地址,实现远程代码执行。”
林青玉虽然专业教人编程,却从未涉及安全领域,听了一个似懂非懂。
罗韜不想总是解决这类小问题,唯一办法就是教会对方。
所以,他表现出了极强耐心。
“当伺服器程序將攻击者的消息记录到日誌时,日誌函数没有对消息內容做任何过滤,直接將其作为格式字符串传递给fprintf函数。
攻击者通过那些格式化符號推移栈上的指针,最终用一个%n,將当前输出的字符数写入了程序全局偏移表中fprintf函数的入口地址,將其篡改为他预先布置的shellcode的起始地址。
此后伺服器再次调用fprintf时,实际执行的是攻击者的代码,从而以root权限为他开启了一个后门埠。
他通过这个后门修改了程序內存中標识用户权限的变量,使自己获得了最高权限。”
这一次,林青玉彻底听明白了,由衷地说了一声:“感谢解惑!”
然后摆了摆手:“你先处理漏洞,不用管我。”
罗韜点点头,却没有立即修补漏洞,而是先去追查入侵者的来源。
来而不往非礼也!
对方那么狂,必须给他一点教训。
他登录伺服器,查看当前所有网络连接。
发现聊天室的进程里面,维护著四五十个来自外部的活跃连接。
其中一个的发包周期,恰好与黑客帐號的发言频率相对应。
他记下那个ip位址,然后打开一个命令行窗口。
“噼哩啪啦……”
罗韜双手十指在键盘上面飞舞,速度之快把林青玉都嚇了一跳。
她很想问一句——“你现在在干什么?”
看到罗韜那般专注,最终把话咽了回去。
罗韜这时写的,是个最简易的tcp埠扫描器。
原理简单得可怕:创建socket,用connect()去尝试连接目標ip的常用埠,能连上的就是开放的。
使用这个小工具,可以快速扫描目標开放的埠。
一分钟左右,代码写完。
编译、运行,输入那个ip位址。
屏幕上面,开始滚过一行行结果——
21埠:开放
23埠:开放
80埠:开放
139埠:开放
445埠:开放
3389埠:开放
……
过了一阵,罗韜双目紧紧盯著屏幕,目光锁定在3389埠。
林青玉也不是全无见识,直接问出心中疑惑:“你想反攻对方?这很难吧?”
“会者不难,难者不会!”罗韜脸上浮现笑意,“已经有眉目了。”
说话间,点击滑鼠退出扫描程序,尝试连接过去——
通过之前植入的后门,他发现这是一台windows主机。
而且,3389埠开放意味著远程桌面服务正在运行。
罗韜没有贸然连接,而是先检查这台机器的歷史操作记录。
在临时目录中,他发现了几处线索:一个名为“exploit.c”的源码文件,一个编译好的可执行文件,还有几个日誌片段。
这说明,攻击者只是用这台机器作为跳板。
好消息是,攻击者没有清除操作痕跡。
罗韜仔细检查了系统日誌,发现攻击者通过另一台中间伺服器登录这台机器,而那个中间伺服器的ip属於教育网。
202.114.64.xxx
罗韜手指指著ip位址,对著林青玉说道:
“这个ip位址,多半是某个大学的,应该可以查到。”
林青玉点点头,仔细记下,转身走了出去。
罗韜进一步分析,发现那个攻击者曾经多次从这台跳板机访问另一个固定地址。
大约是一直都太顺利,根本没有清理连接记录。
罗韜嘴角浮起一抹嘲讽,再次打开扫描工具,对准那个新发现的地址。
路运成全程看著罗韜操作,完全就是不明觉厉心態。
突然。
他发现罗韜打开一个画著窗口图標的东西,里面有两个空白的框子。
罗韜在第一个框里敲了一串数字,又点开下面一个小方块,选了另一串更长的字符贴进去。
过不多时,屏幕上出现了一个完整的电脑桌面,壁纸是蓝天白云青草地。
典型的win98界面。
隨著罗韜不断点击滑鼠,路运成看到一个个的文件夹展开,课程表、实习报告……
直到看到一个相册,里面的照片一点一点刷新出来,路运成终於確认一件事——罗韜进入那名黑客的电脑里了!
那么厉害的一个黑客,就这样被罗韜拿下了?
为了確定这点,他直接不耻下问:“罗韜,你在远程操控对方电脑吗?”
“算是吧。”罗韜头也不抬,一边说话一边截图。
路运成马上又问:“那他知道吗?”
罗韜摇摇头,脸上浮起笑意:“他要知道,现在肯定拔网线了!”
实际上,罗韜是通过跳板机上残留的rdp连接记录,获取了目標ip和用户名。
对方显然大意了,在连接时选择了“记住密码”,凭证被明文缓存在註册表的defaultpassword键值中。
罗韜提取出这组凭据,直接建立了远程桌面会话。
此时,他打开mstsc的远程协助功能,利用shadow会话技术,在不影响对方操作的情况下实时监控桌面。
对方全屏展开了小雨点聊天室,输入框里字符不断增加。
【那谁谁不是很厉害吗,快来……】
罗韜等到攻击者打出后面的“抓我呀”三个字,赶紧截了一张图片。
又等片刻,等到攻击者把这一句发出去,变成小雨点聊天室中的一行系统文字,又截一张。
证据固定完毕。
罗韜在命令行中调用shutdown.exe,强制终止目標系统:
shutdown /s /t 0 /f
系统立即响应,终止所有进程並进入关机流程。
对方界面很快变蓝,系统提示“正在关机”。
紧接著,屏幕一黑,连接断开了。
“你把对方关机了?”路运成瞪眼问道。
罗韜点点头,回到跳板机,修改了本地安全策略,强制要求复杂密码並禁用凭据缓存。
然后,断开了所有连接。
此时此刻,某大学宿舍。
一个年轻人坐在电脑面前,神情很是疑惑。
“咋就关机了?”
打开源文件,把主工程文件导入自己的编译器,一行一行地查看源码。
林青玉轻手轻脚走进寢室,站在罗韜身后。
隨著时间一点点地过去,她的一颗心渐渐下沉。
突然,罗韜身体向前探去,仔仔细细看了片刻,嘴里道:“发现一处问题。”
说话间移动滑鼠,將一行代码標为高亮。
林青玉连忙凑过去看,发现那行代码是——
fprintf(logfile, log_entry);
“这一行,存在格式化字符串漏洞。”
罗韜手指指著屏幕,对著林青玉解说起来。
“对方若是知道这个漏洞,就会发送一条特製的公开消息,其中嵌入大量的格式化符號——比如%x、%n这些格式说明符。
%x可以从栈上读取数据,泄露內存信息。
%n可以向任意內存地址写入任意值。
因为,%n会將当前已输出的字符数写入对应地址。
攻击者利用这些,一步步地推移栈上的指针,最终覆盖函数返回地址,实现远程代码执行。”
林青玉虽然专业教人编程,却从未涉及安全领域,听了一个似懂非懂。
罗韜不想总是解决这类小问题,唯一办法就是教会对方。
所以,他表现出了极强耐心。
“当伺服器程序將攻击者的消息记录到日誌时,日誌函数没有对消息內容做任何过滤,直接將其作为格式字符串传递给fprintf函数。
攻击者通过那些格式化符號推移栈上的指针,最终用一个%n,將当前输出的字符数写入了程序全局偏移表中fprintf函数的入口地址,將其篡改为他预先布置的shellcode的起始地址。
此后伺服器再次调用fprintf时,实际执行的是攻击者的代码,从而以root权限为他开启了一个后门埠。
他通过这个后门修改了程序內存中標识用户权限的变量,使自己获得了最高权限。”
这一次,林青玉彻底听明白了,由衷地说了一声:“感谢解惑!”
然后摆了摆手:“你先处理漏洞,不用管我。”
罗韜点点头,却没有立即修补漏洞,而是先去追查入侵者的来源。
来而不往非礼也!
对方那么狂,必须给他一点教训。
他登录伺服器,查看当前所有网络连接。
发现聊天室的进程里面,维护著四五十个来自外部的活跃连接。
其中一个的发包周期,恰好与黑客帐號的发言频率相对应。
他记下那个ip位址,然后打开一个命令行窗口。
“噼哩啪啦……”
罗韜双手十指在键盘上面飞舞,速度之快把林青玉都嚇了一跳。
她很想问一句——“你现在在干什么?”
看到罗韜那般专注,最终把话咽了回去。
罗韜这时写的,是个最简易的tcp埠扫描器。
原理简单得可怕:创建socket,用connect()去尝试连接目標ip的常用埠,能连上的就是开放的。
使用这个小工具,可以快速扫描目標开放的埠。
一分钟左右,代码写完。
编译、运行,输入那个ip位址。
屏幕上面,开始滚过一行行结果——
21埠:开放
23埠:开放
80埠:开放
139埠:开放
445埠:开放
3389埠:开放
……
过了一阵,罗韜双目紧紧盯著屏幕,目光锁定在3389埠。
林青玉也不是全无见识,直接问出心中疑惑:“你想反攻对方?这很难吧?”
“会者不难,难者不会!”罗韜脸上浮现笑意,“已经有眉目了。”
说话间,点击滑鼠退出扫描程序,尝试连接过去——
通过之前植入的后门,他发现这是一台windows主机。
而且,3389埠开放意味著远程桌面服务正在运行。
罗韜没有贸然连接,而是先检查这台机器的歷史操作记录。
在临时目录中,他发现了几处线索:一个名为“exploit.c”的源码文件,一个编译好的可执行文件,还有几个日誌片段。
这说明,攻击者只是用这台机器作为跳板。
好消息是,攻击者没有清除操作痕跡。
罗韜仔细检查了系统日誌,发现攻击者通过另一台中间伺服器登录这台机器,而那个中间伺服器的ip属於教育网。
202.114.64.xxx
罗韜手指指著ip位址,对著林青玉说道:
“这个ip位址,多半是某个大学的,应该可以查到。”
林青玉点点头,仔细记下,转身走了出去。
罗韜进一步分析,发现那个攻击者曾经多次从这台跳板机访问另一个固定地址。
大约是一直都太顺利,根本没有清理连接记录。
罗韜嘴角浮起一抹嘲讽,再次打开扫描工具,对准那个新发现的地址。
路运成全程看著罗韜操作,完全就是不明觉厉心態。
突然。
他发现罗韜打开一个画著窗口图標的东西,里面有两个空白的框子。
罗韜在第一个框里敲了一串数字,又点开下面一个小方块,选了另一串更长的字符贴进去。
过不多时,屏幕上出现了一个完整的电脑桌面,壁纸是蓝天白云青草地。
典型的win98界面。
隨著罗韜不断点击滑鼠,路运成看到一个个的文件夹展开,课程表、实习报告……
直到看到一个相册,里面的照片一点一点刷新出来,路运成终於確认一件事——罗韜进入那名黑客的电脑里了!
那么厉害的一个黑客,就这样被罗韜拿下了?
为了確定这点,他直接不耻下问:“罗韜,你在远程操控对方电脑吗?”
“算是吧。”罗韜头也不抬,一边说话一边截图。
路运成马上又问:“那他知道吗?”
罗韜摇摇头,脸上浮起笑意:“他要知道,现在肯定拔网线了!”
实际上,罗韜是通过跳板机上残留的rdp连接记录,获取了目標ip和用户名。
对方显然大意了,在连接时选择了“记住密码”,凭证被明文缓存在註册表的defaultpassword键值中。
罗韜提取出这组凭据,直接建立了远程桌面会话。
此时,他打开mstsc的远程协助功能,利用shadow会话技术,在不影响对方操作的情况下实时监控桌面。
对方全屏展开了小雨点聊天室,输入框里字符不断增加。
【那谁谁不是很厉害吗,快来……】
罗韜等到攻击者打出后面的“抓我呀”三个字,赶紧截了一张图片。
又等片刻,等到攻击者把这一句发出去,变成小雨点聊天室中的一行系统文字,又截一张。
证据固定完毕。
罗韜在命令行中调用shutdown.exe,强制终止目標系统:
shutdown /s /t 0 /f
系统立即响应,终止所有进程並进入关机流程。
对方界面很快变蓝,系统提示“正在关机”。
紧接著,屏幕一黑,连接断开了。
“你把对方关机了?”路运成瞪眼问道。
罗韜点点头,回到跳板机,修改了本地安全策略,强制要求复杂密码並禁用凭据缓存。
然后,断开了所有连接。
此时此刻,某大学宿舍。
一个年轻人坐在电脑面前,神情很是疑惑。
“咋就关机了?”