受影响NScan版本<= v.0.9.1
危害级别:高

NECROSOFTNScan是一款基于Windows系统且用于扫描大型网络并收集相关的网络或主机信息的端口扫描软件。该软件支持远程监控主机和端口列表的使用情况、选择配置文件等。NECROSOFTNScan0.9.1版本中存在本地缓冲区溢出漏洞,该漏洞源于程序没有对用户提交的输入执行正确的边界检查。攻击者可利用该漏洞在受影响应用程序上下文中执行任意代码,也可能造成拒绝服务。
dig.exe是执行DNS查找的一个组件,该组件有一个简单的缓冲区溢出漏洞。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
首先我们将存在漏洞的软件安装到xp上,以上是安装好软件后。
存在漏洞的就是dig.exe,是一个栈缓冲区溢出。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
首先我简单利用一下python打印出10000个A,并将打印出来的A复制进剪贴板。
等下使用这10000个A去尝试触发软件的异常。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
打开dig.exe把我们刚刚生成出来的10000个A赋值进Target中。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
打开OllyDbg程序,附加到dig.exe的进程中。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
附加到dig.exe进程后,点击TCP lookup
在Olly Dbg中可以看到程序出现崩溃,再看寄存器中EIP已经被0x41(“A”)所覆盖了。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
接下来开始定位EIP,以便我们的payload正好覆盖到EIP。
用pattern_create.rb生成打印出1000个不同的字符,还是复制进粘贴板。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
把dig.exe重走一次,把生成出来的字符复制进去。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
软件崩溃后,查看寄存器中的内容。可以看到EIP的内容为68423268

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
使用pattern_offset.rb 查看。
找到了偏移值为997。
那么到底准不准确需要我们再测试一下。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
修改一下我们的payload。
“A” * 997 + “B” * 4 + “C” * 200
然后继续把它复制,再次丢进漏洞软件中重走。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
软件崩溃,再看看寄存器,可以看到EIP寄存器中的内容为42424242(BBBB)。
这就说明EIP被我们刚好精确覆盖了。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
这里我选择使用esp来执行攻击,那么我们就需要找到合适的地址去覆盖EIP。
通常选用kernel32.dll的模块。 0x7c8369f0
最后开始生成我们的payload

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
就差个shellcode了,就打开个calc吧。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
因为前面已经加载了kernel32.dll,调用winexec打开calc吧。把生成的shellcode复制一哈,填到我们的payload中就大功告成了。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
把打印输出的payload复制,准备输入dig.exe中。

NECROSOFT NScan 本地缓冲区溢出漏洞手工利用
输入后点击查询,可以看到弹出了calc说明攻击成功执行了shellcode。

相关文章: