1. 程式人生 > 其它 >ctf_show-web入門-命令執行(118-124)

ctf_show-web入門-命令執行(118-124)

web-118

測試了一下發現數字和字母過濾了,第一反應是無符號rce,發現走不通。

後面發現大寫字母沒過濾,這裡可以參考月餅杯web3的方法

https://www.cnblogs.com/aninock/p/15360157.html

我們想辦法輸出 flag.php即可,輸出語句可以用nl

可以看到PATH有n和l,但是之前是用數字來取想要的字元的,但是這裡過濾了數字

我們先看一下~取尾部

我們可以看到~取1會取末尾的兩個字元,同理:~0會取到最後一個字元,但是過濾了數字,我們可以嘗試用字母代替數字看看效果如何:

可以發現字母會當作0來處理,這樣我們取到了n,還差個l

這裡用:即可$PWD最後一位即可,這裡路徑是/var/www/html最後一位正好是l

至於flag.php 用????.???代替即可

最終payload

${PATH:~A}${PWD:~A} ????.???

web119

測試,過濾了PATH

這裡發現構造nl比較難,可以用shell的base64,這會用base64格式輸出

base64路徑在/bin/base64,用?匹配的時候要匹配全路徑,不能只匹配base64

我們可以嘗試用/???/?????4來匹配

指令中的4可以用${#RANDOM} 來得到

而/可以從$PWD中提取,第一個符號就是,那麼就要想辦法獲得1,

1可以用SHLVL來獲得


payload(由於用了隨機函式,可能要多試幾次)

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???

web120

給了原始碼,限制了長度,同時給明瞭黑名單。

其他同119

web121

過濾了大部分系統變數

和119的payload相比,主要書過濾了SHLVL,其他都沒過濾。而SHLVL是構造數字1的。因此我們要想辦法構造數字1

這裡可以用$?來代替,然後#?取他的長度即可

$?
最後執行的命令的結束程式碼(返回值)即執行上一個指令的返回值 (顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)

那麼改一下payload即可

${PWD::${#?}}???${PWD::${#?}}?????${#RANDOM} ????.???

web122

首先是過濾了#,導致我們沒法取內建變數長度了(同時也過濾了pwd,,但是放開了home)

我們可以用$?來,我們想讓它返回1,這裡設定上一條語句為<1

payload

<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

這裡要多重新整理會兒

web124、

CISCN 2019 初賽原題lovemath