來源:http://bbs.ichunqiu.com/thread-10090-1-1.html?from=ch
很高興又跟大家見面了谷徙,蛋總老是說我只會打狗什么的 經(jīng)過一段時間的對web安全的學(xué)習(xí) 我要證明給他看我不僅僅會過狗舀寓,你們會的我小king也不會比你們差 所以就給大家發(fā)這樣的一個帖子0呋!市埋! 希望大家多多學(xué)習(xí)? 提取意見。
在開始之前讓我們先了解下 php??mysql吧
mysql
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng)恕刘,由瑞典MySQL AB 公司開發(fā)缤谎,目前屬于Oracle旗下產(chǎn)品。MySQL 最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)褐着,在 WEB 應(yīng)用方面 MySQL是最好的 RDBMS (Relational Database Management System坷澡,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng)含蓉,關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中频敛,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性馅扣。MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言斟赚。MySQL 軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版差油,由于其體積小拗军、速度快任洞、總體擁有成本低,尤其是開放源碼這一特點(diǎn)发侵,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫交掏。由于其社區(qū)版的性能卓越,搭配 PHP 和 Apache 可組成良好的開發(fā)環(huán)境
php
外文名
HP: Hypertext Preprocessor刃鳄,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言盅弛。語法吸收了C語言、Java和Perl的特點(diǎn)叔锐,利于學(xué)習(xí)熊尉,使用廣泛,主要適用于Web開發(fā)領(lǐng)域掌腰。PHP 獨(dú)特的語法混合了C狰住、Java、Perl以及PHP自創(chuàng)的語法齿梁。它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁催植。用PHP做出的動態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)文檔中去執(zhí)行勺择,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多创南;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行省核,使代碼運(yùn)行更快
看過這些之后 我們都應(yīng)該知道 php??mysql的功能以及用途??當(dāng)然上面也說了 mysql+apache+php 這是一個很好的組合 目前國內(nèi)非常之流行 這也給php帶來了很好的市場 是更多程序員去學(xué)習(xí)這一門編程語言??這里說明一下??mysql為什么有這么好的口碑??大家應(yīng)該都知道 Access 數(shù)據(jù)庫??我們就拿它跟mysql比較??Access數(shù)據(jù)庫的結(jié)構(gòu) :數(shù)據(jù)庫-->數(shù)據(jù)表-->記錄--->字段??那么 MySQL呢MySQL 分為很多的數(shù)據(jù)庫 也就是說它的數(shù)據(jù)庫不止一個 數(shù)據(jù)庫A-表名-列名-數(shù)據(jù)數(shù)據(jù)庫B-表名-列名-數(shù)據(jù) 這也就給我們帶來了一定的困難 為什么這樣說呢??一般我們在進(jìn)行注入猜解的時候 往往是不知道他是那個數(shù)據(jù)庫 但Access呢他只有一個數(shù)據(jù)庫 這樣就對我們帶來了很大的幫助??一般直接進(jìn)行猜解就可以了??這也決定了 Access 現(xiàn)在的市場使用情況
下面就由我給大家 展示下吧
哪些存在注入的頁面是怎樣的一個運(yùn)作原理呢稿辙? 這點(diǎn)我想大家應(yīng)該非常想知道??其實(shí)很簡單??三句話就能知道他的運(yùn)作原理
1.??接受參數(shù)
2.??數(shù)據(jù)庫連接,選擇气忠,定義sql語句的組合邻储,執(zhí)行sql語句
3.??返回執(zhí)行的結(jié)果以及界面
這是我自己寫的一個??存在注入的頁面??下面我就給大家 講解下他的原理
//1 這句的意思就是:接受參數(shù)名x的值并賦值給變量id
//2 連接數(shù)據(jù)庫??root??root 就是連接的密碼??127.0.0.1是數(shù)據(jù)庫的地址
//3 選擇數(shù)據(jù)庫
//4 定義sql語句??看你輸入的sql語句是什么意思 組合起來
//5 執(zhí)行sql語句 跟上面定義sql語句是緊緊相連的
//6 遍歷結(jié)果顯示 這里就很重要了 他就是把你的sql語句代入到數(shù)據(jù)庫查詢后 顯示出來的數(shù)據(jù)
//7 遍歷結(jié)果顯示
//8 顯示當(dāng)前執(zhí)行的sql語句 這里就是把你輸入的sql語句顯示出來
那么他的注入究竟是出現(xiàn)在哪里呢??//4??這里??為什么呢?
答旧噪;接受參數(shù)值未進(jìn)行過濾??主要就是這樣的??他直接就把 id=$id來處理了??沒有進(jìn)行任何的過濾 這也就造成了嚴(yán)重的sql注入
如何修復(fù)此類注入吨娜? 有兩種方法
1.過濾他的參數(shù)值 就是針對病原下手 id=$id 這里 這時候我們就要用到 php中的一個函數(shù)了
is_numeric 這個函數(shù)??他是什么意思呢??他就是檢測變量是否為數(shù)字或者數(shù)字字符串 這里有什么用呢??你可以想下 如果我們把它加在變量函數(shù)id后面呢??這樣就阻止了 我們的注入 我們注入一般 都是 先檢測是否存在??and 1=1 正確 and 1=2 錯誤 如果這兩點(diǎn)不能符合那么程序就可能不存在 注入 我們看一下效果!
箭頭所指的就是我們所加的函數(shù)??下面的是什么意思呢??就是說如果上面的id中存在不是數(shù)字的字符 那么我們就不帶入查詢也就不能進(jìn)行//4這個步驟了 就直接顯示非法字符了
效果很明顯的 這也就是對癥下藥的含義了
2.針對指定關(guān)鍵字的過濾? ?我們玩注入這點(diǎn) 進(jìn)行猜解肯定 需要 一些sql組合的語句??別人 union select 這些組合??如果管理員吧你的這些關(guān)鍵字給過濾了 你怎么辦??這是就要用到 str_replace()函數(shù)
[PHP]純文本查看復(fù)制代碼
1
2
3
echostr_replace("world","Shanghai","Hello world!");
?>
這段代碼的意思就是 把字符串 hello world 中的 world 替換成shanghai??那么如果我們將 關(guān)鍵字 union 或者 select替換成空格或者1 2 3這樣的字符呢 我們來看看效果
這里我吧select 替換成了 空格 我們看看他的效果吧
這里就可以看出來了 他針對 select 這個sql語句進(jìn)行了 過濾 但是他只針對了 小寫的select 如果我們 將select中的任意一個字母 變成大寫呢
QQ截圖20160814113030.png(47.07 KB, 下載次數(shù): 0)
9?小時前上傳
這里我將select 中的 e 變成大寫的E 就成功查詢了 這樣也給我們帶來了一些可以利用的空間??這也突出了 str_replace()函數(shù)的弱點(diǎn) 不足之處
這次就到這里吧 希望大家能夠 認(rèn)真學(xué)習(xí)淘钟!