SQL Injection Attack LabTask 1: Get Familiar with SQL Statements
Task 2: SQL Injection Attack on SELECT StatementTask 2.1: SQL Injection Attack from webpage查看文档的PHP源码:
1234$sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
可以看到sql语句是进行拼接的所以存在SQL注入。并且如果有返回就直接显示对应用户的信息。所以我们只用保持这个sql语句能正常执行并且返回记录。
构造如下
1admin '; #
密码随意,因为会被注释掉.
成功!
Task 2.2: SQL Injection ...
Cross-Site Scripting (XSS) Attack LabTask 1: Posting a Malicious Message to Display an Alert Window登录alice的账号,修改主页的信息,嵌入script脚本,保存主页信息
由于About me中标签有所以不能嵌入到about me中,可以嵌入到brief description中
保存之后可以看到脚本运行成功
如果是长的script代码,就需要调用远端的javascript代码,放到我们自己的服务器上,通过使用src标签进行引用
Task 2: Posting a Malicious Message to Display Cookies就是把Task1中的alert("hello")换为alert(document.cookie)
Task 3: Stealing Cookies from the Victim’s Machine修改javascript脚本,发送cookie到我们监听的端口。使用nc -lknv 5555进行监听
保存之后,访问主页之 ...
Shellcode Development LabTask 1.a: The Entire ProcessCompiling to object code.将汇编语言编译成为机器码:
Linking to generate final binary.将编译后的文件进行链接,就生成了可执行文件
运行之后可以看到是子进程运行的shell命令
Getting the machine code可以通过objdump -Mintel --disassemble mysh.o查看编译之后机器码
也可以通过 xxd -p -c 20 mysh.o查看没有被高亮的机器码
Using the shellcode in attacking code.可以使用convert.py将机器码转换一个格式
Task 1.b. Eliminating Zeros from the Code先看看/的指令是:2f,然后68当作结尾符
由于不能使用\,就使用***将h填满到4个字节,因为是小端存储所以需要先左移,再右移的方式将***消除掉。
查看反汇编指令:并没有00
成功运行
Task 1.c. ...
Seed Lab2.0: MD5 Hash CollisionTask1首先编写一个内容为hello world的·prefix.txt文件
Question 1. If the length of your prefix file is not multiple of 64, what is going to happen?在末尾补0
Question 2. Create a prefix file with exactly 64 bytes, and run the collision tool again, and see what happens.创建了一个64比特的文件,生成的两个文件md5值还是相同的
通过bless文件查看两个文件的二进制,发现末尾没有继续添0了
Are the data (128 bytes) generated by md5collgen completely different for the two output files? Please identify all the bytes that are different.构造出test. ...
端口扫描工具使用ICMP协议探测主机是否开启代码12345678def ping(host): print("Testing:", host) pkt = IP(dst=host) / ICMP() / b'I\'m a ping packet ' reply = sr1(pkt, timeout=2, verbose=False) # 接收一个回复包 if reply: print(f"{host} is up!") else: print(f"{host} is down!")
Ping请求数据包。它使用了Scapy库来构建网络数据包。
IP(dst=host): 这部分代码创建了一个IP数据包,其中 dst 参数设置为传递给函数的主机地址。这是Ping请求的目标主机地址
ICMP(): 这部分代码创建了一个ICMP包,用于发送Ping请求
b'I\'m a ping pac ...
SpringCloud-OpenFeign我觉得OpenFeign就是对Ribbon的一个增强,同时兼容了SpringMVC的注解
需要的依赖有:Eureka Client,Ribbon,OpenFeign
1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
在application中配置与之前的Ribbon一样
在Service报下创建一个远程调用的服务,使用FeignClient注解实现服务绑定
1234567891011121314151617181920212223package net.biancheng.c.service;import net.biancheng.c.entity.Dept;import org.springframework.c ...
Spring Cloud-EurekaEureka两大组件
Eureka Server 服务注册中心,用于提供服务注册功能,当一个客户端启动后,会把自己注册到服务注册中心,在其他微服务调用的时候,会通过服务注册中心拉取自己需要的服务
Eureka Client Eureka客户端,简单来说就是各个微服务,对于Eureka来说,Client会想服务注册中心周期性地发送心跳,若超过这个周期没有发送心跳,Server就会把该服务给移除
Eureka服务注册与服务发现Eureka服务注册与服务发现原理图:
服务注册中心(Register Service):它是一个 Eureka Server,用于提供服务注册和发现功能。
服务提供者(Provider Service):它是一个 Eureka Client,用于提供服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现。
服务消费者(Consumer Service):它是一个 Eureka Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。
注意到提供者和消费者都是一个Client,在我刚开始看的时 ...
SpringCloud-Ribbon负载均衡在任何一个系统中,负载均衡都是一个十分重要且不得不去实施的内容,它是系统处理高并发、缓解网络压力和服务端扩容的重要手段之一。
负载均衡(Load Balance) ,简单点说就是将用户的请求平摊分配到多个服务器上运行,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。
常见的负载均衡方式有两种:
服务端负载均衡
客户端负载均衡
服务端负载均衡是客户端发送一个请求到负载均衡服务器,再由负载均衡服务器把请求分配给各个服务器。
客户端负载均衡是客户端持有一张服务清单,发送请求时选择一个服务器去发送请求
Ribbon 实现服务调用RestTemplate 是 Spring 家族中的一个用于消费第三方 REST 服务的请求框架。RestTemplate 实现了对 HTTP 请求的封装,提供了一套模板化的服务调用方法。
RestTemplate 针对各种类型的 HTTP 请求都提供了相应的方法进行处理,例如 HEAD、GET、POST、PUT、DELETE 等类型的 HTTP 请求,分别对应 RestTemplate ...
目录
面向对象编程(中级)
Object类
面向对象编程(高级)
面向对象编程目录
访问修饰符
封装
重写(Override)
重载(Overload)
继承
多态
访问修饰符访问修饰符有:public、protected、默认、private
有下表的关系
访问级别
访问控制修饰符
同类
同包
子类
不同包
公开
public
√
√
√
√
受保护
protected
√
√
√
×
默认
没有修饰符
√
√
×
×
私有
private
√
×
×
×
封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将[数据]与操作数据的[源代码]进行有机的结合,形成“类”,其中数据和函数都是类的成员。
我理解到的结构是这样的:
类中定义的数据是私有的外部调用该类时就不能修改其中的代码,只有通过类中定义的方法才能拿到数据。这样就可以隐藏实现细节,同时可以保证数据的安全。
封装中涉及到getter和setter方法,可以通过alt+ins ...