NECROSOFT NScan 本地缓冲区溢出漏洞手工利用

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

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


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

在这里插入图片描述
首先我简单利用一下python打印出10000个A,并将打印出来的A复制进剪贴板。
等下使用这10000个A去尝试触发软件的异常。

在这里插入图片描述
打开dig.exe把我们刚刚生成出来的10000个A赋值进Target中。

在这里插入图片描述
打开OllyDbg程序,附加到dig.exe的进程中。

在这里插入图片描述
在这里插入图片描述
附加到dig.exe进程后,点击TCP lookup
在Olly Dbg中可以看到程序出现崩溃,再看寄存器中EIP已经被0x41(“A”)所覆盖了。

在这里插入图片描述
接下来开始定位EIP,以便我们的payload正好覆盖到EIP。
用pattern_create.rb生成打印出1000个不同的字符,还是复制进粘贴板。

在这里插入图片描述
把dig.exe重走一次,把生成出来的字符复制进去。

在这里插入图片描述
软件崩溃后,查看寄存器中的内容。可以看到EIP的内容为68423268

在这里插入图片描述
使用pattern_offset.rb 查看。
找到了偏移值为997。
那么到底准不准确需要我们再测试一下。

在这里插入图片描述
修改一下我们的payload。
“A” * 997 + “B” * 4 + “C” * 200
然后继续把它复制,再次丢进漏洞软件中重走。

在这里插入图片描述
软件崩溃,再看看寄存器,可以看到EIP寄存器中的内容为42424242(BBBB)。
这就说明EIP被我们刚好精确覆盖了。

在这里插入图片描述
这里我选择使用esp来执行攻击,那么我们就需要找到合适的地址去覆盖EIP。
通常选用kernel32.dll的模块。 0x7c8369f0
最后开始生成我们的payload

在这里插入图片描述
就差个shellcode了,就打开个calc吧。

在这里插入图片描述
因为前面已经加载了kernel32.dll,调用winexec打开calc吧。把生成的shellcode复制一哈,填到我们的payload中就大功告成了。

在这里插入图片描述
把打印输出的payload复制,准备输入dig.exe中。

1.1
输入后点击查询,可以看到弹出了calc说明攻击成功执行了shellcode。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
已知程序 import xarray as xr from collections import namedtuple import numpy as np from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter import matplotlib.ticker as mticker import cartopy.feature as cfeature import cartopy.crs as ccrs import matplotlib.pyplot as plt import matplotlib.cm as cm import matplotlib.colors as mcolors def region_mask(lon, lat, extents): lonmin, lonmax, latmin, latmax = extents return ( (lon >= lonmin) & (lon <= lonmax) & (lat >= latmin) & (lat <= latmax) ) Point = namedtuple('Point', ['x', 'y']) Pair = namedtuple('Pair', ['start', 'end']) time = '2023-05-04' filepath_DPR = r"C:\pythontest\zFactor\test1.nc4" extents = [110, 122, 25, 38] with xr.open_dataset(filepath_DPR) as f: lon_DPR = f['FS_Longitude'][:] lat_DPR = f['FS_Latitude'][:] zFactorFinalNearSurface = f['FS_SLV_zFactorFinalNearSurface'][:] nscan, nray = lon_DPR.shape midray = nray // 2 mask = region_mask(lon_DPR[:, midray], lat_DPR[:, midray], extents) index = np.s_[mask] lon_DPR = lon_DPR[index] lat_DPR = lat_DPR[index] zFactorFinalNearSurface = zFactorFinalNearSurface[index] for data in [ zFactorFinalNearSurface, ]: data.values[data <= -9999] = np.nan proj = ccrs.PlateCarree() fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection=proj) ax.coastlines(resolution='50m', lw=0.5) ax.add_feature(cfeature.OCEAN.with_scale('50m')) ax.add_feature(cfeature.LAND.with_scale('50m')) ax.set_xticks(np.arange(-180, 181, 5), crs=proj) ax.set_yticks(np.arange(-90, 91, 5), crs=proj) ax.xaxis.set_minor_locator(mticker.AutoMinorLocator(2)) ax.yaxis.set_minor_locator(mticker.AutoMinorLocator(2)) ax.xaxis.set_major_formatter(LongitudeFormatter()) ax.yaxis.set_major_formatter(LatitudeFormatter()) ax.set_extent(extents, crs=proj) ax.tick_params(labelsize='large') def make_zF_cmap(levels): '''制作雷达反射率的colormap.''' nbin = len(levels) - 1 cmap = cm.get_cmap('jet', nbin) norm = mcolors.BoundaryNorm(levels, nbin) return cmap, norm levels_zF = [0, 1, 5, 10, 15, 20, 25, 30, 35, 40, 45] cmap_zF, norm_zF = make_zF_cmap(levels_zF) im = ax.contourf( lon_DPR, lat_DPR, zFactorFinalNearSurface, levels_zF, # 三个物理量为 (500, 49)就是在500*49的格点上赋予这三个物理量 cmap=cmap_zF, norm=norm_zF, extend='both', transform=proj ) cbar = fig.colorbar(im, ax=ax, ticks=levels_zF) cbar.set_label('zFactor (dBZ)', fontsize='large') cbar.ax.tick_params(labelsize='large') ax.set_title(f'DPR zFactor on {time}', fontsize='x-large') plt.show()如何将其中的zFactorFinal变量变为二维
05-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值