这段时间学习的时候做的题,挑了一些写了点笔记,凑活看吧
反序列化

题目如图。
反序列化题目给的php代码类似于说明书,告诉我们有几个变量,让变量值等于什么才能得到flag
$ a=“admin”;
$p=123456;
$ a = new Name( $a,$ p);(看传参要求,有就写)
$stus = serialize($ a);(序列化)
print_r($stus);
真正解题目需要在在线运行工具处定义字符串,再将字符串发送给题目,序列化,题目就能把结果(flag)输出


同类型:

—wakeup
对象属性个数大于原来个数
Eg :O:4:“Name”:2:{s:14:“Nameusername”;s:5:“admin”;s:14:“Namepassword”;i:123456;}
改后:O:4:“Name”:3:{s:14:“Nameusername”;s:5:“admin”;s:14:“Namepassword”;i:123456;}
Ctfshow一句话木马变形

查了一下源代码发现有system(ls);

发现flag.Php路径
直接echo弹出错误,知道被过滤
搜索发现
show_source(next(array_reverse(scandir(getcwd()))));
(PHP代码中一个典型的文件路径获取技巧)
执行顺序(从内到外)
getcwd()
获取当前工作目录的路径
scandir(getcwd())
扫描当前目录,返回包含所有文件和目录的数组
例如:[0=>‘.’, 1=>‘…’, 2=>‘index.php’, 3=>‘config.php’, …]
array_reverse(…)
将数组顺序反转
原本索引0是.,反转后最后一项变成第一项
next(…)
获取反转后数组的下一个元素(即原来倒数第二个元素)
show_source(…)
高亮显示该文件的源代码
常见于PHP webshell或文件管理后门,用于
绕过文件访问限制
通过调整顺序读取不同文件
作为代码混淆的一种手段
Ctfshow31~39(rce 文件包含)
34为例

有正则存在,过滤了很多东西。Flag system php cat sort…
发现include没有被ban,可以试着用$ _GET来传递内容,拿到flag
理论成立,实践开始
需要用include传参,所以有include $_GET[](空格被ban所以拿%0a绕过)
”?>”用于闭合前半句话
[]中定义一个参数“1”,在参数“1”中指定要包含的文件名(这里是flag.php)
php://filter/convert.base64-encode/resource=是经过base64编码的php伪协议
最后base64解码,得到flag


[SWPUCTF 2021 新生赛]easyupload3.0

直接传马不管用


