1. 程式人生 > >php 過狗一句話木馬的編寫

php 過狗一句話木馬的編寫


我們都知道 這個是php一句話  <?php assert($_POST['mima']); ?>


可是伺服器的安全狗會識別到,我們要經過一些處理,


讓安全狗不能認出我們的程式碼是一句話木馬。


好多小白只會用一句話,但是不知道原理,我先大概說一下一句話木馬的原理


assert是一個php的函式


assert(這裡寫程式碼) 


這個函式會執行括號裡的程式碼,(eval 的一句話木馬類似 區別不細說)


$_POST['mima'];


這句的意思是 接收表單的name為 "mima"的資料


怎麼接收?通過POST請求,例如我們post mima=1234,那麼$_POST['mima']的值就是1234


如果我們語句構造成這個


assert($_POST['mima']);


然後再post mima = system("whoami") 等等神奇的程式碼呢?會不會執行?


我們看看效果,我用我的過狗一句話試試

我用的是火狐的 hackbar外掛。


命令成功執行了,我們再試試其他的


phpinfo成功執行。

原理就講到這裡吧,接下來直播寫過狗的一句話。
思路:讓assert執行我們post的資料,但是要讓狗看不明白我們的程式碼
我剛學php,只清楚一點點函式,但是過狗足夠了。
我們用想到的方法,用幾個簡單的函式組合拼湊,然後腦洞大開,寫出神奇的程式碼,寫的自己看都要費勁,這樣安全狗可能就不會認識了


我們可能會用到的函式:
base64_encode() 這是base64加密函式
base64_decode() 這個解密
str_replace(a,b,c) 把字串c裡面的a字串用b代替

為了避免等下寫的不過狗,我就用我的過狗來講吧,太晚了就不再開腦洞了。
之前只是介紹過狗常用的簡單函式,不一定用到哦
拿出我的Dreamweaver,寫上最初的一句話

這肯定被認出
為了方便先拆開寫,把post的資料先賦值給變數 $aa


如果沒有狗的話,效果跟一句話木馬一樣,可是狗肯定還是看得出,再改改。
狗不允許我們用assert執行我們post 過來的程式碼,但是我們用assert執行其他的程式碼。
我們把post過來的資料假裝改成了其他的資料,這樣就騙過狗狗了。



看**作


我們再加一個post的資料,接收的變數名叫什麼都行,我這裡叫xxx
然後再賦值給變數$bb
再建立一個變數$cc,它等於 字串 $aa 連上字串 $bb,
例如$aa ="我是" ,$bb = "father",
那麼$cc=$aa.$bb 之後,$cc 就是 “我是father”這個字串。
$cc 裡面有$aa 和$bb,我們只要不 給$bb 賦值(不post “xxx”),
這樣$cc裡的資料就是 $aa了,我們assert($cc)就可以達到目的。
不過萬一就是想給 $bb賦值,就是想 post xxx = asdfasdfasfd 怎麼辦,
萬一不夠複雜狗看得出呢(剛剛好奇試了試,已經可以做到不被攔截了
我們再加一點程式碼,畢竟開頭說了三個函式,一個都不用太沒面子了。
(安全狗的攔截機制和查殺機制不一樣,有些馬可以不被攔截,但是手動用安全狗掃描一下還是可能會被發現,所以再改改吧
我們用str_replace 把$cc裡面的$bb去掉 如圖


str_replace的第二個引數是 ‘ ’ 就類似刪除的意思,
把改好的資料賦值給$dd
我們把assert 裡的值改為剛剛的$dd,這樣我們執行的 $dd 就是我們一開始的$aa,就不受$bb的影響了。我們看看效果


我的安全狗一直開著呢,已經繞過了,
mima = 要執行的命令,
xxx="這裡寫什麼都可以,不影響命令的執行,也可以不寫",
我們什麼都不提交試試看


報錯了,因為我們程式碼有 $_POST['mima']; $_POST['xxx'];這兩句,但是我們沒有post,他接收不到資料,所以報錯了,這樣可不行,太明顯了。
做過php開發的都知道,可以在$_POST前面加@ , @ 是不顯示錯誤的意思,普通的一句話也都在$_POST前面加 @ 
修改後的程式碼


我在assert前面加了 @ 這樣輸錯命令也不會報錯。
我們用安全狗掃描一下是不是真的能過狗狗。


木馬可以執行,未攔截,而且手工查殺殺不出,我們用菜刀試試


密碼就是我們的變數 $aa 通過post傳入的資料的 name名,我這裡就是 mima,


菜刀成功連上。大家可以試試我的一句話是否能過狗,有什麼問題回帖,我能答得上來的肯定會回答。
快四點了,我沒猝死的話 呸呸呸,我沒飛昇的話,明天寫個更簡便更高大上更**的出來。 呀大佬別噴我