网络编程与渗透技术笔记
首页
Search
1
Java编程小练习题目
24 阅读
2
Centos7.9系统如何换国内镜像源?
22 阅读
3
用Java编写九九乘法口诀表
18 阅读
4
PHP在线加密系统源码
18 阅读
5
全开源图床系统源码
17 阅读
Kali Linux
综合渗透注入
网站搭建与运维
编程开发
Java教程
Go教程
PHP教程
Python教程
MySQL
工具与脚本
网安竞赛
源码文件
漏洞百科
iAPP
登录
/
注册
热门文章
24 ℃
Java编程小练习题目
Java教程
编程开发
# 编程开发
1年前
2
24
0
22 ℃
Centos7.9系统如何换国内镜像源?
Kali Linux
# Kali linux
1年前
1
22
0
18 ℃
用Java编写九九乘法口诀表
Java教程
编程开发
# 编程开发
1年前
2
18
0
18 ℃
PHP在线加密系统源码
源码文件
# 源码文件
1年前
0
18
0
17 ℃
全开源图床系统源码
源码文件
# 源码文件
1年前
3
17
0
16 ℃
开发进度网站带后台源码
源码文件
# 源码文件
1年前
1
16
0
最新发布
2024-05-15
CTF网络安全大赛web题目:just_sqli
这道题目是bugku的web题目 题目的 描 述: KosenCTF{} 题目Web源代码: <?php $user = NULL; $is_admin = 0; if (isset($_GET["source"])) { highlight_file(__FILE__); exit; } if (isset($_POST["username"]) && isset($_POST["password"])) { $username = $_POST["username"]; $password = $_POST["password"]; $db = new PDO("sqlite:../database.db"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $db->exec("CREATE TABLE IF NOT EXISTS users (username TEXT UNIQUE, password TEXT, is_admin BOOL);"); $q = "username, is_admin FROM users WHERE username = '$username' AND password = '$password'"; if (preg_match("/SELECT/i", $q)) { throw new Exception("only select is a forbidden word"); } $rows = $db->query("SELECT " . $q, PDO::FETCH_ASSOC); foreach ($rows as $row) { $user = $row["username"]; $is_admin = $row["is_admin"]; } } catch (Exception $e) { exit("EXCEPTION!"); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Just SQLi</title> </head> <body> <h1>Just SQLi</h1> <div><a href="?source=1">view source</a> <?php if ($user) { ?> <div>Nice Login <?= $user ?></div> <?php if ($is_admin) { ?> <div>And Nice to Get the Admin Permission!</div> <div> <?= include("../flag.php"); ?></div> <?php } ?> <?php } ?> <form action="" method="POST"> <div>username: <input type="text" name="username" required></div> <div>password: <input type="text" name="password" required></div> <div> <input type="submit" value="Login"> </div> </form> </body> </html>从给定的PHP代码中,有几个关键的安全问题可以被利用来进行SQL注入。但首先,需要注意的是代码中尝试使用preg_match来防止"SELECT"关键词的使用,然而这种尝试是无效的,因为它并没有在构造完整的SQL查询时应用此检查。 下面是一个可能的SQL注入攻击步骤,来绕过身份验证并获取管理员权限: 用户名注入:由于用户名和密码直接插入到SQL查询中,我们可以尝试在用户名字段中注入SQL代码。但是,由于preg_match检查,我们不能直接包含"SELECT"。但我们可以尝试其他方法,如注释掉原查询的剩余部分。 构造注入语句:在用户名字段中,我们可以尝试使用SQL注释(-- 在SQLite中是有效的)来截断原始查询的其余部分,并附加我们自己的查询条件。由于代码尝试直接构造一个片段并添加到SELECT查询中,我们可以利用这一点。 绕过preg_match:由于preg_match只检查$q变量(这只是一个片段,不是完整的SQL查询),我们可以构造一个不包含"SELECT"的片段,但在实际执行时,它将成为完整的SELECT查询的一部分。 下面是一个可能的注入攻击示例(请注意,这只是一个示例,实际情况可能有所不同): 在用户名字段中输入: ' OR '1'='1' --在密码字段中输入任意值(例如"password123")。 提交表单后,生成的SQL查询将是: SELECT username, is_admin FROM users WHERE username = '' OR '1'='1' --' AND password = 'password123'由于--是SQL注释,所以查询的剩余部分(包括密码验证部分)将被忽略。这样,查询将返回表中的所有用户,无论他们的密码是什么。 然而,为了获取管理员权限,我们可能还需要进一步利用其他漏洞或尝试其他注入方法,因为此查询仅返回用户名和is_admin字段,而不直接修改它们。 但请注意,这种攻击是违法的,并且只应在法律允许和道德接受的环境(如安全培训或测试环境)中进行。在实际环境中尝试此类攻击可能导致法律责任和其他后果。 ctf.jpg图片 我们开始对这个题目进行sql注入吧 一开始我们先盲注,构造查询语句 admin'or 1=1 -- 发现行不通 接着我们开始联合查询 admin'union select 1,2#发现还是不行 看了下代码, preg_match("/SELECT/i", $q这个对select进行了处理。 接着我们开始下一个方法就是用values进行替换select就行了 admin'union values('password',1) -- 屏幕截图 2024-05-15 135422.png图片 也是成功拿到答案
网安竞赛
# 网安竞赛
红帝
1年前
0
6
0
2024-05-14
Java编程语言变量赋值教程
Java编程语言中的变量赋值是一个基础且重要的概念。在Java中,变量用于存储数据,这些数据可以是各种类型,如整数、浮点数、字符、字符串等。以下是Java中变量赋值的基本教程: 1. 声明变量 在Java中,首先你需要声明变量的类型。类型决定了变量可以存储什么样的数据以及可以对这些数据执行哪些操作。 int myInteger; // 声明一个整型变量 double myDouble; // 声明一个双精度浮点型变量 String myString; // 声明一个字符串变量 char myChar; // 声明一个字符变量2. 初始化(赋值)变量 声明变量后,你需要给它一个初始值(即赋值)。在Java中,变量的声明和初始化通常可以在一行代码中完成。 int myInteger = 10; // 声明并初始化一个整型变量 double myDouble = 3.14; // 声明并初始化一个双精度浮点型变量 String myString = "Hello, World!"; // 声明并初始化一个字符串变量 char myChar = 'A'; // 声明并初始化一个字符变量3. 变量命名规则 在Java中,变量命名需要遵循一些规则: 变量名必须以字母、下划线_或美元符号$开头。 变量名可以包含字母、数字、下划线和美元符号。 变量名是大小写敏感的。 避免使用Java的关键字作为变量名。 4. 类型转换 在Java中,如果需要将一个类型的值赋给另一个类型的变量,可能需要进行类型转换。这包括自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。 double myDouble = 10.0; // 自动类型转换(int到double) int myInt = (int) myDouble; // 强制类型转换(double到int,可能丢失精度)5. 常量 与变量不同,常量在程序执行期间其值不能被改变。在Java中,常量使用final关键字声明。 final int MY_CONSTANT = 100; // 声明一个整型常量6. 示例代码 以下是一个简单的Java程序,展示了如何声明、初始化和使用变量: public class VariableAssignmentExample { public static void main(String[] args) { // 声明并初始化变量 int age = 25; String name = "John Doe"; // 使用变量 System.out.println("My name is " + name + " and I am " + age + " years old."); // 改变变量的值 age = 26; System.out.println("I am now " + age + " years old."); // 声明常量 final double PI = 3.141592653589793; System.out.println("The value of PI is approximately " + PI); } }java.jpg图片
Java教程
编程开发
# 编程开发
红帝
1年前
0
3
0
2024-05-14
Go编程语言变量赋值教程
Go语言(Golang)是一种静态类型编程语言,其变量赋值的方式相对直观和简洁。下面是一个关于Go语言中变量赋值的教程: 1. 声明并赋值 在Go语言中,可以使用短变量声明操作符 := 来声明并初始化一个变量。这种方式会自动推断变量的类型。 package main import "fmt" func main() { // 声明并初始化一个整型变量 x := 42 fmt.Println(x) // 声明并初始化一个字符串变量 y := "Hello, World!" fmt.Println(y) }2. 显式声明和赋值 如果你需要显式声明变量的类型,可以使用 var 关键字。 package main import "fmt" func main() { // 显式声明并初始化一个整型变量 var a int = 42 fmt.Println(a) // 显式声明并初始化一个字符串变量(可以省略类型后的 `=` 和初始值) var b string b = "Hello, Golang!" fmt.Println(b) // 可以在声明时直接赋值,并省略类型后的 `=` var c int = 10 var d string = "Hello again!" fmt.Println(c, d) // 声明多个变量(类型相同) var e, f int = 1, 2 fmt.Println(e, f) // 使用短变量声明操作符声明多个变量(类型自动推断) g, h := 3.14, "Pi" fmt.Println(g, h) }3. 变量类型推断 在Go语言中,编译器会根据赋值操作右侧的值来推断变量的类型。因此,在大多数情况下,你可以省略变量类型的显式声明。 4. 变量作用域 在Go语言中,变量的作用域由其声明位置决定。在函数内部声明的变量是局部变量,只能在该函数内部访问。在函数外部声明的变量是全局变量,可以在整个包中访问(如果首字母大写,则可以被其他包访问)。 5. 变量重声明 在相同的作用域内,不能重声明一个已经存在的变量(即使它们的类型相同)。但是,你可以在相同的作用域内为已经存在的变量重新赋值。 package main import "fmt" func main() { a := 10 fmt.Println(a) // 输出 10 a = 20 // 重新赋值 fmt.Println(a) // 输出 20 }6. 常量 除了变量之外,Go语言还支持常量(constants)。常量是在程序编译时确定其值的,并且在程序运行期间不能修改。 package main import "fmt" const Pi = 3.14159 // 声明一个常量 func main() { fmt.Println(Pi) // 输出 3.14159 // Pi = 3.14 // 错误:不能修改常量的值 } 
Go教程
编程开发
# 编程开发
红帝
1年前
0
1
0
2024-05-13
LeetCode算法题:两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 : 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 答案: 在Go语言中,可以使用哈希表(在Go中通常使用map)来解决这个问题。遍历数组,同时检查目标值减去当前元素的值是否已经在哈希表中存在。如果存在,那么找到了两个数,返回它们的索引。如果不存在,则将当前元素及其索引添加到哈希表中。 以下是实现这个算法的Go代码示例: package main import ( "fmt" ) func twoSum(nums []int, target int) []int { // 创建一个map用于存储元素和对应的索引 numIndices := make(map[int]int) for i, num := range nums { // 检查目标值减去当前元素的值是否已经在map中 complement := target - num if index, ok := numIndices[complement]; ok { // 如果存在,返回这两个索引 return []int{index, i} } // 如果不存在,将当前元素及其索引添加到map中 numIndices[num] = i } // 如果没有找到这样的两个数,返回nil(虽然题目保证有解,但为了完整性还是返回nil) return nil } func main() { nums := []int{2, 7, 11, 15} target := 9 result := twoSum(nums, target) fmt.Println(result) // 输出: [0 1] }go.jpg图片 在这个代码中,twoSum函数接受一个整数数组nums和一个目标值target,并返回一个包含两个索引的整数切片,这两个索引对应的元素之和等于target。如果找不到这样的两个数,按照题目要求,实际上不需要返回nil(因为题目保证有解),但为了代码的完整性,这里还是加上了返回nil的分支。在main函数中,我们调用twoSum函数并打印结果。
Go教程
编程开发
# 编程开发
红帝
1年前
0
3
0
2024-05-13
Go语言数值类型教程
Go语言数值类型详细教程 Go语言提供了丰富的数值类型,包括整数类型、浮点类型和复数类型。每种类型都有其特定的用途和存储范围。下面将详细介绍这些类型,并附带示例代码。 1. 整数类型 整数类型用于存储整数,包括正整数、负整数和零。Go语言支持有符号和无符号整数,以及基于平台大小可变的整数。 有符号整数: - int8:8位有符号整数(-128 到 127) - int16:16位有符号整数(-32768 到 32767) - int32:32位有符号整数(-2147483648 到 2147483647) - int64:64位有符号整数(-9223372036854775808 到 9223372036854775807) - int:平台相关的有符号整数(通常是32位或64位) 无符号整数: - uint8:8位无符号整数(0 到 255),别名 byte - uint16:16位无符号整数 - uint32:32位无符号整数 - uint64:64位无符号整数 - uint 或 uintptr:平台相关的无符号整数(通常是32位或64位),uintptr 用于指针算术 go.jpg图片 示例代码: package main import "fmt" func main() { var int8Var int8 = 127 var uint8Var uint8 = 255 var intVar int = 100 fmt.Println("int8Var:", int8Var) fmt.Println("uint8Var:", uint8Var) fmt.Println("intVar:", intVar) // 整数运算 sum := intVar + 50 fmt.Println("Sum:", sum) }2. 浮点类型 浮点类型用于存储带小数点的实数。 float32:32位IEEE 754浮点数 float64:64位IEEE 754浮点数 示例代码: package main import "fmt" func main() { var float32Var float32 = 3.14159 var float64Var float64 = 3.14159265358979323846 fmt.Println("float32Var:", float32Var) fmt.Println("float64Var:", float64Var) // 浮点运算 product := float64Var * 2 fmt.Println("Product:", product) }3. 复数类型 复数类型用于存储复数,即带有实部和虚部的数。 complex64:由两个float32组成的复数 complex128:由两个float64组成的复数 在Go中,可以使用内置的complex函数来创建复数,并使用real和imag函数来获取其实部和虚部。 示例代码: package main import ( "fmt" "math/cmplx" ) func main() { var complex64Var complex64 = complex(3, 4) var complex128Var complex128 = complex(3.0, 4.0) fmt.Println("complex64Var:", complex64Var) fmt.Println("complex128Var:", complex128Var) // 获取实部和虚部 realPart := real(complex64Var) imagPart := imag(complex64Var) fmt.Println("Real part:", realPart) fmt.Println("Imaginary part:", imagPart) // 复数运算(例如求模) modulus := cmplx.Abs(complex128Var) fmt.Println("Modulus:", modulus)
Go教程
编程开发
# 编程开发
红帝
1年前
0
3
0
上一页
1
...
19
20
21
...
44
下一页
易航博客
贝海云计算