题目还提示要和其他文件配合,尝试让他报错,
发现还有 Apache中间件(知道需要.htaccess

编写一个.htaccess文件和一个正常php木马伪装成的jpg文件,分别上传,成功后按照php木马流程做就能得到flag

[NSSCTF 2022 Spring Recruit]babyphp

三层php,
第一层POST传入a值,存在正则preg_match('/[0-9]/(不允许包含数字)但intval($_POST[‘a’]要求a必须为非零数
第二层post传入b1,b2
$_POST[‘b1’]!=$_POST[‘b2’]&&md5($_POST[‘b1’])===md5($_POST[‘b2’])
要求b1值不等于b2且b1,b2弱比较(md5)强相关
第三层post传入c1,c2
$_POST[‘c1’]!=$_POST[‘c2’]&&is_string($_POST[‘c1’])&&is_string($_POST[‘c2’])&&md5($_POST[‘c1’])==md5($_POST[‘c2’])
要求要求c1值不等于c2且c1,c2弱比较(md5)相关
用hackbar传入post值
a[]=1&b1[]=1&b2[]=2&c1=QNKCDZO&c2=240610708
拿到flag
[SWPUCTF 2022 新生赛]ez_ez_php(revenge)
打开题目有

查了一下flag.php得到一个假flag并提示用php伪协议

php伪协议得到如下

目录穿越拿到base64编码,解码拿到flag

[SWPUCTF 2022 新生赛]1z_unserialize
打开题目是一道美丽的反序列化(php 越学越发现他好爱反序列)

首先:反序列化题目给的php代码类似于一份说明书,告诉你定义了什么东西,然后让你在这份代码的基础上去修改,得到序列化内容当(payload)
这份代码定义了一个类,三个公共属性,对nss传入的内容进行反序列化

修改源代码生成序列化字符串,post传入拿下flag

[SWPUCTF 2022 新生赛]奇妙的MD5
!小知识点
ffifdyop
经过md5加密后:276f722736c95d99e921722cf9ed621c
再转换为字符串:‘or’6<乱码> 即 ‘or’66�]��!r,��b
用途:
select * from admin where password=’‘or’6<乱码>’
就相当于select * from admin where password=’'or 1 实现sql注入
开始
打开页面提示神奇的md5字符串,搜索知道是ffifdyop

输入后进入第二关

F12查看页面源代码知道要get传参x和y使二者进行md5弱类型比较


成功后发现url多了某个神奇文件

打开来到最后一关

Post传参wqh和dsy进行碰撞即可拿到flag

[SWPUCTF 2022 新生赛]ez_ez_unserialize
打开题目明显反序列化,找个php在线运行修改代码

定义a=new X…
得到序列化payload

写入x发现没反应,再次观察代码发现wakeup函数(对象属性个数大于原来个数)

修改拿到flag

[SWPUCTF 2022 新生赛]xff

打开题目,说要从本地进入
Bp抓包修改
添加X-Forwarded-For: 127.0.0.1

提示必须主页跳转,添加Referer: 127.0.0.1

找到flag
[SWPUCTF 2022 新生赛]ez_sql
手工sql
先通过万能密码知道有空格绕过和引号绕过
判断列表元素:2’//order//by/**/4#
判断数据库:nss=2’//ununionion//select/**/1,2,group_concat(schemaname)/∗∗/from/∗∗/infoorrmation_schema.schemata#
判断表: nss=2’//ununionion//select//1,2,group_concat(tablename)/∗∗/from/∗∗/infoorrmation_schema.tables//where/**/table_schema=database()#
判断列:nss=2’//ununionion//select//1,2,group_concat(columnname)/∗∗/from/∗∗/infoorrmation_schema.columns//where/**/table_name=‘NSS_tb’#
判断列的数据:
nss=2’//ununionion//select//1,2,Secr3t//from/**/NSS_tb#
(好干,其实是我忘了截图且懒得回去再找了,将就看吧)
[SWPUCTF 2022 新生赛]js_sign
挺有意思一道题
打开,查看源代码


看到有个./main.js
不点一下都对不起他放在这里

看到一串奇奇怪怪的数字,下面还有个很明显的base64编码,解码结果为tapcode(查了一下叫敲击码)
找敲击码在线编译器解码一下得到(或者直接让ai解码 )


直接复制粘贴过去会显示失败,转换成小写就成功了
[SWPUCTF 2022 新生赛]ez_rce
打开题目是一片空
虚拟机扫一下发现有robots.txt文件

查看路径,发现think PHP框架

拿工具扫一下
发现漏洞

命令执行ls
发现有shell.php
cat一下
找到一句话木马,哥斯拉连接,找到flag




[SWPUCTF 2022 新生赛]webdog1__start
打开题目啥也没有,试试协议

通过机器人协议成功进入

有fl4g.Php
查看,没有flag,但 f12 查看页面看到网络选项里的表头 发现hint有跟flag有点关系的

找到php代码,读代码做题

Get传入get参数,有关flag的都会被替换成空格,用php命令执行语句/?get=eval($_GET[x]);&x=system(‘cat /flag’);绕过直接传入flag,os执行代码拿到flag

[SWPUCTF 2022 新生赛]funny_php

题目分三关,第一关get传参num,使strlen($_GET[‘num’]) <= 3且 $_GET[‘num’] > 999999999
自己有一个小tips,遇到这种一眼看过去就不可能直接实现的要求,直接传入数组试试
尝试成功
让ai跑一下发现还有第二种方法:传 1e9(科学计数法),长度是 3,比较时会当成科学计数法数字,即 1000000000

第二关,get传入str强等于NSSCTF,但存在正则,识别到NSSCTF就会被删掉
题目解法:“构造一个字符串,让它在“删除所有 NSSCTF 子串”之后,最终收敛成 NSSCTF”
所以,传入str=NSSNSSCTFCTF
删完后剩下的就是NSSCTF,成功传入

第三关,老生常谈,md5 碰撞,post传入md5_1=QNKCDZO&md5_2=240610708
最后让题目判断L1L2L3的值是否等于1,拿到flag

[SWPUCTF 2022 新生赛]funny_web
intval() 的作用:把一个值转换成整数(int)

题目重点:满足$num != '12345’且intval($num) == ‘12345’
所以,传入12345+其他任何 都可以得到flag

Comments | 1 条评论
已认真观摩学习