輕鬆瞭解 web 日誌分析過程

本文作者 : 木禾 (英文 ID:Ali0th)

日誌分析,其實涵蓋的面是很廣的,什麼地方都可以有日誌。而本篇文章主要針對 web 日誌做一下分析。因爲之前去學校裏授課的時候有講過一次,感覺內容挺不錯的,就寫到了文章裏。(可絕不是偷懶什麼的呢o(´^`)o)

相關資料及工具

【鏈接: https://pan.baidu.com/s/1o7FcHui 密碼: jpdn】

Lesson1 日誌格式學習

一條訪問信息記錄如下:

218.19.140.242 - - [10/Dec/2010:09:31:17 +0800] "GET /query/trendxml/district/todayreturn/month/2009-12-14/2010-12-09/haizhu_tianhe.xml HTTP/1.1" 200 1933 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)"

共有九項內容:

218.19.140.242

這是一個請求到 apache 服務器的客戶端 ip, 默認的情況下,第一項信息只是遠程主機的 ip 地址,但我們如果需要apache 查出主機的名字,可以將 HostnameLookups 設置爲 on, 但這種做法是不推薦使用,因爲它大大的減緩了服務器。另外這裏的 ip 地址不一定就是客戶主機的 ip 地址,如果 客戶端使用了代理服務器,那麼這裏的 ip 就是代理服務器的地址,而不是原機.

-

The "hyphen" in the output indicates that the requested piece of information is not available. In this case, the information that is not available is the RFC 1413 identity of the client determined by identd on the clients machine. This information is highly unreliable and should almost never be used except on tightly controlled internal networks. Apache httpd will not even attempt to determine this information unless IdentityCheck is set to On

-

這一項又是爲空白,不過這項是用戶記錄用戶 HTTP 的身份驗證,如果某些網站要求用戶進行身份驗證,那麼這一項就是記錄用戶的身份信息

[10/Dec/2010:09:31:17 +0800]

第四項是記錄請求的時間,格式爲 [day/month/year:hour:minute:second zone], 最後的 +0800 表示服務器所處的時區爲東八區

"GET /query/trendxml/district/todayreturn/month/2009-12-14/2010-12-09/haizhu_tianhe.xml HTTP/1.1"

這一項整個記錄中最有用的信息,首先,它告訴我們的服務器收到的是一個 GET 請求,其次,是客戶端請求的資源路徑,第三,客戶端使用的協議時 HTTP/1.1, 整個格式爲 "%m %U%q %H" ,即"請求方法/訪問路徑/協議"

200

這是一個狀態碼,由服務器端發送回客戶端,它告訴我們客戶端的請求是否成功,或者是重定向,或者是碰到了什麼樣的錯誤,這項值爲 200,表示服務器已經成功的響應了客戶端的請求,一般來說,這項值以 2 開頭的表示請求成功,以 3 開頭的表示重定向,以 4 開頭的標示客戶端存在某些的錯誤,以 5 開頭的標示服務器端存在某些錯誤,詳細的可以參見 HTTP specification (RFC2616 section 10) http://www.w3.org/Protocols/rfc2616/rfc2616.txt

1933

這項表示服務器向客戶端發送了多少的字節,在日誌分析統計的時侯,把這些字節加起來就可以得知服務器在某點時間內總的發送數據量是多少。

-

HTTP Referer:告訴服務器我是從哪個頁面鏈接過來的,沒有值時可能是直接打開網頁的原因。

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)"

user-agent 這項主要記錄客戶端的瀏覽器信息

Lesson2 黑客入侵日誌分析

客戶的網站被大黑闊入侵了,你現在需要做的是:

1、找到大黑闊的 IP 地址

2、大黑闊是如何找到網站後臺的?

3、大黑闊如何進入後臺?

4、大黑闊修改了什麼文件來寫一句話?

5、大黑闊通過一句話後門做了什麼?

開始做,下載日誌分析【access.log】【error.log】

可以看到是兩個黑嫲嫲的日誌,看起來不太方便,我們可以使用工具【apache log viewer】看。

世界就變成彩色的了,還有過濾功能,很方便。

找到大黑闊的 IP 地址

因爲一般來說,如果不能一下子找到後臺的話,就需要用一些目錄爆破工具,而爆破的過程中,因爲請求了很多不存在的目錄,就會出現很多 404 狀態的日誌。

我們可以看一下報錯狀態的記錄,點擊【status】,就能發現了有幾個 IP 的請求出現了404。

再往下拉,可以發現很明顯的帶有 payload 的惡意請求,它們都來自 IP【219.239.105.18】,說明這個 IP 地址就是大黑闊的地址。

大黑闊是如何找到網站後臺的?

複製這個 IP 地址。

放到過濾器裏,使用包括【include】的方式,然後應用該過濾【Apply Filter】

過濾出來的數據,點擊【Date】按遞增時間排序,就可以看到第一條記錄是【2016/8/9 2:54:12】,即是大黑闊第一次訪問時間。

往下看,可以看到出現大量 404 的訪問記錄,說明是在爆目錄。

到了【2016/8/9 22:17:02】之後明顯沒有 404 訪問記錄,說明已經停止了爆目錄,並且可以看到大黑闊開始訪問後臺了。

大黑闊如何進入後臺?

從【2016/8/9 22:37:30】開始可以看到大量的 POST 請求,幾秒之內就有多個請求,說明這是在進行爆破。

而在【2016/8/9 23:02:28】從【http://192.168.0.104/phpcms/index.php?m=admin&c=index&a=public_current_pos&menuid=10】這一條開始,請求的內容都是後臺界面纔有的,可見大黑闊成功爆破出密碼並登錄後臺。

大黑闊修改了什麼文件來寫一句話?

我們可以看到最後這一句

GET /index.php?%20%20m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=../../phpsso_server/caches/configs/database.php HTTP/1.1

通過搜索相關資料

http://blog.csdn.net/god_7z1/article/details/7816389

可以知道該漏洞的利用方法如下:

這一部分即是大黑闊在修改的時候發起的請求:

大黑闊通過一句話後門做了什麼?

可以看到讀取了數據庫的帳號密碼和系統的帳號密碼。

Lesson3 通過 SQL 注入日誌分析

客戶的網站又被大黑闊入侵了,而且還是 sql 注入的形式,你現在需要做的是

1、大黑闊使用的方法屬於 sql 注入中的什麼方法?

2、大黑闊從什麼時候開始用腳本跑數據的?

3、大黑闊的 payload 格式是怎樣的,解譯一下。

4、大黑闊拿到了什麼數據?數據內容是什麼?

下載日誌文件之後,發現是都是類似的請求

大黑闊使用的方法屬於 sql 注入中的什麼方法?

GET /?id=1%27%20and%20ascii(substr((select%20database()),1,1))%3E104%23 HTTP/1.1

很明顯是通過盲注的形式跑數據的。使用盲注的腳本可以參考:

https://github.com/yuesecurity/sqli-exploit/blob/master/sqliblind/sqlibaseblind.py

大黑闊從什麼時候開始用腳本跑數據的?

從【2017/9/2 12:20:42】開始短時間內發起大量請求。

大黑闊的 payload 格式是怎樣的,解譯一下。

payload 爲

/?id=1%27%20and%20ascii(substr((select%20database()),1,1))=114%23】

其中讀取 database(),然後 substr 選擇。

選擇出來的數據用 ascii 編碼,與後面的數字 114 比較。

大黑闊拿到了什麼數據?數據內容是什麼?

拿到 database() 和 user()。

仔細觀察,可以發現是後面的 1 去比較這個 database() 的 1 到 15 位。然後再用 2 去比較 1 到 15 位。

而判斷是否匹配的方法是看返回的包的大小:

【654】包的數量比【665】的多很多,【665】的包是盲注匹配成功時候返回的包。

於是把【665】的包裏的數值一個個寫到表格裏,用 http://evilcos.me/lab/xssor/ 轉成對應的字符。當然我比較懶,這裏沒有填完。

還是用腳本跑一下比較爽:

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