社会工程学之黑客七宗罪——贪婪(死亡之PING)
前言
????????我為什么要將“死亡之PING”歸結(jié)到《貪婪》?
????????其實(shí)如果你知道“死亡之PING”的里含義就很好理解了。
????????我始終相信雙刃劍理論,其實(shí)個人主觀臆斷是“死亡之PING”最一開始并不是惡意攻擊方法,而是為了達(dá)成目的而做成的一勞永逸的工具。
????????為什么我會這么認(rèn)為?首先我們要知道PING的含義。
?????????ping (Packet Internet Groper)是一種因特網(wǎng)包探索器,用于測試網(wǎng)絡(luò)連接量的程序?[1]??。Ping是工作在?TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)中應(yīng)用層的一個服務(wù)命令, 主要是向特定的目的主機(jī)發(fā)送?ICMP(Internet Control Message Protocol 因特網(wǎng)報文控制協(xié)議)Echo?請求報文,測試目的站是否可達(dá)及了解其有關(guān)狀態(tài)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——百度百科
? ? ? ? 由上述一段介紹得知,PING可以做到連接服務(wù)器,那也就意味著,我用PING去連接一個網(wǎng)站,相當(dāng)于訪問了這個網(wǎng)站。而通過猜測,如果你想讓一個網(wǎng)站達(dá)到一定的訪問量,就可以這樣做。
? ? ? ? 那么也就意味著,那些很貪婪的想一直刷訪問量的人,肯定想用這種辦法的吧~
? ? ? ?不過,僅僅是訪問網(wǎng)站而已呀??和黑客攻擊有什么關(guān)系?
? ? ? ? 咱們?nèi)粘TL問普通網(wǎng)站或服務(wù)器時,有沒有一種現(xiàn)象叫做500、502或504?
500錯誤:
????????500 Internal Server Error 內(nèi)部服務(wù)錯誤:顧名思義500錯誤一般是服務(wù)器遇到意外情況,而無法完成請求。
502、504錯誤:
????????502 Bad Gateway錯誤、504 Bad Gateway timeout 網(wǎng)關(guān)超時
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——幽幽靖
? ? ? ? 上述錯誤造成的原因有一個交點(diǎn):當(dāng)我的訪問數(shù)據(jù)超載,資源被吃到不足。
? ? ? ? 那么資源吃到不足是一個什么概念呢?
? ? ? ? ? ? ? ? 舉個栗子~
? ? ? ? ? ? ? ? 比如你的電腦只有一個內(nèi)存條是8G,假設(shè)系統(tǒng)進(jìn)程用了1G,各種后臺軟件以及正在打開的軟件用了4G,而在沒有任何保護(hù)機(jī)制以及調(diào)度方案的情況下,你想直接點(diǎn)開一個游戲,需要占用你的內(nèi)存4G。
? ? ? ? ? ? ? ? 那么現(xiàn)在,你需要9G的內(nèi)存資源,而你計算機(jī)能提供的內(nèi)存資源為8G,在沒有任何保護(hù)機(jī)制以及調(diào)度方案的情況下,點(diǎn)開,運(yùn)行,藍(lán)屏~
? ? ? ? 那么,PING其實(shí)就可以達(dá)到這一點(diǎn)。
? ? ? ? 但是我PING一次好像也消耗不了多少資源吧……
? ? ? ? 好的,欲知后事如何,請往下看~
一、問題所在:一次PING所消耗的資源量
? ? ? ? 不難發(fā)現(xiàn),我們在PING的時候所發(fā)送和接受的數(shù)據(jù)(以“字節(jié)”為單位)著實(shí)很小:
? ? ? ? 很明顯,這里的字節(jié)為32,想想就很小了吧——無論是對于服務(wù)器來講還是PC來說。
? ? ? ? 但是,如果我增大它的字節(jié)數(shù)呢?
????????
? ? ? ? 首先,我們從第一行命令的結(jié)果得知,最高的字節(jié)數(shù)只能是65500。
? ? ? ? 其次,我把字節(jié)數(shù)換成65500,由于給服務(wù)器的安全設(shè)定阻止了過量字節(jié)的數(shù)據(jù)訪問,導(dǎo)致了請求超時現(xiàn)象。
? ? ? ? 可能有的人會想:既然說過量字節(jié)的數(shù)據(jù)訪問會被服務(wù)器駁回,那樣不就沒辦法用PING攻擊了嘛?~
? ? ? ? 其實(shí)最一開始我也想到了這個事,但是后來我想了想,如果有2047臺電腦同時訪問這個服務(wù)器,每一次都是32字節(jié),是不是就能達(dá)到65500了?
? ? ? ? (手動計算:)
二、衍生問題:怎么可能同時擁有2047臺可用的電腦嘛~
? ? ? ? ?確實(shí),就算你家大業(yè)大,根據(jù)正常思維來講,誰也不想敗家對吧~
? ? ? ? ?不過,我們不能同時擁有2047臺可用電腦,但是我們可以同時PING它個2047次呀~
? ? ? ? ?這里要用到的知識點(diǎn)呢,叫做《并行程序設(shè)計基礎(chǔ)》。
三、什么叫“并行”?
? ? ? ? ?問個問題~:
? ? ? ? ? ? ? ? 如果燒水需要5分鐘,洗衣服(機(jī)器)20分鐘,做飯15分鐘,問:不算外來時間因素及水放置降溫影響,把這些事情全干完最短需要用多長時間?
? ? ? ? ? ? ? ? 答案肯定是20分鐘對吧。
? ? ? ? ? ? ? ? 想想看:用機(jī)器洗衣服放了衣服和洗液它會自己洗,燒水的話加了水點(diǎn)了火它會自己燒,那么在他們工作的時候我去做飯,做晚飯,水早就燒好了,再等5分鐘,洗衣機(jī)也好了,一共用時20分鐘。
? ? ? ? ? ? ? ? 那么,在洗衣機(jī)洗衣服的同時,我去燒水,水燒著的時候我去做飯,三個事件同時進(jìn)行,省心省力,我們把這種處理事件的模式叫做“并行”。
? ? ? ? ? ? ? ? 這里呢,我們可以把每個事件都看作一個線程:
? ? ? ? ? ? ? ? ? ? ? ? 1.洗衣機(jī)線程包括:放入衣服,放入洗液,按洗衣按鈕……
? ? ? ? ? ? ? ? ? ? ? ? 2.燒水線程包括:裝水,點(diǎn)火……
? ? ? ? ? ? ? ? ? ? ? ? 3.做飯線程包括:切菜,調(diào)料,做菜,盛盤……
? ? ? ? ? ? ? ? 那么,線程里包括的每一個動作,我們都可以看作一個進(jìn)程。
? ? ? ? ? ? ? ? 諸如此類,現(xiàn)在我們把目光看向我們的PING。
? ? ? ? ? ? ? ? 那么我是不是可以建立多個PING進(jìn)程或PING線程,讓它們同時運(yùn)行?
? ? ? ? ? ? ? ? 也就意味著,我是不是可以建立2047個PING進(jìn)程或PING線程同時運(yùn)行,來達(dá)到65500字節(jié)的目的?
? ? ? ? 那么具體我們應(yīng)該怎么做?
四、準(zhǔn)備前置
1、一只活了很久的蟒蛇~(Python2.7)
? ? ? ? 眾所周知,蟒蛇(Python)作為程序界的一大利器,它擁有很大的便捷性以及廣泛性。
? ? ? ? 不過為什么要挑一只活了很久的蛇?
? ? ? ? 畢竟蛇還是老的辣呀~老蛇對于很多舊模塊的兼容性很強(qiáng)的,尤其是……
? ? ? ? ????????一只老蛇:嘶~嘶……(鉆洞~侵入~)
2、Ping語法
? ? ? ? (1)如果你用的是Windows系統(tǒng):
? ? ? ? ? ? ? ? 你將要用到cmd(命令提示符)窗口,在里面輸入Ping語法。
? ? ? ? (2)如果你用的是Linux系統(tǒng):
? ? ? ? ? ? ? ? 你將要用到Terminal(終端)窗口,在里面輸入Ping語法。
? ? ? ? 而需要用到的Ping的語法如下(Windows與Linux通用):
1 ping <ip/url> 2 ping <ip/url> -l <字節(jié)數(shù)> 3 ping <ip/url> -t? ? ? ? 第一行的PING是普通的PING,單純就是圖個能不能連通。
? ? ? ? 第二行的PING,上面咱們說到了,設(shè)置字節(jié)數(shù)的PING。
? ? ? ? 第三行的PING,無限PING,直到你在cmd或Terminal中鍵入停止指令。
五、實(shí)戰(zhàn)
????????首先需要了解我們所需要的模塊包:
??????(注意:下列模塊與在python3中的相同作用模塊的使用方法有出入!!!)
? ? ? ? 1.subprocess 模塊:允許我們啟動一個新進(jìn)程,并連接到它們的輸入/輸出/錯誤管道,從而獲取返回值。
? ? ? ? ? ? ? ? 這也就意味著,我們可以通過此模塊來創(chuàng)建一個進(jìn)程并使用它~
? ? ? ? 2.thread 模塊:提供對線程的支持。
? ? ? ? ? ? ? ? 顧名思義,這是我們創(chuàng)建新線程的必要條件~
? ? ? ? 除此之外,我們還需要用到一個模塊叫做time,至于用它干什么,下面我們會介紹到。
? ? ? ? 模塊包了解完了,現(xiàn)在我們就需要說思路的事了:
? ? ? ? 1.導(dǎo)入subprocess、thread和time這三個模塊。
? ? ? ? 2.聲明一個用來執(zhí)行PING動作的函數(shù),此函數(shù)當(dāng)中PING用進(jìn)程來運(yùn)行。
? ? ? ? 3.利用第2條所聲明的函數(shù)來循環(huán)創(chuàng)建線程并讓它們并行,每創(chuàng)建一個線程,休息0.8秒
???????那么具體代碼如下所示:
1 import subprocess 2 import thread 3 import time 4 5 6 def POD(id): 7 ret = subprocess.call("<Ping語法>", shell=True) 8 print "%d," % id 9 10 11 for i in range(<你要創(chuàng)建的線程數(shù)>): 12 thread.start_new_thread(POD, (i,)) 13 time.sleep(0.8)這里說重點(diǎn):
? ? ? ? 一、第6行所定義的POD函數(shù)是用來執(zhí)行PING命令的。在第12行,由線程調(diào)用此POD函數(shù)。
? ? ? ? 二、第12行中的 ‘(i,)’的意思是傳入了第11行‘i’的數(shù)字,用來標(biāo)注是第幾個被創(chuàng)建的線程
? ? ? ? 三、第13行為什么要睡覺休息?畢竟創(chuàng)建線程的同時你的電腦也是會消耗資源的,為了減輕負(fù)荷就休息了0.8秒
后序
? ? ? ? 最后我想說,無論我說的夠不夠明白,夠不夠清晰,這篇文章只供參考和學(xué)習(xí),如果拿了這個東西干了什么壞事的話……違法我不追究,畢竟該審判你的不是我,是法律哦!!!~
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??——Redice(Yatogami)
總結(jié)
以上是生活随笔為你收集整理的社会工程学之黑客七宗罪——贪婪(死亡之PING)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非功能测试之界面测试和易用性测试
- 下一篇: 传奇服务器怎么修改背包金刚石显示,教你在