平台:buuoj.cn
開啟靶機
有個登入和註冊,開啟登入框看看
萬能密碼,sql注入fuzz,弱密碼全跑一遍,沒什麼變化,那就註冊看看。
進去之後出現使用者記錄。
點進使用者名稱看看,這是注意到url:
有可能存在注入,試著讓他報錯。
單引號測試:
可以看到除了資料庫錯誤外,還直接顯示出了物理路徑。
把東西先註出來再說,這裡過濾了一些東西,我這就直接sqlmap跑一下了,加個–no-cast引數
當然可以手注,看別的師傅是用報錯成功注入
一系列流程走一遍最後發現除了admin和passwd外,注出來有個列裡有個data序列化字串:
嗯。。。忽略了乙個東西,dirsearch掃一下發現有個robots.txt和flag.php,flag.php應該就是要讀取flag的地方了,robots.txt提示有個index,php.bak備份檔案,下下來看看:
<?php
class
userinfo
function
get(
$url
)curl_close
($ch);
return
$output;}
public
function getblogcontents (
)public
function isvalidblog (
)(\:[0-9]+)?(\/\s*)?$/i"
,$blog);
}}
get方法裡有curl函式,翻翻手冊:
curl_init:初始化新的會話,返回 curl 控制代碼,供curl_setopt()、 curl_exec() 和 curl_close() 函式使用。getblogcontents呼叫get方法curl_setopt:為 curl 會話控制代碼設定選項。
curl_exec:執行給定的 curl 會話。
curl_getinfo:獲取最後一次傳輸的相關資訊。
還有個waf限制註冊時直接讀取flag.php
來看get方法,curl會訪問url並返回頁面,而getblogcontents則呼叫get訪問blog中的url,因此這裡存在ssrf
ssrf(server-side request forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的乙個安全漏洞。一般情況下,ssrf是要目標**的內部系統。(因為他是從內部系統訪問的,所有可以通過它攻擊外網無法訪問的內部系統,也就是把目標**當中間人)假如我們把url設定成我們想要的位址,就可以訪問伺服器內部檔案。
結合我們前面得到的序列化,將123.com設定為file協議讀取flag.php
<?php
class
userinfo
$data
=new
userinfo()
;echo
serialize
($data);
//o:8:"userinfo":3:
最後在view.php?no=1後面構造個聯合查詢
原始碼返回base64字串,解碼即得flag
從這位師傅學到了還有個非預期,在view.php?no=*中沒有過濾load_file函式,導致可以直接讀到flag.php,盲注下/var/www/html/flag.php位置欄位即得flag。
網鼎盃2020朱雀組 web
nmap那題就基本命令然後還有乙個別的方法。用的是nmap,提示 一開始以為是ping命令,後來發現過濾了php。後來試了下nmap的命令組合成功了。payload il flag on flag.txt 存入flag.txt之後直接訪問就行了 php escapeshell 命令執行 因為過濾了p...
網鼎盃 2020 朱雀組 phpweb
在這裡插入 片 重新整理過後 看到他兩個post引數 他名字提示的很明顯了,就是這個函式可以進行任意更改 我起初換成system 直接命令執行 可能他過濾了某些函式,那就讀一下index.php的內容 disable fun array exec shell exec system passthru...
網鼎盃 2020 青龍組 AreUSerialz
知識點 php強型別比較,可以通過 不同型別 達到繞過目的 php7.1以上版本 對類的型別定義不敏感 file get contents 偽協議檔案讀取 include flag.php highlight file file class filehandler public function p...