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