【CTF刷题3】ctfshow刷题web部分wp(2)

题目来源:ctfshow菜狗杯

一言既出

考点:弱类型比较,intval()函数,注释

<?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
    if ($_GET['num'] == 114514){
        assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
        echo $flag;
    } 
} 

分析代码,传入num,要使num的值等于114514,经过intval()函数后要等于1919810。因此有两种思路:

1.让num的值同时满足这两个条件。比如可以构造num=114514+1919810-114514,传入时进行url编码。

由于是弱类型比较,提取开头数字就等于114514,满足条件1,而经过intval()函数处理,最后就是intval(1919810)==1919810,而不会执行die();

image-20240726142255179

2.让intval()函数后面的直接不执行(注释掉)。传入num=114514);//

image-20240726142935055

语句在执行的过程中变为:

assert("intval(114514);//)==1919810") or die("一言既出,驷马难追!");

部分被注释,不在运行,此时执行 echo $flag;

webshell

考点:序列化和反序列化

image-20240726155020343

分析,大致就是执行cmd语句,但会对cmd语句进行反序列化,使用传入的cmd要进行序列化

image-20240726155216131

序列化

image-20240726153456861

发现flag.php,再次修改,因为过滤了flag字母,使用tac f*打开。
找到flag

image-20240726155419560

化零为整

考点:代码审计,url编码

image-20240729172402714

其实就是把“大牛”二字用url编码后,分别传参就行。

传说之下(雾)

考点:控制台运行

打开链接,是一个贪吃蛇游戏,根据提示,要得到2077分才能出现flag。

调试器查看文件,发现本地变量是Game。

image-20240729175716678

在控制台输入Game,查看发现其中有个score变量,应该是存储分数的。

image-20240729175844065

输入Game.score=2077,然后开始游戏得一分即可出现flag。

image-20240729175959031

知识点分享:intval()函数绕过

intval的作用是取整。
原型:
intval(var,base) //var是值,base是进制,默认十进制。
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
◦ 如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);
◦ 如果字符串以 “0” 开始,使用 8 进制(octal);
否则, 将使用 10 进制 (decimal)。

例如:

intval('0x123')  	//结果0 
intval(0x123)	//16进制,结果291
intval('1e10')	//单引号传值的时候,它只识别字母前面的一部分
intval(1e10)	          //1410065409 
echo intval(42);                   //10进制, 42 
echo intval(4.2);                     // 4     小数点后的数字会直接舍去

但是如果在intval中对字符串进行加减了之后,php会将结果转化为十进制,从而传到intval中的是十进制的数字

例如:intval('0x123'+1)相当于 intval(292)

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦 & 醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值