CTF训练计划—[CISCN2019]Easyweb
前言:
這道題學到不少知識,還卡了很長時間,單獨記錄一下
[CISCN2019]Easyweb
首先拿到一個登陸框,從這里就要思考是要怎么去做,我在做的時候想到三個方面去嘗試
前兩個都行不通,剛開始頁面掃描的時候也沒有掃到什么,然后就徹底懵了,后來發現是工具犯病了,再掃一次就出來了
一個robots.txt文件,訪問可以發現提示的是備份文件,但沒說具體的文件名
就利用排除法,一個一個的去試試,目前知道有index.php,user.php(登陸抓包即可發現),然后是image.php(查看頁面源碼即可發現),在嘗試的過程中,發現image.php是可以下載備份文件的
看代碼是可以進行SQL注入的,但需要通過addslashes、str_replace兩個函數的處理。這里先補充一些知識
再回過頭看代碼,str_replace函數會查找我們輸入的內容,如果找到"\\0","%00","\\'","'"其中一個都會過濾為空,而且最為重要的是單引號被過濾了,既然無法引入單引號,只能在\做手腳來破壞SQL語句中的單引號,從而造成SQL注入,接下來就自己先在本地進行測試一下
將代碼修改成這樣,便于我們直接看兩個函數處理過后的結果。
(PS:這里要說明的一點是做題并不都是那種死套模板的,這題設置的很巧妙,不是那種什么base、hex就繞過了,而是需要自己去思考、測試如何去繞過。)
其實這里我在沒有手動測試的時候有一個疑問,就是比如我輸入的payload是\0,經過addslashes函數處理變為了\\0,然后再經過str_replace函數的處理,與其中的\\0匹配,所以最后的id應該是空的,但是測試了發現結果大不相同,然后才明白這個數組中多一個\其實也是進行特殊字符的轉義
那這個payload就可以用,因為SQL語句中的單引號已經被破壞
前面閉合了,便可以執行后面的命令,除此之外的也可以使用
id=\0'
結果也是一樣的,繼續看代碼,一開始以為是要去讀取文件源碼獲取下一步線索,結果讀不出來
進行SQL注入發現了這個地方存在盲注,如果輸入的path參數條件為真即顯示貓,為假則報錯
既然payload已經測出來了,下面就來寫腳本,目前我只能寫出循環遍歷的腳本還是太菜了
payload中的%%其實就用于SQL語句時相當于一個%,用%%代替%加上是為了避免報錯
還有一點就是腳本中id的payload多了一個\,這是因為**URL傳遞\0的時候在字符串中多加個**。
并且由于單引號不能繞過,所以用到表名等可以借助十六進制串來表示。
(如果報錯了,覺得腳本沒有問題,就換下格式化符號,之前用的format,怎么都跑不出來,用了%,就直接出來了)
得到賬號和密碼,登陸進去,發現是文件上傳
隨便上傳一句話,都會發現這樣一句話
跟著路徑查看一下發現
根據提示信息,上傳的文件名被傳到這個php日志文件中去,那就可以把上傳的文件名改成一句話木馬進行上傳
但是上傳不上去,含有php,所以要找其他方法去替代。
嘗試了第二個方法,發現可行
蟻劍連接即可
參考博客
https://www.freebuf.com/column/212586.html
總結
多思考,多動手,多測試
總結
以上是生活随笔為你收集整理的CTF训练计划—[CISCN2019]Easyweb的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提权学习之旅——基础篇
- 下一篇: 提权学习之旅——利用Metasploit