Skip to content

Commit d4ff21c

Browse files
committed
添加fuckCTF.py
1 parent 2024a8e commit d4ff21c

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161

6262
##### 14.[kantuSpider.py](https://github.com/yhangf/PythonCrawler/blob/master/spiderFile/kantuSpider.py): 抓取看图网站上的所有图片。
6363

64+
##### 15.[fuckCTF.py](https://github.com/yhangf/PythonCrawler/blob/master/spiderFile/fuckCTF.py): 通过selenium模拟登入合天网站,自动修改原始密码。
65+
6466
---
6567
# spiderAPI模块简介
6668
#### 本模块提供一些网站的API爬虫接口,功能可能不是很全因此可塑性很大智慧的你如果有兴趣可以继续改进。

spiderFile/fuckCTF.py

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import os
2+
import random
3+
from PIL import Image
4+
from selenium import webdriver
5+
6+
7+
class fuckCTF:
8+
9+
def __init__(self, username, old_password):
10+
self.url = "http://hetianlab.com/"
11+
self.login_url = "http://hetianlab.com/loginLab.do"
12+
self.username = username
13+
self.old_password = old_password
14+
self.new_password = (self.yield_new_password(), "111111")[0]
15+
self.options = webdriver.FirefoxOptions()
16+
self.options.add_argument("-headless")
17+
self.browser = webdriver.Firefox(options=self.options)
18+
print("init ok")
19+
20+
def login_hetian(self):
21+
self.browser.get(self.login_url)
22+
self.browser.find_element_by_id("userEmail").clear()
23+
self.browser.find_element_by_id("userEmail").send_keys(self.username)
24+
self.browser.find_element_by_id("passwordIn").clear()
25+
self.browser.find_element_by_id("passwordIn").send_keys(self.old_password)
26+
self.browser.get_screenshot_as_file(self.username + '/' + "login.png")
27+
self.browser.find_element_by_id("registButIn").click()
28+
self.browser.get(self.url)
29+
print("login_hetian running ok!")
30+
31+
def get_personl_information_page(self):
32+
grzx_btn = self.browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/div/div[2]/ul/li[2]/a")
33+
self.browser.execute_script("$(arguments[0]).click()", grzx_btn)
34+
self.browser.get("http://hetianlab.com/getUserInfo.do")
35+
print("get_personl_information_page running ok!")
36+
37+
def get_password_setting_page(self):
38+
mmsz_btn = self.browser.find_element_by_xpath("/html/body/div[2]/div/div[1]/ul/ul[3]/li[2]")
39+
self.browser.execute_script("$(arguments[0]).click()", mmsz_btn)
40+
self.browser.find_element_by_id("person").click()
41+
self.browser.find_element_by_class_name("check")
42+
print("get_password_setting_page running ok!")
43+
44+
def yield_new_password(self):
45+
strings = list("abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()")
46+
return "".join(random.choices(strings, k=6))
47+
48+
def setting_password(self):
49+
self.browser.find_element_by_id("oldpwd").clear()
50+
self.browser.find_element_by_id("oldpwd").send_keys(self.old_password)
51+
self.browser.find_element_by_id("newpwd").clear()
52+
self.browser.find_element_by_id("newpwd").send_keys(self.new_password)
53+
self.browser.find_element_by_id("quepwd").clear()
54+
self.browser.find_element_by_id("quepwd").send_keys(self.new_password)
55+
print("setting_password running ok!")
56+
57+
def get_v_code(self):
58+
status = self.browser.get_screenshot_as_file(self.username + '/' + "v_code.png")
59+
if status:
60+
img = Image.open(self.username + '/' + "v_code.png")
61+
img.show()
62+
self.v_code = input("请输入验证码: ")
63+
self.browser.find_element_by_class_name("code").send_keys(self.v_code)
64+
else:
65+
raise("截屏失败!")
66+
print("get_v_code running ok!")
67+
68+
def submit_data(self):
69+
self.browser.find_element_by_id("submitbtn").click()
70+
self.browser.get_screenshot_as_file(self.username + '/' + "result.png")
71+
self.browser.quit()
72+
print("submit_data running ok!")
73+
74+
def make_portfolio(self):
75+
if not os.path.exists(self.username):
76+
os.makedirs(self.username)
77+
print("make_portfolio running ok!")
78+
79+
def save_success_data(self):
80+
with open("./username_and_password_data_successed.log", "a+") as fp:
81+
fp.write(
82+
"username" + ": {}".format(self.username) + "\t"
83+
"password" + ": {}".format(self.new_password) +
84+
"\n"
85+
)
86+
print("save_success_data running ok!")
87+
88+
def save_failed_data(self):
89+
with open("./username_and_password_data_failed.log", "a+") as fp:
90+
fp.write(
91+
"username" + ": {}".format(self.username) + "\n"
92+
)
93+
print("save_failed_data running ok!")
94+
95+
def main(self):
96+
try:
97+
self.make_portfolio()
98+
self.login_hetian()
99+
self.get_personl_information_page()
100+
self.get_password_setting_page()
101+
self.setting_password()
102+
self.get_v_code()
103+
self.submit_data()
104+
self.save_success_data()
105+
except:
106+
self.save_failed_data()
107+
108+
109+
def yield_usernames(n):
110+
prefix = "ctf2018_gzhu"
111+
postfix = "@dh.com"
112+
for num in range(1, n):
113+
if num < 10:
114+
infix = '0' + str(num)
115+
else:
116+
infix = str(num)
117+
yield prefix + infix + postfix
118+
119+
120+
if __name__ == "__main__":
121+
for username in yield_usernames(100):
122+
ctfer = fuckCTF(username, "111111")
123+
ctfer.main()

0 commit comments

Comments
 (0)