美文网首页代码审计
一、分段代码审计(5)

一、分段代码审计(5)

作者: FateKey | 来源:发表于2018-09-25 21:12 被阅读0次

二十一、数字验证正则绕过 *

<?php
error_reporting(0);
$flag = 'flag{test}';
if  ("POST" == $_SERVER['REQUEST_METHOD']) 
{ 
    $password = $_POST['password']; 
    if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password)) //preg_match — 执行一个正则表达式匹配
    { 
        echo 'Wrong Format'; 
        exit; 
    } 
    while (TRUE) 
    { 
        $reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; 
        if (6 > preg_match_all($reg, $password, $arr)) 
            break; 
        $c = 0; 
        $ps = array('punct', 'digit', 'upper', 'lower'); //[[:punct:]] 任何标点符号 [[:digit:]] 任何数字  [[:upper:]] 任何大写字母  [[:lower:]] 任何小写字母 
        foreach ($ps as $pt) 
        { 
            if (preg_match("/[[:$pt:]]+/", $password)) 
                $c += 1; 
        } 
        if ($c < 3) break; 
        //>=3,必须包含四种类型三种与三种以上
        if ("42" == $password) echo $flag; 
        else echo 'Wrong password'; 
        exit; 
    } 
}
?>

$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; 
if (6 > preg_match_all($reg, $password, $arr)) 
意为匹配到的次数要大于6次

$ps = array('punct', 'digit', 'upper', 'lower'); //[[:punct:]] 任何标点符号 [[:digit:]] 任何数字  [[:upper:]] 任何大写字母  [[:lower:]] 任何小写字母 
foreach ($ps as $pt) 
{ 
    if (preg_match("/[[:$pt:]]+/", $password)) 
        $c += 1; 
} 
if ($c < 3) break; 
意为必须要有大小写字母,数字,字符内容三种与三种以上

if ("42" == $password) echo $flag; 
意为必须等于42

答案:

42.00e+00000000000 
或
420.000000000e-1

正则还不是很熟,先引用别人的解题思路。

二十二、弱类型整数大小比较绕过

<?php
error_reporting(0);
$flag = "flag{test}";
$temp = $_GET['password'];
is_numeric($temp)?die("no numeric"):NULL;    
if($temp>1336){
    echo $flag;
} 
?>

要求很简单,不能是数字且大于1336,只要使用PHP弱类型即可,php当一个其它类型的数据和数值类型的数据比较大小时,会先将其他类型的数据转换成数值类型,这里我们只要输入类似9999a的数据即可满足条件。

二十三、md5函数验证绕过

<?php
error_reporting(0);
$flag = 'flag{test}';
$temp = $_GET['password'];
if(md5($temp)==0){
    echo $flag;
}
?>

要求md5值加密后为0,据我所知有一下方法:

  • 弱类型法 弱类型比较NULL == 0,可以输入空的password,加密后结果为null。也可以输入一个数组,php对数组进行hash运算后得到的结果为null
  • 科学记数法法 前面的题目提到过 0exxx==0,只要找到一个md5加密后0e开头的数据就可以满足数值为0

二十四、md5函数true绕过注入

error_reporting(0);
$link = mysql_connect('localhost', 'root', 'root');
if (!$link) { 
  die('Could not connect to MySQL: ' . mysql_error()); 
} 
// 选择数据库
$db = mysql_select_db("security", $link);
if(!$db)
{
  echo 'select db error';
  exit();
}
// 执行sql
$password = $_GET['password'];
$sql = "SELECT * FROM users WHERE password = '".md5($password,true)."'";
var_dump($sql);
$result=mysql_query($sql) or die('<pre>' . mysql_error() . '</pre>' );
$row1 = mysql_fetch_row($result);
var_dump($row1);
mysql_close($link);
?>

这个是思路是真没见过,md5($password,true) 将md5后的hex转换成字符串,想要完成注入,不难看出我们需要一个可以转换成'or'xxx的md5值,难就难在找到符合条件的字符串,我这里就不写代码自己找了,直接顺手牵羊一个。

字符串:ffifdyop
md5后,276f722736c95d99e921722cf9ed621c

二十五、switch没有break 字符与0比较绕过

<?php
error_reporting(0);
if (isset($_GET['which']))
{
    $which = $_GET['which'];
    switch ($which)
    {
    case 0:
    case 1:
    case 2:
        require_once $which.'.php';
         echo $flag;
        break;
    default:
        echo GWF_HTML::error('PHP-0817', 'Hacker NoNoNo!', false);
        break;
    }
}
?>

这题要求包含flag.php

直接使用?which=flag就成功了,为什么呢?
问题就在于 'flag' == 0 结果为true和没有使用break,'flag' == 0是因为弱类型比较,此处不再做过多解释。因为'flag' == 0成立所以case 0 被执行,又因为没有使用break语句,所以case1和case2也被执行,所以直接输入?which=flag就可以执行成功。

相关文章

  • 一、分段代码审计(5)

    二十一、数字验证正则绕过 * 正则还不是很熟,先引用别人的解题思路。 二十二、弱类型整数大小比较绕过 要求很简单...

  • 一、分段代码审计(2)

    六、strcmp比较字符串 本函数返回:=0 如果两个字符串相等<0 如果 string1 小于 string2>...

  • 一、分段代码审计(3)

    十一、sql闭合绕过 很简单的登陆sql闭合绕过,闭合掉'和)然后将后面的东西注释掉。payload:admin'...

  • 一、分段代码审计(4)

    十六、SQL注入or绕过 magic_quotes_gpc 魔术引号开关在magic_quotes_gpc = O...

  • 【代码审计】PHP代码审计

    1. 概述 代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应用程序在开发阶段存在的一...

  • 【一模排名】2019年海淀区初三一模区排名出炉

    海淀区初三一模区排名 语文英5分段 语文5分段 数学5分段 英语5分段 物理5分段 化学5分段 生物5分段 道德与...

  • 2021-12-06-java代码审计初步认知

    一、代码审计的定义代码审计是一种以发现安全漏洞,程序错误和程序违规为目标的源代码分析技能。 二、代码审计需要的能力...

  • 代码审计

    代码审计工具 1、三款自动化代码审计工具教程2、seay源代码审计系统 PHP核心配置详解 注意PHP各个版本中配...

  • 🎐代码审计

    ?源代码审计分为白盒、黑盒、灰盒 白盒:拥有源代码进行审计黑盒:不知道源代码的情况下进行渗透审计灰盒:介于黑盒与白...

  • 代码审计从入门到放弃(三) & phplimit

    前言 接着前面的代码审计从入门到放弃(一) & function、代码审计从入门到放弃(二) & pcrewaf ...

网友评论

    本文标题:一、分段代码审计(5)

    本文链接:https://www.haomeiwen.com/subject/hqbtnftx.html