最近把之前所學(xué)的一些知識(shí)進(jìn)行一些總結(jié),在課題組呆了這么久,接觸比較多的還是Web安全方面的知識(shí),關(guān)于系統(tǒng)安全,軟件安全確實(shí)還不太了解。翻看到以前保存的一些文章,覺(jué)得有必要自己做一個(gè)總結(jié)梳理一下。
Web安全的重點(diǎn)
來(lái)課題組之前,為了應(yīng)付和老師的第一次見(jiàn)面,我在網(wǎng)絡(luò)上搜索了很多關(guān)于網(wǎng)絡(luò)安全的問(wèn)題,在知乎零基礎(chǔ)如何學(xué)習(xí)web安全這個(gè)問(wèn)題下面余弦的回答中提到,Web安全的重點(diǎn)在于數(shù)據(jù)流,也就是要弄清楚數(shù)據(jù)從何而來(lái),到哪里去,在整個(gè)網(wǎng)絡(luò)狀態(tài)中數(shù)據(jù)的流向和過(guò)程是怎么樣的。當(dāng)時(shí)我覺(jué)得有道理,所以在和老師的第一次會(huì)面當(dāng)中提到了這個(gè)觀點(diǎn),但是老師并沒(méi)有什么反應(yīng),和我預(yù)想中“這個(gè)小伙子牛逼啊”的反應(yīng)不太一樣,只是以一種似是而非高深莫測(cè)的表情對(duì)我微笑。
過(guò)了這近兩年的時(shí)間,我越發(fā)地覺(jué)得“數(shù)據(jù)流”這個(gè)觀點(diǎn)很精髓,我也慢慢明白老師之所以沒(méi)有表現(xiàn)出非常認(rèn)可可能是因?yàn)檫@個(gè)觀點(diǎn)對(duì)他來(lái)說(shuō)是理所應(yīng)當(dāng)?shù)?。不管是sql注入還是xss跨站腳本攻擊,還是ftp文件上傳漏洞,系統(tǒng)漏洞等等,都是因?yàn)椴涣嫉臄?shù)據(jù)可以通過(guò)這或那的方式到達(dá)一些本不應(yīng)該到達(dá)的地方,這些不良的數(shù)據(jù)可以是一小段代碼,或者是一個(gè)木馬病毒。這里再引用下余弦在回答中引用的栗子:
- 如果在操作系統(tǒng)層上沒(méi)處理好,比如Linux的Bash環(huán)境把“特殊數(shù)據(jù)”當(dāng)做指令執(zhí)行時(shí),就產(chǎn)生了OS命令執(zhí)行的安全問(wèn)題,這段“特殊數(shù)據(jù)”可能長(zhǎng)得如下這般:; rm -rf /;
- 如果在存儲(chǔ)層的數(shù)據(jù)庫(kù)中沒(méi)處理好,數(shù)據(jù)庫(kù)的SQL解析引擎把這個(gè)“特殊數(shù)據(jù)”當(dāng)做指令執(zhí)行時(shí),就產(chǎn)生SQL注入這樣的安全問(wèn)題,這段“特殊數(shù)據(jù)”可能長(zhǎng)得如下這般:' union select user, pwd, 1, 2, 3, 4 from users--
- 如果在Web容器層如nginx中沒(méi)處理好,nginx把“特殊數(shù)據(jù)”當(dāng)做指令執(zhí)行時(shí),可能會(huì)產(chǎn)生遠(yuǎn)程溢出、DoS等各種安全問(wèn)題,這段“特殊數(shù)據(jù)”可能長(zhǎng)得如下這般:%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%20
- 如果在Web開發(fā)框架或Web應(yīng)用層中沒(méi)處理好,把“特殊數(shù)據(jù)”當(dāng)做指令執(zhí)行時(shí),可能會(huì)產(chǎn)生遠(yuǎn)程命令執(zhí)行的安全問(wèn)題,這段“特殊數(shù)據(jù)”可能長(zhǎng)得如下這般:eval($_REQUEST['x']);
- 如果在Web前端層中沒(méi)處理好,瀏覽器的JS引擎把“特殊數(shù)據(jù)”當(dāng)做指令執(zhí)行時(shí),可能會(huì)產(chǎn)生XSS跨站腳本的安全問(wèn)題,這段“特殊數(shù)據(jù)”可能長(zhǎng)得如下這般:'"><script>alert(/cos is my hero./)</script>
web安全常見(jiàn)的幾種攻擊
就我平常所接觸到并且嘗試過(guò)的攻擊中,包括sql注入,xss,緩沖區(qū)溢出,弱口令,ftp上傳漏洞等,但是在這篇文章HOW TOSuccessfully Hack a Website in 2016!中,我對(duì)攻擊的類型有了更多的認(rèn)識(shí),它的重點(diǎn)在于“怎樣做”,與其說(shuō)是常見(jiàn)的幾種攻擊,不如說(shuō)一些常見(jiàn)的攻擊思路。
偵查目標(biāo)
一次好的偵查一般包含知道目標(biāo)運(yùn)行什么服務(wù),開放哪些端口,提供服務(wù)的軟件版本,去尋找可利用的漏洞,或者自己去挖掘漏洞。
了解服務(wù)的腳本是否是他們自己寫的,如果是,關(guān)注腳本中讓用戶輸入的那些部分,掃描文件目錄,檢查源代碼,觀察服務(wù)對(duì)不正常的輸入的反應(yīng)。常見(jiàn)的sql注入命令比如:
' OR '1'='1' --
' OR '1'='1' ({
' OR '1'='1' /*
然后構(gòu)造一些sql語(yǔ)句讓服務(wù)返回一些信息,去了解目標(biāo)服務(wù)是如何過(guò)濾數(shù)據(jù)的,并嘗試?yán)@過(guò)這些數(shù)據(jù)。
如果這些腳本不是他們自己寫的,而是利用現(xiàn)成的開源代碼,那么好好研究這些代碼,利用現(xiàn)成的漏洞或者自己找出可利用的漏洞。
尋找文件目錄
尋找后臺(tái)的文件目錄,可以嘗試下以下的索引去尋找:
website.com/logs/
website.com/files/
website.com/sql/
website.com/secret/
也可以利用自動(dòng)化工具像‘dirbsuter ’。當(dāng)然還有需要重點(diǎn)關(guān)注的robots.txt文件,它往往包含了一些重要的路徑信息。
遠(yuǎn)程文件入侵
遠(yuǎn)程文件入侵允許攻擊者將自己的文件,腳本放入到目標(biāo)服務(wù)器中執(zhí)行,這是服務(wù)沒(méi)有對(duì)用戶的輸入做出足夠的檢查而導(dǎo)致的。
空字節(jié)問(wèn)題
這個(gè)攻擊方式好像還蠻流行的,舉個(gè)例子來(lái)說(shuō),某一個(gè)文件是以".txt"為結(jié)尾的文件類型,所以程序員們規(guī)定只有以".txt"為結(jié)尾的文件可以被打開。但是如果出現(xiàn)這樣的文件呢:phppage.php%00.txt 。它會(huì)打開phppage.php%00.txt 嗎?不會(huì)的,實(shí)際上fopen函數(shù)在遇到null bytes(%00)就會(huì)停止,即只會(huì)打開phppage.php文件。
事實(shí)上,這樣的話,其實(shí)任何文件都可以通過(guò)這種方式被打開。
sql注入問(wèn)題
通過(guò)構(gòu)造sql注入語(yǔ)句,利用服務(wù)漏洞執(zhí)行構(gòu)造的語(yǔ)句來(lái)達(dá)到繞過(guò),得到返回?cái)?shù)據(jù)的目的。
csrf(Cross-Site Request Forgeries )跨站請(qǐng)求偽造攻擊
看了一片文章的介紹,csrf ,引用下其中評(píng)論的一段總結(jié):
CSRF(Cross Site Request Forgery)即跨站請(qǐng)求偽造。就是利用后臺(tái)有規(guī)律的接口,例如 localhost/deleteAriticle.php?id=3&username=xiaoxiao,攻擊者在被攻擊的網(wǎng)站頁(yè)面嵌入這樣的代碼,當(dāng)用戶xiaoxiao訪問(wèn)該網(wǎng)站的時(shí)候,會(huì)發(fā)起這條請(qǐng)求。服務(wù)器會(huì)刪除id為3的數(shù)據(jù)。
客戶端防范:對(duì)于數(shù)據(jù)庫(kù)的修改請(qǐng)求,全部使用POST提交,禁止使用GET請(qǐng)求。
服務(wù)器端防范:一般的做法是在表單里面添加一段隱藏的唯一的token(請(qǐng)求令牌)。
暴力破解
簡(jiǎn)單來(lái)說(shuō)就是一個(gè)個(gè)試。
緩沖區(qū)溢出攻擊
利用緩沖區(qū)溢出漏洞使得代碼溢出執(zhí)行設(shè)置好的而已代碼,具體可以看緩沖區(qū)溢出,這個(gè)不知道算不算web安全了。
總結(jié)
總結(jié)了一下發(fā)現(xiàn)自己不懂的又多了一點(diǎn),WTF。