web渗透
未读PHP 与MySQL 交互了解PHP 与MySQL 交互流程
掌握PHP 与MySQL 交互相关函数
函数速查
函数名
作用
mysqli_connect()
与MySQL 数据库建立连接。
mysqli_close()
关闭与MYSQL 数据库建立的连接。
mysqli_connect_errno()
与MySQL 数据库建立连接时,发生错误时的错误编号。
mysqli_connect_error()
与MySQL 数据库建立连接时,发生错误时的错误信息。
mysqli_query()
执行SQL 语句。
mysqli_errno()
执行SQL 语句时,发生错误的编号。
mysqli_error()
执行SQL 语句时,发生错误的信息。
mysqli_fetch_assoc()
从结果集对象中取数据,按条取数据。
交互过程
建立与MySQL 链接。
执行SQL 语句,返回结果集对象。
从结果集对象中取数据。
关闭与MySQL 链接。
与MySQL 建立链接直接使用PHP 提供的函数。
建立链接123456$db_host = " ...
自定义函数掌握PHP 语言中函数定义的方法
掌握函数的调用
了解变量的作用范围
了解传参过程
函数定义函数就是可以完成固定功能的语句或语句集合,可以重复调用。
函数语言结构1234567function 函数名(形式参数1,形式参数2...){ //函数体 return 返回值}函数名()
定义一个简单的函数:
1234567// funtion.phpfunction test(){ echo "This is function ".__FUNCTION__;}test();
函数传参12345678// function.phpfunction add($x, $y){ $sum = $x + $y; return $sum;}echo add(10, 3);
注意
function 是PHP 的关键字,用于完成函数的定义;
函数名的命名,应该避开PHP 关键字,命名规则与变量的命名规则相同;
形式参数,形参,给函数传递参数用的,仅作占位用;
实际参数,实参,真正参与 ...
数组概念了解PHP 中数组的概念
掌握数组的创建方法
数组概述学生信息1234567891011$name = "xiu";$sex = true;$age = 18;$score = 99.9;$stu1 = $name;$stu1 = $sex;$stu1 = $age;$stu1 = $score;var_dump($stu1);
把学生信心存储在一个变量里,需要用数组来实现。
123456789101112$name = "xiu";$sex = true;$age = 18;$score = 99.9;$stu1[] = $name;$stu1[] = $sex;$stu1[] = $age;$stu1[] = $score;echo "<pre>";var_dump($stu1);
数组特点键值对(key-value);
键,key,存储数组中,变量的“编号”。
值,value,存储数组中,变量的值。
数组中的元素可以是任意类型的数据对象。
索引数组,变量的“编号”是整数,整数不具 ...
初识PHP
了解PHP 语言
PHP 语言标记123456789<h1>My Name is XIU!</h1><script> console.log("This message is from info.php!")</script><?php // PHP 的开始标记,表示从此标记开始,进入PHP 模式。 phpinfo(); // PHP 代码 // PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式 // 之后的内容依然被PHP 解释引擎认为是纯文本字符串。?>
说明:
在PHP 文件中,可以与HTML 和JavaScript 混编。
开始标记<?php 表示进入PHP 模式,结束标记?>,标识退出PHP 模式。
PHP 模式之外的内容会被作为字符输出到浏览器中。
HTML 或JavaScript 对于PHP 来说就是纯文本字符串。
1234567$str=< ...
麻省理工学院对Kerberos协议的诞生有过一个生动有趣的故事,这个故事方便我们理解为什么Kerberos协议要设计成现在的这种认证模式,详细内容见上一篇
背景1、个人文件还是公司文件以及服务都存在于一台系统上,所有人都要去一台机器办公,效率非常低,为每个人分配了电脑以后就需要考虑安全问题
2、如何让服务器正确识别每一个人,假定所有数据包在传输过程中都可以被任意截取和修改
3、在每一台电脑上都存入所有人的账户密码是不现实的,所以引入一个认证服务统一管理所有的用户密码
4、假设用户访问邮件服务,认证服务让你提供密码以此来证明身份,它把你提供的密码和数据库中的密码相比较,通过认证,认证服务不会提供给你任何密码,不然下次你就可以不认证直接利用密码登录,认证服务会给你一张票,拿到票后,你把此票给邮件服务,以此来证明你的身份
5、需要解决的问题,每次使用还没有得到票的服务前,都必须给认证密码。比如使用邮件服务,就要输入一次。使用文件服务,又要输入一次。打印服务,还要输入一次,并且网络中明文传输密码。不法分子就可以监听网络流量获取密码。
6、引入”票据授权”服务(TGS),TGS将代替认证服务的发 ...
Designing an Authentication System:
a Dialogue in Four Scenes
版权所有1988,1997麻省理工学院。版权所有
原作者Bill Bryant,1988年2月。
由Theodore Ts’o转换为HTML格式,1997年2月。在后记中添加了Kerberos V5的改动。
摘要 这段对话将不断完善和优化一个叫”Charon”的网络系统。随着对话的推进,人物雅典娜和欧里庇得斯将一步步发现这个系统存在的安全问题。当每个安全问题出现时,他们将采取不同的应对方案。在对话的最后,他们成功创建出了一个安全可靠的系统。
最终,雅典娜将此系统命名成”Kerbeors“,巧合的是,麻省理工学院的Athena项目设计的认证系统也是这个名称。1988年冬季在德克萨斯州达拉斯举行的 USENIX 大会上提出的Kerberos:一个网络认证系统,与此对话中的”Kerberos”系统有着惊人的相似之处。
目录 ● 人物简介 ● 第一幕 ● 第二幕 ● 第三幕 ● 第四幕
人物简介 雅典娜 前途无量的系统开发工程 ...
web渗透
未读JAVA反序列化漏洞类继承1234567891011121314151617181920212223242526public class Person { public int age; public String name; public void talk(){ System.out.println("Person 说话了"); }}public class Student extends Person{ public int score; public void talk(){ System.out.println("Student 说话了"); }}public class Test { public static void main(String[] args) { Student stu1 = new Student(); stu1. ...
序列化与反序列化seriallization 序列化 : 将对象转化为便于传输的格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
deseriallization 反序列化:将序列化的数据恢复为对象的过程。
漏洞成因不管是PHP的反序列化漏洞还是JAVA的反序列化漏洞都基于一定的前提
比如java反序列化漏洞大名鼎鼎的cc链就需要服务端使用存在漏洞的commoncollections版本,并且jdk也要对
客户端可以控制序列化的对象传入服务端的readObject()方法,大多数的服务端应用都会重写这个方法,当服务端启用某些出名的组件时,我们也可以看到这些组件的代码,当组件中存在可以执行任意代码的代码块,假设为A,我们可以分析这块代码块在组件运行中被哪些对象B调用,找到B以后找调用B的C,直到找到接受我们序列化对象的readObject()方法调用,在对象中填入相关参数,满足这一系列的调用条件,形成链子
PHP反序列化serialize(); 将对象序列化成字符串
unserialize(); 将字符串反序列化回对象
序列化对象转换成字符串
方 ...
编程语言
未读强烈推荐视频
1https://www.bilibili.com/video/BV16h411z7o9?p=4&vd_source=b2266581304ec9fed75badf10a27c9dd
双亲委派ClassLoader(类加载器)
Java源代码被编译器编译成**.class**的字节码文件。然后由我们得ClassLoader负责将这些class文件给加载到JVM中去执行
Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。
AppClassLoader:主要负责加载应用程序的主函数类
原理当一个Hello.class这样的文件要被加载时。不考虑我们自定义类加载器,首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载 ...
注意区分类加载和加载阶段的区别:
类加载:指整个类加载过程,包括:加载阶段、链接阶段、初始化阶段。
加载阶段:指类的加载过程中的一个阶段(加载阶段)。
类生命周期加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,任何类都有且仅有一个自己的class对象,也就是我们反射获取的那个class对象。
类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器
1、从本地文件系统加载class文件,这是绝大部分程序的类加载方式。2、从JAR包加载class文件,这种方式也是很常见的,JDBC编程时用到的数据库驱动类就放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。3、通过网络加载class文件。4、把一个Java源文件动态编译,并执行加载
链接分为验证、准备和解析三步,在链接的准备阶段会为类的静态变量分配内存,并设置默认初始值,例如代码中一个静态变量private static ...










