网安之php开发第十四天
#知識(shí)點(diǎn):
1、PHP-全局變量$_SERVER
2、MYSQL-插入語(yǔ)法INSERT
3、輸入輸出-XSS_x0005_&反射&存儲(chǔ)
4、安全問(wèn)題-XSS跨站&CSRF等
演示案例:
?小迪博客-輸入輸出&留言板&訪問(wèn)獲取
?墨者靶場(chǎng)-IP地址偽造來(lái)源&來(lái)源頁(yè)偽造
先說(shuō)一下這個(gè)輸入輸出引發(fā)的反射型xss和儲(chǔ)存型xss
把源碼寫好在瀏覽器打開,就可以模擬輸入輸出(相當(dāng)于利用查詢語(yǔ)句查詢數(shù)據(jù)庫(kù)里面的東西)。然后當(dāng)我們輸入一個(gè)正常的東西,比如我們輸入1,他就會(huì)查詢到后面的pxy之類的。這些都很正常,但是當(dāng)我們輸入一個(gè)js語(yǔ)句之后,你會(huì)發(fā)現(xiàn)事情變得不一樣了。
?
比如我們輸入<script>alert(1)</script>,他就會(huì)執(zhí)行這個(gè)js代碼,所以輸出的你搜索的“”內(nèi)容如下這句話,雙引號(hào)里面沒(méi)有東西是空的。因?yàn)樗麍?zhí)行了。從而出現(xiàn)個(gè)彈窗。也就是說(shuō)輸入的代碼可以控制網(wǎng)站的顯示。因此當(dāng)我們能夠控制網(wǎng)站的顯示也就代表了漏洞的產(chǎn)生。而執(zhí)行js代碼就屬于xss漏洞(有一句話說(shuō)的好,叫見縫就x)這個(gè)屬于反射型xss,也是短期的。
?
注解:XSS
cross site script,跨站腳本攻擊(關(guān)鍵字:腳本)。為了與 css 沖突取名為 xss!XSS攻擊的核心原理是:不需要你做任何的登錄認(rèn)證,它會(huì)通過(guò)合法的操作(比如在url中輸入、在評(píng)論框中輸入),向你的頁(yè)面注入腳本(可能是js、hmtl代碼塊等)。
惡意攻擊者往Web頁(yè)面里插入惡意Script代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的Script代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的目的。
?
有短期也就有長(zhǎng)期,那也就是儲(chǔ)存型xss,當(dāng)我們?nèi)チ粞匀ピu(píng)論。比如我上一分鐘留下的言,你下一分鐘刷新就可以看到我的留言。這里面涉及兩個(gè)動(dòng)作,一個(gè)是留言,一個(gè)是刷新。也對(duì)應(yīng)著數(shù)據(jù)庫(kù)的寫入和查詢,也就是insert和select。當(dāng)你留言之后會(huì),留言的內(nèi)容會(huì)保存到數(shù)據(jù)庫(kù)或則可以保存的文件等。因此每一次刷新就會(huì)select查詢一次。那如果把js語(yǔ)句當(dāng)作留言內(nèi)容。就會(huì)儲(chǔ)存到數(shù)據(jù)庫(kù)中。當(dāng)我們沒(méi)刷新一次就會(huì)彈窗一次。這個(gè)就是儲(chǔ)存型xss。他是持久型的,危害是比反射性xss大的。
?
然后說(shuō)一下php的全局變量$_SERVER,直接上圖。內(nèi)容不全,自己可以去網(wǎng)上搜。
這些全部都是用來(lái)獲取訪問(wèn)者的信息以及服務(wù)器的一些信息。
就比如這個(gè)$_SERVER['HTTP_USER_AGENT'] #當(dāng)前請(qǐng)求的 User_Agent: 頭部的內(nèi)容。你就可以通過(guò)它獲取到ua頭。然后去網(wǎng)上看看與之相關(guān)的信息。
?
還有一個(gè)就是通過(guò)這個(gè)超全局變量獲取到ip地址,下面是源碼。至于為啥會(huì)存在這么多行,都是if嵌套的,是因?yàn)樗枰袛嗄阌袥](méi)有代理之類的。
那你可能會(huì)問(wèn)講這個(gè)有啥用。下面舉個(gè)例子。
?
?
?
?
?
?
?
?
就是站長(zhǎng)之家的ip查詢,正常情況下,他的ua頭是下面的內(nèi)容
?
但是當(dāng)你通過(guò)抓包,修改ua頭里面的信息之后就會(huì)發(fā)現(xiàn)不一樣。(不要忘了弄證書,不然抓不到https的包。具體就是把瀏覽器設(shè)置代理之后,訪問(wèn)http://burpsuit。就可以下載證書了。我這個(gè)方法可行,在網(wǎng)上找的有的方法不太行)
?
這里把ua頭里面的信息改成123,就會(huì)顯示這樣。如果把123改成個(gè)跨站語(yǔ)言。那就是個(gè)典型的反射性xss了。本來(lái)是可以插入js代碼的。但是被人提交漏洞了,現(xiàn)在這個(gè)地方被過(guò)濾了,不可以插入js代碼了。這就是個(gè)ua欺騙,觸發(fā)xss。
這也說(shuō)明了一個(gè)問(wèn)題,根據(jù)網(wǎng)站的功能去看它相應(yīng)的漏洞。就比如這個(gè)ip查詢,是個(gè)接口類的查詢的功能行動(dòng)應(yīng)用。他的源碼肯定有接受的地方,就像上面的那個(gè)代碼,查ip的,查ua頭的,他肯定是要接受才可以給你返回信息。那也就對(duì)應(yīng)著那個(gè)輸入輸出的東西了。而網(wǎng)站為啥要接受瀏覽器信息呢。因?yàn)橛邪沧坑衟c,顯示的版面不太一樣。
因此根據(jù)網(wǎng)站的接收功能,他的接受功能越多,那對(duì)應(yīng)的漏洞隱患也就越大。反之越少。
?
?
還有一個(gè)就是$_SERVER['HTTP_REFERER']
鏈接到當(dāng)前頁(yè)面的前一頁(yè)面的 URL 地址。也就是從哪里跳轉(zhuǎn)過(guò)來(lái)的,就會(huì)顯示上一個(gè)頁(yè)面的url地址。
在我們實(shí)際場(chǎng)景中。比如你訪問(wèn)個(gè)網(wǎng)站,網(wǎng)站提示來(lái)源非法,未知地址之類的,就不讓你訪問(wèn)。這時(shí)候你就要從他的源去訪問(wèn),而這個(gè)$_SERVER['HTTP_REFERER']就是獲取來(lái)源的url地址。下面講個(gè)來(lái)源頁(yè)偽造,就是跟這相關(guān)的,其實(shí)也就是Referer偽造。
開啟靶場(chǎng)后,正常訪問(wèn),提示只能從谷歌訪問(wèn)這個(gè)地址,就是$_SERVER['HTTP_REFERER']它搞得鬼,會(huì)獲取來(lái)源。
解決方法也很簡(jiǎn)單,用burp抓包,把referer對(duì)應(yīng)的地址改成谷歌就行了。
這是原本的:
這是改之后的:
然后就得到了key:
?
?
上面我們說(shuō)了真實(shí)情況下有的網(wǎng)站會(huì)提示來(lái)源非法,因?yàn)檫@些網(wǎng)站會(huì)檢測(cè)referer。而這個(gè)檢測(cè)主要是防CSRF攻擊的。
下面說(shuō)一下這個(gè)CSRF:
如果上圖中的網(wǎng)站沒(méi)有檢測(cè)來(lái)源,那么就會(huì)讓攻擊者通過(guò)提前植入的js代碼獲得到管理者的管理權(quán)限或則獲取到后臺(tái)源代碼之類的。
下面說(shuō)個(gè)例子:
用一個(gè)賬號(hào)向自己的支付寶付款,上面的是付款鏈接。當(dāng)你打開博客的時(shí)候就會(huì)觸發(fā)訪問(wèn)這個(gè)付款數(shù)據(jù)包。如果支付寶沒(méi)有檢測(cè)來(lái)源的話。那么直接就付款了。
這個(gè)就是CSRF攻擊。
?
注解:跨站請(qǐng)求偽造(英語(yǔ):Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。跟跨網(wǎng)站腳本(XSS)相比,XSS 利用的是用戶對(duì)指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對(duì)用戶網(wǎng)頁(yè)瀏覽器的信任。
?
?
?
?
?
再說(shuō)一個(gè)案例。IP地址偽造的:
先利用弱口令登錄,比如admin admin。登上去發(fā)現(xiàn)IP受限制
而像這個(gè)網(wǎng)站收集ip信息,一般有兩種情況,一是收集ip做一些統(tǒng)計(jì)或干其他的事情。還有一個(gè)就是做ip限制。比如一些服務(wù)器為了安全,只讓本地的ip去登陸,其他的ip做限制。這樣就可以過(guò)濾一些攻擊,就算你得到賬號(hào)密碼,但是ip做限制,還是不行的。像這個(gè)網(wǎng)站獲取IP,一般都是源碼去獲取
我們上面講過(guò)一個(gè)源碼獲取ip的圖。里面有個(gè)HTTP_X_FORWARDED_FOR,我們就可以通過(guò)HTTP_X_FORWARDED_FOR偽造來(lái)解題。
注解:$_SERVER[”HTTP_X_FORWARDED_FOR”] #透過(guò)代理服務(wù)器取得客戶端的真實(shí) IP 地址
通過(guò)抓包,把X_FORWARDED_FOR對(duì)應(yīng)的值改成本機(jī)地址,就可以偽造。讓服務(wù)器以為本機(jī)登錄。
最后就得到了key
(這個(gè)是小迪老師的截圖,我用burp抓到的包沒(méi)有x-forwarded這一欄,我在下面加入進(jìn)去,結(jié)果網(wǎng)站一直轉(zhuǎn)圈圈,直接gg)
在真實(shí)情況下就對(duì)應(yīng)著ip受限制的話,你就可以試著x-forwarded偽造,在數(shù)據(jù)包中進(jìn)行修改。但如果對(duì)方不接收這個(gè)值,也就是說(shuō)不以這個(gè)值為準(zhǔn)的話。那就沒(méi)辦法了,其他地方也不能進(jìn)行偽造。只有它可以。但是一般都會(huì)用我上面圖片的那個(gè)代碼去接收,因?yàn)橐WCip的準(zhǔn)確性。
這種IP限制走到是php代碼本身去判定,還有一種IP限制是tcp協(xié)議的IP限制,就是計(jì)算機(jī)上面用到的一些IP限制。而只有這個(gè)php代碼里面的這個(gè)x-forwarded是可以偽造的,并且網(wǎng)站也是接受這個(gè)值的。也就可以實(shí)現(xiàn)繞過(guò)。其他的就不太行了。就像這個(gè)電腦的或則服務(wù)器的ip限制,他的判定方式是走的底層協(xié)議,是繞過(guò)不了的。
?
總結(jié)
以上是生活随笔為你收集整理的网安之php开发第十四天的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站被恶意攻击了改怎么办?如何进行防护呢
- 下一篇: 根据php经纬度百度地图打点,PHP使用