国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

解讀SQL查詢結果集對注入的影響及利用

2024-08-31 00:46:43
字體:
來源:轉載
供稿:網友

對于注入而言,錯誤提示是極其重要。所謂錯誤提示是指和正確頁面不同的結果反饋,高手是很重視這個一點的,這對于注入點的精準判斷至關重要。本問討論下關于幾類錯誤和他產生的原理,希望對讀者有所幫助。

錯誤提示主要有邏輯錯誤和語法錯誤以及腳本運行錯誤三類。

一:邏輯錯誤

簡單的例子是1=1 1=2這兩個,1=1與1=2頁面不同的原理是什么?以$sql = “select * from news where id=$_GET[id]”為例。

select * from news where id=1 and 1=2產生的結果集為NULL,然后程序取值得時候,就會去出空值,無法顯示。當然有的程序發現SQL執行結果集為空,就立即跳轉,效果就不顯鳥。值得注意的是,有的如Oracle Postgresql的數據庫在結果集為空情況下會再頁面上表現字符型null字樣,這算是個特點。如果使用or條件,比如

select * from news where id=1 or 1=1

和and 1=2得結果正好相反,他的結果集十分龐大。如果SQL語句如此,再加上程序是循環讀取結果集(一些編程上的陋習)那么會取出所有結果,結果可能運行很慢,在數據量巨大的oracle上容易出現。這個例子會出現什么呢,一般程序取出結果集中的第一條結果,那么很可能已經不是id=1的那條新聞了,這就是由些小菜奇怪有時候or 1=1頁面會發生變化的原因。

歸根到底,都是結果集不同造成的,靈活掌握是關鍵,這并非單純的經驗問題。

二:語法錯誤

語法錯誤時比較熟悉的,比如對于SQL Server,PgSQL,Sybase的注入錯誤提示都很重要,因為利用它的特性來獲取信息很快速。語法錯誤造成的結果可能是SQL錯誤而中斷腳本執行,但是腳本或服務器設置屏蔽錯誤的情況下,程序得到繼續執行,但是結果集不存在,連NULL都算不上,反饋給攻擊者的很可能就是結果集為空的情況,其實這是腳本的處理結果。當然Oracle PgSQL表現null。

三:運行錯誤不用說了,典型的就是利用mysql注入benchmark讓腳本運行超時得到物理路徑,以及利用超時來獲得不同的表征進行盲注入。

四:邏輯錯誤和語法錯誤的結合。

當表征極不明顯的時候,利用類似iff這樣的函數進行正確與否的區分有時候會成救命稻草。因為語法錯誤和邏輯錯誤的表征大多數情況都會有不同。

iff(1=1,1,‘no’)這個會產生結果1 注意是數字,而iff(1=2,1,‘no’)這個會產生‘no’ 是字符。那么

id=1 and 1=iff(1=1,1‘no’)正確是必然成立的,而id=1 and 1=iff(1=2,1,‘no’)會因為類型不同發生語法錯誤。不過可惜的是似乎支持iff函數的數據庫不多,呵呵。

現在講結果集在注入中的利用原理。

一:從‘or’‘=’開始

這是學習SQL注入的初級課程,登陸漏洞。我簡略從SQL結果集上分析。

$sql = “select top 1 * from admin where username=‘$username’ and password=md5(‘$password’)”;

顯而易見,‘or’‘=’的加入使SQL語句返回了一條記錄,這才使驗證通過。

二:再看現在的驗證中的SQL

$sql = “select top 1 * from admin where username=‘$username’”;

結果集不為空才根據抽取的記錄集中的密碼值與用戶提交的密碼MD5值進行比對來進行驗證。這樣,你突然發現‘or’‘=’的計策失敗鳥,但是后臺明明有注入,這就是驗證方法造成的。跟進這個驗證過程,‘or’‘=’的確產生了一個結果集(admin表中的第一行記錄)但是遺憾的事,后來的密碼比對沒法通過,驗證無法成功。

思路很簡單,網上有案例,我重在原理,利用union來產生想要的結果集。比如‘and(1=2)union select top 1 username,’123456得md5值‘,id from admin where username=’admin

這樣產生了admin的記錄信息,但是記錄集中的密碼那個位置的值被替換成了123456的md5值,這樣,使用admin 123456通過驗證并且繼承他的權利。

更有甚者全部用‘xxx’的方法來盲狙,這就很“過分”鳥。不過在sql2000 sybase這些嚴格要求類型匹配的數據庫來說,這樣不能撼動“管理員登陸”的,因為執行時發生了語法錯誤,結果集為NULL。另外以前ewebeditor注入漏洞來上傳馬也是這個union操作結果集來達到目的的經典案例。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 璧山县| 屏东市| 河池市| 芷江| 方正县| 云浮市| 陇西县| 延长县| 临清市| 河池市| 大厂| 民权县| 岳阳县| 伊吾县| 灵宝市| 贵溪市| 长垣县| 扶风县| 甘谷县| 得荣县| 化州市| 全南县| 额济纳旗| 上杭县| 岫岩| 陆丰市| 额敏县| 涿鹿县| 五原县| 三原县| 越西县| 财经| 运城市| 寻乌县| 沙湾县| 太康县| 长白| 上饶市| 雅安市| 萍乡市| 白银市|