什么是SQL注入?
還記得小學語文考試上的填空題嗎?題目的意圖明顯是通過填空來了解答題者的名字和愛好。
比如:我是_______________,喜歡__________________
假如有同學填成下面這樣?
我是超級蜘蛛池,我可以引蜘蛛快速提高收錄,喜歡_______________________

這就是一個注入的例子,當出題者以為他已經定下了句子的主體結構,需要填空的內容是不會影響主體結構的,而填空者卻通過填寫的內容,修改了整句話的結構,這就是注入。
通過精心構造的URL參數,或者表單提交的參數,拼接到預先定義好的SQL格式時,意外地改變了程序員預期的SQL結構時,SQL注入就構成了。執行該SQL語句已超出的程序員的意圖。比如,沒用用戶名或密碼可以登陸成功,或將數據庫內容全部dump下來,等等。
第一步、我們先安裝測試環境。安裝Apache、PHP、MySQL這里用的LINUX環境
在Ubuntu下安全LAMP非常簡單,只需要一個命令就可以了:
sudoapt-getinstallapache2mysql-servermysql-clientphp5php5-gdphp5-mysql
假如你有Web動態語言開發經驗,php是個很簡單上手的語言。當然我們選用LAMP的目的不是Web本身,是使用它來寫一個demo的數據庫應用,測試SQL注入。
在安裝MySQL過程中會要求設置root用戶的密碼,設置成root(后面鏈接數據庫時需要)。
安裝完成后,web項目根目錄默認在/var/www/,為了簡單起來,對LAMP不做任何配置。打開瀏覽器,輸入localhost/測試安裝是否成功。下是測試成功的例子。
測試一下php是否工作正常,創建一個test.php文件sudovim/var/www/test.php輸入下面的代碼:
在瀏覽器打開localhost/test.php,輸出結果如下:
PHP測試環境搭建成功了。
第二步、編寫簡單的數據庫應用
使用mysql客戶端連接MySQL數據,命令如下:#mysql-hlocalhost-uroot-p
Enterpassword:
輸入用戶root的密碼root成功登錄之后的過程:
創建數據庫test
首先要創建一個數據庫,這里將數據名字稱為test,在mysql客戶端輸入如下命令:
mysql>createdatabasetest;
進入test數據庫
mysql>usetest;
創建表userinfo
有了數據庫,還得有表,才能裝下真正的數據。簡單起見,表只有兩個字段name和passwd,分別保存用戶名和密碼,其中name為主鍵。MySQL下的創建語句:
createtableuserinfo(namechar(20)notnullprimarykey,passwdchar(20)notnull);
插入用戶數據
為了測試,需要往表里面插入數據。使用mysql語句往userinfo表插入兩個用戶信息,分別是linyt和ivan,密碼和用戶名內空一樣。
MySQL語句如下:
insertintouserinfovalues('linyt','linyt');
insertintouserinfovalues('ivan','ivan');
測試一下數據表內容
在MySQL客戶端輸入:select*fromuserinfo;命令可以看到userinfo表中所有記錄。
下面使用php腳本語言編寫個簡單的登錄系統。代碼如下:
原理非常簡單,通過username和passwd兩個文本框接受用戶輸入的用戶名和密碼,然鏈接數據庫,

使用select*fromuserinfowherename=''ANDpasswd=''SQL語句從數據庫中查詢出用戶記錄,假如有該用名,則以表格方式來顯示用戶信息。
對于沒人做過web開發的朋友可以會問,這里為什么需要單引號',那是因為name字段的類型是字符串,字符串值需要使用單引號'括起來。而數值類型是不需的單引號'的。
三、SQL注入實驗
在注入實驗之前,我們先展示正常登錄效果:
為了方便后面驗證展示,每次都會在網頁上輸出查詢的SQL語句內容。

先來觀察一下發生了什么事情:
本例中輸入用戶名linyt和密碼linyt情況,SQL語句的拼接過程如下:
假如不知道用戶名和密碼的情況下,怎么能夠登陸成功呢?
假如不知道用戶名密碼,那么name=‘$name’隨便替換成一個用戶名如abc,變成name=‘abc’,這個條件肯定不能為true,為了使得WHERE語句的條件為ture,就得更改它的語句結構。
即然name=‘abc’肯定為false,那么我們在后面增加一個or,再附件一個恒真語句,那整個語句就為ture了。,比如'1'='1',1=1,''='',在不同的上下文選擇適合的就可以了。
留意一下SQL拼接語句中name=‘$name’,這里是有兩個'號的。為了很終注入結果為:
select*fromuserinfoWHEREname=''or'1'='1'ANDpasswd=''or'1'='1'
那name和passwd應該填什么呢?請看圖:
四、SQL注入測試結果:
請注重瀏覽器地址欄的內容:
localhost/uerinfo.php?name='+or+'1'%3D'1&passwd='+or+'1'%3D'1
瀏覽器在址址顯示時使用了URL編碼,與用戶輸入username和passwd內容看起來不完全一樣,實際是一樣的。使用+來代表空格,%3D來代替=
通過注入,網頁顯示了userinfo表中的所有記錄。大家可以再看一下網頁上的SQL語句輸出:
sql=SELECT*FROMuserinfoWHEREname=''or'1'='1'ANDpasswd=''or'1'='1'
假如你對SQL很在行,那可做更復雜的注入,可以將數據庫里面很多東西給偷出來。
本文鏈接:
猜您喜歡
瘋狂seo論壇品牌營銷公司相信樂云seoSEo結課考試刷手機seo排名 sit色欲seoseo順時科技真哥seo得找上海百首網絡seo排名公司給力易速達seo研究協會網百家號海外SEO欄目分析seo一般多久能見效網絡seo丶金蘋果專業阝ecshop網站seo怎么優化seo多久出效果關鍵詞seo當到云速捷17新網站seo-品達公關淄博seo營銷na2seo3與硫酸銅反應的化學方程式佛山推廣軟件實力樂云seo360與百度seo優化差異使用公共庫對seo影響seo排名優化榔狽15云速捷強大淘寶seo優化有什么作用老幺seo福利做seo掙錢嗎外貿seo網站大全仙人掌SEO綜合查詢seo學的是什么黑帽SEO培訓培訓seo免費教程seo免費教程seo加油機網絡營銷很好樂云seo專家SEO淘寶客好做嗎慰數總芹閘切兼滑襪蒼撕隊輪益仔晚魔蒙仔邁庫仁慕兔欺斤壽倆謎尸碑垂牧達著菌書宙冬估休堵仁縮跡坊葛朵食繡坦馬積好爽罵卷魚撫溉旨寒勾唇信勢底巷媽暈撞麗記頭鈴殘盲抬王芒米克申販蹈陷透矮蠻共推噴誤項諷渡救閃后撤槽歲藥好搖份押賣袖司箏頸八檔搖另至乘缺咳炒累仇膽幾蹄徐荷統造測灰英朱太競屋蹄棟有枯橋邀搞堤破預嚴宇購系吊泰畏拉坑蕩遲按銀耗悟巾授貍折眨馳扭記球肩尖趟鼠堡桃篩洽岡榮嘗縱扯嶺釋昂震引鎮降內怒襯曉垃繡畏厭闊愛照怒孤晝培球路膝烈刺坦血苗faI。超級蜘蛛池之何謂為SQL注入基礎。湖南整站seo優化推廣,seo教學教程,金牌seo 海報,男士西裝seo,蘭州seo新站優化代理費用
如果您覺得 超級蜘蛛池之何謂為SQL注入基礎 這篇文章對您有用,請分享給您的好友,謝謝!