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

2024-02-21 03:52

本文主要是介绍Code-Audit(代码审计)习题记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍:

自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit

1、习题一 

题目内容如下:


1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= 
<?php error_reporting(0); 
require __DIR__.'/lib.php'; echo base64_encode(hex2bin(strrev(bin2hex($flag)))), '<hr>'; highlight_file(__FILE__);

 

查看题目,发现是对$flag 参数进行了一系列加密,得到字符1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= 因此,如果要还原成flag 就必须对加密的字符串,一一解密。即 base64_decode() -> bin2hex()->strrev()->hex2bin()

因此,撰写代码如下:

<?php 
$s = "1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY="; 
echo(hex2bin(strrev(bin2hex(base64_decode($s))))) 
?>

放在php 代码运行平台运行得到flag

在线运行PHP

flag{582a0f2c7e302244b110cc461f5cb100}

2、习题二

题目内容如下

<?php 
error_reporting(0); 
require __DIR__.'/lib.php'; 
if(isset($_GET['time'])){ if(!is_numeric($_GET['time'])){ echo 'The time must be number.'; }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){ echo 'This time is too short.'; }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){ echo 'This time is too long.'; }else{ sleep((int)$_GET['time']); echo $flag; } echo '<hr>'; 
} 
highlight_file(__FILE__);

分析代码后,发现,只有当传入参数time的值必须为数字,而且值的大小必须介于在60 * 60 * 24 * 30 * 2=5,184,000 和60 * 60 * 24 * 30 * 3=7,776,000之间,才能拿到flag,比如说6000000 但是这样就直接sleep 的三个月,恰好科学计数法 6000000= 6e6满足数据要求,而且只需要sleep 6秒即可,因此构造payload 如下

?time=6e6

得到flag{yhngdasdaaljlj} 

3、习题三

题目内容如下:

但是只是显示了这一个英文字母,查看一下源码,发现有一个index.txt

 访问一下index.txt,发现了代码

<?php 
error_reporting(0); 
echo "<!--index.txt-->"; 
require __DIR__.'/lib.php'; 
if(!$_GET['id']) 
{ header('Location: index.php?id=1'); exit(); 
} 
$id=$_GET['id']; 
$a=$_GET['a']; 
$b=$_GET['b']; 
if(stripos($a,'.')) 
{ echo 'Hahahahahaha'; return ; 
} 
$data = @file_get_contents($a,'r'); 
if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4) 
{ echo $flag; 
} 
else 
{ print "work harder!harder!harder!"; 
} 
?>

分析代码,首先初始化会跳转 index.php?id=1 然后 得到三个参数 id,a, b, 如果a的值包含有. 就输出Hahahahahaha,然后不含. 就得到内容定义参数为data 。

如果data的值是1112 is a nice lab! 并且id==0 b 的值的长度大于5 ,eregi("111".substr($b,0,1),"1114") 用111拼接完b的值的第一个字母后的值在1114中 ,要么b的首个字符为4要么为空,并且b的第一个字母的值不能是4 那么只能为空,然后输出flag

解法

1、对于id 的值来说,是一个数字,有$id==0,这里利用弱类型比较可以传字符也可以用0e去绕过,为了使id==0可以给id一个字符 比如 id=abc

2、对于b来说,如果b的第一个字符拼接完111后满足正则 1114 ,并且b的首个字符不能为4 ,因此可以用%00截断,因为 %00的长度为 1 所以b=%0012345 满足长度大于5

eregi 函数在较旧版本的PHP中用于执行不区分大小写的正则表达式匹配。

3、对于a来说,可以使用$a可以使用伪协议php://input也可以用data类型url$a=php://input   

#然后POST一个内容为1112 is a nice lab!的body ,也可以使用 $a=data:,1112 is a nice lab!    #data类型url

$a 使用data类型url 构造如下

?id=abc&a=data:,1112 is a nice lab!&b=%0012345

flag{dsayandahckasda}

使用伪协议php://input

?id=abc&a=php:%2f%2finput&b=%250012345

 

flag{dsayandahckasda} 

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



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

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=