CODEBREAKING_writeup

admin 2022年1月6日01:40:19评论59 views字数 1247阅读4分9秒阅读模式

网址:https://code-breaking.com/

easy - function

1
2
3
4
5
6
7
8
9
10

<?php
$action = $_GET['action'] ?? '';
$arg = $_GET['arg'] ?? '';

if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
show_source(__FILE__);
} else {
$action('', $arg);
}

因为正则里用了^$,那么有没有可能在开头或结尾加入某个字符来绕过正则且函数依然能调用呢?
这里跑一遍0-128的ascii码,可以得到

code-breaking puzzles第一题,function,为什么函数前面可以加一个%5c?
其实简单的不行,php里默认命名空间是\,所有原生函数和类都在这个命名空间中。普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径;而如果写\function_name() 这样调用函数,则其实是写了一个绝对路径。
如果你在其他namespace里调用系统类,就必须写绝对路径这种写法。

PHP create_function代码注入

函数结构形似

1
2
3
4
5
create_function('$a,$b','return 111')
==>
function a($a, $b){
return 111;
}

然后执行,如果我们想要执行任意代码,就首先需要跳出这个函数定义。

1
2
3
4
5
create_function('$a,$b','return 111;}phpinfo();//')
==>
function a($a, $b){
return 111;}phpinfo();//
}

easy pcrewaf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}

if(empty($_FILES)) {
die(show_source(__FILE__));
}

$user_dir = 'data/' . md5($_SERVER['REMOTE_ADDR']);
$data = file_get_contents($_FILES['file']['tmp_name']);
if (is_php($data)) {
echo "bad request";
} else {
@mkdir($user_dir, 0755);
$path = $user_dir . '/' . random_int(0, 10) . '.php';
move_uploaded_file($_FILES['file']['tmp_name'], $path);

header("Location: $path", true, 303);
}

Code Breaking 挑战赛 Writeup
PHP create_function代码注入

FROM :blog.cfyqy.com | Author:cfyqy

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月6日01:40:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CODEBREAKING_writeuphttp://cn-sec.com/archives/722163.html

发表评论

匿名网友 填写信息