[ACTF2020 新生賽]BackupFile
嘗試找到源代碼,加上題目是備份文件,猜測備份文件里面有網站的源代碼,御劍掃描一下,就掃到index.php
訪問index.php.bak
下載源代碼:
<?php include_once "flag.php"; if(isset($_GET['key'])) { $key = $_GET['key']; if(!is_numeric($key)) { exit("Just num!"); } $key = intval($key); $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3"; if($key == $str) { echo $flag; } } else { echo "Try to find out source file!"; }
需要GET方法傳入key值,並且key使用有漏洞的is_numeric函數進行判斷是否是數字,接着與$str進行比較,$str是一串字母和數字的字母串
可以注意到比較的時候使用的是==,弱類型比較。在比較的過程中因為$key是數字,所以str也會被隱性地轉換成整型,即123
所以我們輸入$key=123就可以了
[ACTF2020 新生賽]Upload
點擊小燈泡發現文件上傳的位置
上傳chopper.php,發現被攔截了
修改后綴名上傳並抓包,改回php后綴
使用00截斷之后發現上傳文件名是后綴名
嘗試后綴名大小寫繞過之后,好像文件沒有正確解析
猜測后端應該是黑名單過濾,但是解析的時候有的又會出現問題
用一些不常見的后綴如.phtml,成功上馬並連接
在根目錄下找到flag
[GYCTF2020]Blacklist
這種題目在強網杯的隨便注里面出現過,我們使用1'||1--+列出當前表的所有內容
輸入一個select看看過濾條件
相比較於強網杯--隨便注過濾的東西更多了
同樣,select,和 . 被過濾了,在這種情況下想要跨表查詢是很困難的,我們想到使用堆疊注入
原來的payload是這樣的:
payload = "0';set @s=concat(%s);PREPARE a FROM @s;EXECUTE a;"
但是set 和prepare被過濾
在強網杯隨便注中的另外一種繞過方式,是修改表名來偷天換日,但是這里也將alter和rename進行了過濾,禁止了這種方式
這里使用另外一種堆疊注入的奇技淫巧,看MySQL官方文檔:https://dev.mysql.com/doc/refman/8.0/en/handler.html
該HANDLER ... OPEN語句打開一個表,使其可以使用后續HANDLER ... READ語句訪問。該表對象未被其他會話共享,並且在會話調用HANDLER ... CLOSE或會話終止之前不會關閉 。
因為HEANDLER ... OPEN 打開一個表 ,所以 我們先查看有哪些表
?inject=1%27%20%20;%20show%20tables--+
有一個FlagHere的表
在官方示例中,打開了數據表之后,是這樣讀取數據的
我們使用FIRST讀取第一條數據,最后的payload為:
?inject=1%27;HANDLER%20FlagHere%20OPEN;HANDLER%20FlagHere%20READ%20FIRST;HANDLER%20FlagHere%20CLOSE;#
又學習到了一個知識點
參考博客:
https://www.cnblogs.com/gaonuoqi/p/12398554.html