BUUCTF-web Easyweb


從這道題學到了挺多

一打開題目就是登陸頁面,遂掃描文件檢測是否存在文件泄露

 

 

 用dirsearch掃出了robots.txt,.DS_Store和其他php。DS_Store沒有可用信息(buuoj的題掃描一定不能太快。。。。429警告)

打開robots.txt,要素察覺,有備份文件。

 

逐個嘗試,發現了image.php.bak文件,分析一波源碼

<?php
include "config.php";

$id=isset($_GET["id"])?$_GET["id"]:"1";
$path=isset($_GET["path"])?$_GET["path"]:"";

$id=addslashes($id);
$path=addslashes($path);

$id=str_replace(array("\\0","%00","\\'","'"),"",$id);
$path=str_replace(array("\\0","%00","\\'","'"),"",$path);

$result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

$path="./" . $row["path"];
header("Content-Type: image/jpeg");
readfile($path);

addslashes函數會在預定字符前加\,如果我們在id參數傳入\0,經過addslashes函數處理就會變為\\0,然而后面的str_replace把\0置換為空,那
么我們插入的\\0就會變成\,把id參數后的'轉義。此時我們的sql語句如下
select * from images where id='or path=''

可以在path參數進行注入,注釋掉后面的單引號並用and 1=1構造注入

select * from images where id='or path='and 1=1--+'

也可以利用path重新構造id進行注入

select * from images where id='or path=' or id=1--+'

腳本如下

 

 注入這里搞了半天,密碼比較長。把n的范圍設到20才爆出完整密碼

因為手工太慢了所以嘗試了sqlmap

sqlmap牛逼!!不過這里有個坑。。。。\0前要加\轉義讓\失去轉義功能,可以用v參數查看注入的payload來調整語句

查到用戶名和密碼登錄之后發現上傳點

隨便傳個文件,返回結果里顯示有上傳路徑

打開之后發現是日志文件,用來記錄上傳的文件名

 

 

接下來思路就很清晰了,這是個php文件,並且會記錄文件名。我們只需要把文件名改成一句話。上傳之后就會被解析成php。一般的一句話會被攔截,因為出現了"php"。我們可以采用短標簽<?=  ?>代替<?php  ?>

蟻劍連接,flag在根目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM