日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php限制一个函数在几分钟内不被调用_在PHP一句话木马使用过程中的种种坑点分析...

發(fā)布時(shí)間:2024/9/30 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php限制一个函数在几分钟内不被调用_在PHP一句话木马使用过程中的种种坑点分析... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在平時(shí)的學(xué)習(xí)和練習(xí)過程中,經(jīng)常會(huì)遇到上傳的一句話木馬無法執(zhí)行我們的命令或者說能執(zhí)行命令但是不能連接菜刀蟻劍等webshell管理工具,以及各個(gè)版本PHP所限制的一些一句話木馬的寫法,不同版本webshell管理工具無法連接一句話木馬的情況,所以打算仔細(xì)的了解一下其中的緣由。

什么是webshell

簡單來說,webshell就是一個(gè)以網(wǎng)頁形式存在的webshell,或者叫做網(wǎng)頁后門。一句話木馬,小馬,大馬這些都可以叫做webshell。一句話木馬就是只需要一行代碼的木馬,雖然一句話木馬為了繞過waf的檢測,出現(xiàn)了很多的變形,但是本質(zhì)是不變的:木馬執(zhí)行了我們發(fā)送的命令。

一句話木馬中eval和assert的區(qū)別eval 是一個(gè)語言構(gòu)造器而不是一個(gè)函數(shù)

PHP eval() 把字符串按照 PHP 代碼來計(jì)算。該字符串必須是合法的 PHP 代碼,且必須以分號(hào)結(jié)尾。

如果沒有在代碼字符串中調(diào)用 return 語句,則返回 NULL。如果代碼中存在解析錯(cuò)誤,則 eval() 函數(shù)返回 false。

在一個(gè)php文件中,eval執(zhí)行完就會(huì)結(jié)束,所以當(dāng)同一個(gè)php文件中有多個(gè)eval的時(shí)候,只會(huì)執(zhí)行第一個(gè)。

assert 是一個(gè)函數(shù),assert 這個(gè)函數(shù)在 php 語言中是用來判斷一個(gè)表達(dá)式是否成立。返回 true or false;assert 函數(shù)的參數(shù)會(huì)被執(zhí)行,這跟 eval() 類似。

assert函數(shù)在不同php版本中的限制

在php 7.2的版本說明中,我們發(fā)現(xiàn),對assert()函數(shù)傳入字符串參數(shù)已經(jīng)被禁用,在8.0版本的時(shí)候會(huì)被徹底刪除。

但是,在這種情況下

assert($_GET['pass'])

?>

我們通過pass傳入的phpinfo(),system('whoami')不是字符串,所以這種情況下是沒有php的版本限制的。

那么什么時(shí)候會(huì)被這個(gè)版本所限制呢?

先說結(jié)論:call_user_func 與 assert連用時(shí)會(huì)受到此版本限制

call_user_func 這個(gè)函數(shù)可以調(diào)用其它函數(shù),被調(diào)用的函數(shù)是 call_user_func 的第一個(gè)函數(shù),其余函數(shù)作為第一個(gè)回調(diào)函數(shù)的參數(shù)。通過這種方法,可以實(shí)現(xiàn)過waf的一些操作。

使用回調(diào)函數(shù)寫成的一句話木馬對不同php版本進(jìn)行測試

可以看到在php5.4和php7.0版本,這樣不受限制正常傳參進(jìn)行命令執(zhí)行是沒有問題的。

但是在php7.3中,沒有回先顯。

可以看到,在php7.1版本也沒有回顯

當(dāng)我們修改一句話中的內(nèi)容得時(shí)候

@call_user_func(assert,system(dir));

?>

命令重新執(zhí)行成功了。

這個(gè)原因就是,通過超全局變量 $_GET['']獲取的攻擊者輸入是字符串,這樣傳入assert函數(shù)就觸發(fā)了禁用。但是直接assert(phpinfo())傳入的參數(shù)是函數(shù),所以就不會(huì)觸發(fā)函數(shù)禁用,可以正常回顯。

得到結(jié)論:

這個(gè)禁用特性經(jīng)過我的測試是從 php 7.1 版本開始的,并不是 7.2 版本才開始(在我本機(jī)是這樣,師傅們可以在測試一下,但是道理是一樣的)。所以 call_user_func + assert 構(gòu)造的一句話木馬在 php 7.0 版本及以下可以使用。在php7.0以上就不要使用這個(gè)組合了,以免出現(xiàn)問題。

說到call_user_func這個(gè)函數(shù),在這里多提一點(diǎn),call_user_func是不能調(diào)用eval的,這是什么原因呢?

在這里,再把上面的話重復(fù)一邊

使用call_user_func,他的第一個(gè)參數(shù)是要求是函數(shù),而 eval 是一個(gè)語言構(gòu)造器而不是一個(gè)函數(shù),不能被可變函數(shù)調(diào)用。

如何構(gòu)造WebShell

木馬的構(gòu)成無非就是兩部分:接收攻擊者輸入的參數(shù)

命令執(zhí)行函數(shù)

在對一個(gè)webshell進(jìn)行調(diào)試的過程中,一般采用下面的方法,逐步進(jìn)行把函數(shù)寫在 php 文件中,看能否執(zhí)行

寫成 $_GET['']方式傳入命令,看能否執(zhí)行

寫成 $_POST['']方式傳入命令,能能否執(zhí)行命令

當(dāng)然2、3步可以合成通過$_REQUEST['']方法傳入命令。通過這樣逐步調(diào)試的方法,雖然有些笨重,但是效果還是比較好的,可以清晰的知道,是因?yàn)閭鲄栴}還是因?yàn)楸旧砻顖?zhí)行函數(shù)的問題導(dǎo)致木馬失效。

在這里補(bǔ)充一個(gè)坑點(diǎn)

有些版本的中國菜刀連接php一句話不支持assert,老版本可以

既然老版本菜刀可以連上php的一句話木馬,新的版本連不上。那么,就會(huì)想到可能是在菜刀連接一句話木馬的時(shí)候,中間會(huì)由于編碼問題導(dǎo)致連接失敗。當(dāng)然在后邊的操作中證明這個(gè)猜想是錯(cuò)誤的。

在使用wireshark對不同版本的連刀進(jìn)行抓包的過程中,會(huì)發(fā)現(xiàn)post發(fā)送的三個(gè)變量中,只有第一個(gè)變量是不同的。其余兩個(gè)變量都相同。那么,很顯然,問題就出在第一個(gè)變量中。在新的版本的第一個(gè)變量中,存在多條語句,而老版本的變量一里面只有一條語句。

考慮到,既然eval的一句話可以使用,而assert的一句話不能使用,那應(yīng)該是eval和assert用法不同造成這個(gè)問題。通過文檔可以發(fā)現(xiàn)assert是判斷一條語句是否為FALSE(注意只是一條),而eval是把當(dāng)前字符串作為代碼執(zhí)行(可以是多條)。

得出結(jié)論:

由于assert的單個(gè)語句的限制和新版菜刀第一個(gè)變量是多條語句導(dǎo)致assert的一句話新版菜刀不能使用。

它所造成的影響是所有assert的一句話在新版本的菜刀中都不能用,但可以使用老版本。

(這里的新版本指的是20141213,老版本測試的時(shí)候用的是菜刀1.0)

bypass WAF

WAF 通常以關(guān)鍵字判斷是否為一句話木馬,但是可以通過對一句話木馬的變形,動(dòng)態(tài)調(diào)用,隱藏或者替換關(guān)鍵字,達(dá)到繞過WAF的目的。所以想要繞過 WAF,就需要掌握各種 PHP 小技巧,掌握的技巧多了,把技巧結(jié)合起來,才可以設(shè)計(jì)出符合當(dāng)時(shí)環(huán)境的一句話木馬。

有關(guān)具體可以bypass的一句話在這里就不做羅列了,網(wǎng)上有大量的學(xué)習(xí)資源,社區(qū)以前的文章也有過專門分析如何繞過waf的文章。(傳送門)

好多朋友在學(xué)習(xí)過程中常會(huì)收集一些tips,通過這些tips可以讓自己的滲透和挖洞更高效。但是攻防始終是動(dòng)態(tài)的,不可能死吃以前的tips,本著學(xué)習(xí)的態(tài)度萬變不離其宗,不斷地收獲小技巧又不斷地消化小技巧,才能寫出自己的一套高質(zhì)量tips。

關(guān)于bypass的思想和方法,在這里我貼上P神的文章(創(chuàng)造tips的秘籍——PHP回調(diào)后門)其中講了一類名為回調(diào)后門的一句話木馬。其中的思想至今仍然是可用的,非常值得學(xué)習(xí)。

在寫一句話木馬時(shí)候,建議大家在eval,assert前面加上@,雖然對執(zhí)行結(jié)果本質(zhì)上沒有什么區(qū)別,但是@的作用是忽略可能出現(xiàn)的錯(cuò)誤。這個(gè)小細(xì)節(jié)可以更便于木馬的隱藏。

一句話木馬在連接webshell管理工具的時(shí)候常出現(xiàn)的坑點(diǎn)

對于webshell管理工具,常見的有以下十類:

1.中國菜刀

使用方便,小巧實(shí)用,凡是支持動(dòng)態(tài)腳本的網(wǎng)站,都可以使用中國菜刀進(jìn)行管理。UNICOODE方式編譯,支持多國語言輸入顯示。

2.蟻劍

開源,跨平臺(tái)的網(wǎng)站管理工具,插件很豐富,平常使用最多的webshell管理工具。

3.C刀

跨平臺(tái)基于配置文件的中國菜刀,所有操作由用戶來定義

4.冰蝎

動(dòng)態(tài)二進(jìn)制加密網(wǎng)站管理客戶端

5.Xise

6.Altman

7.Weevely

8.QuasiBot

9.Webshell-Snipe

10.WeManager

上邊的工具,仁者見仁智者見智,適合自己的就是最好的。我平時(shí)用的最多的是蟻劍,其次是菜刀。這里分享一下我在使用菜刀和蟻劍遇到的坑點(diǎn)。

新版本菜刀:

上文提到過,在新版本的菜刀不要連接assert的一句話。由于assert的單個(gè)語句的限制和新版菜刀第一個(gè)變量是多條語句導(dǎo)致assert的一句話新版菜刀不能使用。

蟻劍:

首先是蟻劍的安裝,下載后在對蟻劍進(jìn)行初始化的時(shí)候要注意兩點(diǎn):

1.安裝路徑必須是全英文路徑

2.使用管理員身份打開并進(jìn)行初始化,否則會(huì)遇到下載失敗以及代碼解壓失敗等bug。

在蟻劍連接一句話木馬的時(shí)候

盡量不要使用default和random編碼器。使用default有些時(shí)候會(huì)連不上馬,使用random則可能導(dǎo)致連馬失敗或者連馬的等待時(shí)間過長。可以使用base64等其他編碼。

舉例:

=1;assert($_POST['a']);?>

default編碼:

base64編碼:

總結(jié):

本文所涉及的內(nèi)容包括:一句話木馬中eval和assert的區(qū)別

assert函數(shù)在不同php版本中的限制

call_user_func + assert組合的使用條件

如何構(gòu)造WebShell

bypass WAF的思路

新老版本連接菜刀出現(xiàn)的問題

一句話木馬在連接webshell管理工具的時(shí)候常出現(xiàn)的坑點(diǎn)

上邊文章中所講到的坑點(diǎn),都是我在實(shí)際的學(xué)習(xí)過程中遇到過的或者疑惑的地方,在這里一起分享給大家,疏漏之處,也請師父們多加補(bǔ)充和指導(dǎo)。知識(shí)點(diǎn)雖然看上去比較零散,但是當(dāng)把這些弄明白以后,無形中就會(huì)明白這些坑點(diǎn)所涉及的知識(shí)網(wǎng)。最后希望大家在學(xué)習(xí)的路上可以逢山開路,遇水架橋,有坑填坑,沒坑自己不挖坑。

總結(jié)

以上是生活随笔為你收集整理的php限制一个函数在几分钟内不被调用_在PHP一句话木马使用过程中的种种坑点分析...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。