欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

运用WinDbg内核本地调试器攻破Windows系统内核

来源:本站整理 作者:佚名 时间:2017-09-26 TAG: 我要投稿
 if "%~1"=="" (call :usage) else call :%*
exit /b
_____binstart_____
-----BEGIN CERTIFICATE-----
ABEiM0RVZneImaq7zN3u/w==
-----END CERTIFICATE-----
_____binend_____
正如咱们在后面的代码中看到的,其有一个名为DumpBlock的函数。该函数会接管一个文件的门路和两个标签,将其作为批处理文件的参数,而后将这两个标签之间的内容转储到文件中。将文本转储到文件(file.enc)后,挪用certutil将其解码为二进制文件:

certutil -decode file.enc file.bin
经由过程这类方法,咱们可以或许将文件(可运行文件或任何范例的文件)嵌入到批处理文件中,并在剧本运行时将其转储。
 
2)以管理员身份运行批处理文件
假如您应用的是PowerShell或Vbs,可以或许有多种方法让UAC提醒用户以管理员身份运行咱们的应用程序。然则,这里我只想应用批处理语法。
在经由过程批处理文件表现UAC提醒方面,我决议另辟蹊径:转储指向我自己的批处理文件的.LNK文件。这个.LNK相当于勾选了“Run as administrator”选项。如许,当.LNK从新启动咱们的批处理文件时,假如咱们没有管理员权限,将表现UAC提醒符。
为了创立.LNK,咱们可以或许创立一个简略的Windows链接,并设置“Run as administrator”选项:

假如咱们将.lnk与别的一个没设置“以管理员身份”选项的.lnk停止比拟,就会发明只有一个标记发生了变更:

为了创立自己的.LNK,还必需实现一项事情。当咱们创立它时,Windows会将相对门路拔出目标文件中,但LNK文件只能应用相对门路和情况变量。 是以,咱们必要应用十六进制编辑器将相对门路改成相对门路:.\setup.bat,或改成含有情况变量的门路:%temp%\ setup.bat:

末了一步是将这个.lnk嵌入到批处理文件中,并应用第一部门中裸露的办法来转储它。 当.LNK文件停当后,咱们就可以够或许将咱们的bat复制到%temp%\ setu_.bat,而后咱们经由过程.lnk文件来运行它们了:
批处理文件:
if "%CD%" == "%systemroot%\system32" (
 if "%~dp0" == "%TEMP%\" (
 rem HERE WE ARE BEING EXECUTED AS ADMIN
 goto:eof
 )
)
copy setup.bat "%temp%\setu_.bat"
start %temp%\promptUAC.lnk
3)启用当地内核调试
为了启用当地内核调试,必要从新启动计算机。固然,歹意软件在应用这个简略的代码经由过程批处理文件来启用当地内核调试和从新启动平日不会有太大的成绩:
批处理文件:
IF [%1]==[/DOONLOGON] GOTO ONLOGON
bcdedit /debug on
bcdedit /dbgsettings local
schtasks /create /sc onlogon /tn setup /rl highest /tr "%0 /DOONLOGON"
shutdown /r /f
GOTO DONE
:ONLOGON
rem here local debugging is enabled and we run as administrator
:DONE
您可以或许看到剧本是若何启用当地内核调试的,它会装置一个在从新启动后将要运行的义务,并从新启动计算机。
4)应用windbg修补内核内存,以内核形式注入和运行咱们的代码
经由过程后面部门中先容的办法,咱们曾经将一切必要的文件转储到了磁盘,而且曾经可以或许让UAC提醒用户获得管理员权限,同时咱们也启用了内核当地调试。接下来的末了一步,是修补Windows内核内存,将咱们的代码放到内核中,并在内核中挂接一些函数来运行咱们的代码。
为此,咱们将应用-kl选项(内核当地调试)和-c选项启动windbg,以启动咱们的windbg剧本:

start /min windbg -y "SRV*c:\symbols*http://msdl.microsoft.com/download/symbols" -c"$$> -kl
而最重要的部门是windbg剧本jmpkernel_hookcreatefile.wdbg。您可以或许鄙人一段看到该剧本中的相干代码。
在这个剧本中,一些地点是我的目标测试机械,这里应用了硬编码方法。目标机械是Windows 8.1 Pro N x64,ntoskrnl版本为6.3.9600.17668。固然,要想顺应其余机械,或编写没有硬编码地点的通用剧本也并不是难事。无论若何,因为这只是一个PoC,以是我用一些硬编码的地点来实现测试,以避免代码变得过于繁杂。
对付这个剧本,重点在于,经由过程windbg当地调试器修补内核内存的症结是应用物理地点来写内存。当地内核调试器不运转咱们改动一些内核内存地点(比方,假如咱们要修补NtCreateFile函数,它是不允许的)。但是,咱们可以或许将目标虚构地点转换为物理地点,并将咱们的改动写入物理地点。
将VA转换为物理地点的敕令是!vtop。写入物理地点的敕令是!eb。
别的,咱们还得从批处理文件中转储windbg。固然,嵌入完备的windbg装置太过于猖狂。然则,咱们这里只必要用到几个敕令罢了,以是咱们只必要嵌入一个windbg二进制文件的子集就行了:
dbgeng.dll
dbghelp.dll
kdexts.dll
kext.dll
symsrv.dll
symsrv.yes
windbg.exe
咱们将这些文件嵌入到批处理文件中,而后将它们一路转储到剧本文件中,末了应用剧本运行windbg。 运行剧本后,nt!NtCreateFile函数将被挂接。 咱们曾经应用nt!KeBugCheckEx的内存空间保留了自己的代码,为了挪用咱们寄存在nt!KeBugCheckEx中的代码,可以或许挂接一个针对nt!NtCreateFile的挪用。经由过程咱们寄存在nt!KeBugCheckEx中的代码,可以或许跳转到挪用的原始目标地,以是函数被挂接,以便运行咱们的代码,但体系不会呈现任何成绩。

上一页  [1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载