天天看點

網絡安全系列之四 手工SQL注入(ASP)

SQL注入是黑客對資料庫進行攻擊的常用手段之一,其核心思想在于:黑客在正常的需要調用資料庫資料的URL後面構造一段資料庫查詢代碼,然後根據傳回的結果,進而獲得想要的某些資料。下面我們就對之前已經搭建好的滲透平台進行SQL注入,最終目的是獲得網站的管理者賬号和密碼。目标伺服器IP位址:192.168.80.129,黑客主機IP位址:192.168.80.128。

(1)尋找注入點

随便打開一個網頁,注意觀察URL。

<a href="http://yttitan.blog.51cto.com/attachment/201410/7/70821_14126450848rXr.png" target="_blank"></a>

注入點必定是類似“http://192.168.80.129/shownews.asp?id=7”這類存在指令調用的頁面,“shownews.asp?id=7”是頁面傳值,就是将“id=7”傳到“shownews.asp”頁面裡進行處理。

我們可以在這個URL後面加上and 1=1和and 1=2進行測試。

http://192.168.80.129/shownews.asp?id=7 and 1=1 ,網頁仍能正常顯示。

http://192.168.80.129/shownews.asp?id=7 and 1=2 ,網頁無法正常顯示。

這就表明“asp?”把我們自己加上的“and 1=1”也作為一個指令參數進行了調用,那我們就可以來構造一些SQL語句來被調用執行,進而得到需要的資訊,這就是所謂的注入漏洞。像這樣可以調用指令參數的網頁就稱為注入點。

(2)猜表名

黑客進行網站滲透的主要目的是獲得網站管理者的使用者名和密碼,使用者名和密碼都是存放在背景資料庫的某個表中,是以首先我們得猜出這個資料表的名字是什麼。

表名用的最多的是admin和admin_user,我們可以在注入點URL的後面加上這樣一條語句來猜表名:

http://192.168.80.129/shownews.asp?id=7 and (select count(*) from admin) &gt; 0

“select count(*) from admin”的意思是統計admin表中有幾條記錄,如果admin表存在,那麼這條語句就會得到一個數值。用這個數值跟&gt;0比較,結果肯定是成立的,是以此時網頁應該正常顯示。反之,如果admin表不存在,那麼“select count(*) from admin”就得不到任何數值,跟&gt;0比較,結果不成立,網頁也就無法正常顯示。

如果網頁不能正常顯示,可以再換一個表名進行嘗試,直到正常顯示為止:

http://192.168.80.129/shownews.asp?id=7 and (select count(*) from admin_user) &gt; 0

http://192.168.80.129/shownews.asp?id=7 and (select count(*) from manage_user) &gt; 0

這個網站的表名就是manage_user。

常見表名主要有:admin sysadmin manger admin123 webadmin member manage_user

注意:如果表名實在猜不出來,也可以使用明小子之類的工具來幫忙。

<a href="http://yttitan.blog.51cto.com/attachment/201410/7/70821_14126450857w4d.png" target="_blank"></a>

(3)猜字段的數量

下一步是猜這個表中哪個字段存放着使用者名和密碼,首先需要知道資料表中一共有幾個字段。

這裡要用到“order by”語句,“order by”的本意是按某個字段排序,“order by 10”就是按第10個字段排序,如果第10個字段存在,那麼網頁就會正常顯示,否則如果網頁無法正常顯示,則表明第10字段不存在。

通過這種方法可以猜出這個表一共有11個字段。

(4)猜字段名

下一步是需要知道哪個字段存放着使用者名和密碼,這裡用到“union select”聯合查詢語句。

http://192.168.80.129/shownews.asp?id=7 union select 1,2,3,4,5,6,7,8,9,10,11 from manage_user

這裡會将存放使用者名和密碼的字段爆出。

<a href="http://yttitan.blog.51cto.com/attachment/201410/7/70821_1412645086HqOi.png" target="_blank"></a>

存放使用者名的字段一般叫username,存放密碼的字段一般叫password,将第2和第3字段替換成這兩個名字:

http://192.168.80.129/shownews.asp?id=7 union select 1,username,password,4,5,6,7,8,9,10,11 from manage_user

這時就将使用者名和密碼爆出了。

<a href="http://yttitan.blog.51cto.com/attachment/201410/7/70821_1412645086ghJ9.png" target="_blank"></a>

(5)猜背景管理入口

<a href="http://yttitan.blog.51cto.com/attachment/201410/7/70821_1412645087md6h.png" target="_blank"></a>

在這裡就可以用之前爆出的管理者賬号和密碼來登入,但是密碼“3acdbb255b45d296”很明顯是經過MD5加密的,如何才能解密呢?這将在下篇博文來介紹。

本文轉自 yttitan 51CTO部落格,原文連結:http://blog.51cto.com/yttitan/1560917