i春秋 WEB code

一天一道CTF题目,能多不能少

打开网页入目的是一张图,查看网页源代码,发现图片是base64的加密,可能存在文件读取,尝试读取index.php的文件,得到源码:

<?php
/*** Created by PhpStorm.* Date: 2015/11/16* Time: 1:31*/
header('content-type:text/html;charset=utf-8');
if(! isset($_GET['jpg']))header('Refresh:0;url=./index.php?jpg=hei.jpg');
$file = $_GET['jpg'];
echo '<title>file:'.$file.'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
$file = str_replace("config","_", $file);
$txt = base64_encode(file_get_contents($file));echo "<img src='data:image/gif;base64,".$txt."'></img>";
/** Can you find the flag file?**/
?>

发现可能存在config.php文件,不过过滤了,访问肯定是不成功的~
看见Created by PhpStorm,知道是用PhpStorm写的,这个软件写的时候会生成一个.idea的文件夹,它存储了项目的配置文件,
一般还存在workspace.xml,打开.idea/workspace.xml可以发现:

存在这几个文件,访问fl3g_ichuqiu.php,发现一个表情,直接读取源码,可是下划线是被过滤的,所以用config代替,也就是直接访问index.php?jpg=fl3gconfigichuqiu.php,得到源码:

<?php
/*** Created by PhpStorm.* Date: 2015/11/16* Time: 1:31*/
error_reporting(E_ALL || ~E_NOTICE);
include('config.php');//获取length位数的随机字符串
function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') {$hash = '';$max = strlen($chars) - 1;for($i = 0; $i < $length; $i++)  {$hash .= $chars[mt_rand(0, $max)];}return $hash;
}//加密过程,txt是明文,key是秘钥
function encrypt($txt,$key){for($i=0;$i<strlen($txt);$i++){$tmp .= chr(ord($txt[$i])+10);               //txt内容的ascii码增加10}$txt = $tmp;$rnd=random(4);                                    //取4位随机字符$key=md5($rnd.$key);                          //随机字符与秘钥进行拼接得到新的秘钥$s=0;for($i=0;$i<strlen($txt);$i++){if($s == 32) $s = 0;$ttmp .= $txt[$i] ^ $key[++$s];             //将明文与key按位进行异或}return base64_encode($rnd.$ttmp);               //base64加密
}//解密过程,txt是密文,key是秘钥
function decrypt($txt,$key){$txt=base64_decode($txt);$rnd = substr($txt,0,4);                     //减掉4位随机数       $txt = substr($txt,4);                         //真正的密文$key=md5($rnd.$key);$s=0;for($i=0;$i<strlen($txt);$i++){if($s == 32) $s = 0;$tmp .= $txt[$i]^$key[++$s];                //将密文与秘钥进行异或得到tmp}for($i=0;$i<strlen($tmp);$i++){$tmp1 .= chr(ord($tmp[$i])-10);}return $tmp1;                                  //明文
}
$username = decrypt($_COOKIE['user'],$key);          //获取cookie的内容
if ($username == 'system'){                         //如果解密后等于system打印flagecho $flag;
}else{setcookie('user',encrypt('guest',$key));      //否则打印表情echo "╮(╯▽╰)╭";
}
?>

说实话,逻辑还是很清楚的,就是根据cookie的内容反推key,因为知道明文是guest,而我们需要的明文是system的key,所以我们可以先把前五位找出来,最后一位暴力去破,然而,用Python3却跑不出来!!!!最后看了大佬的wp之后,又敲了一遍脚本,大佬用的是Python2写的,我就想转成Python3,可是转成Python3还是出不来,Python2直接秒出,如果有大佬能够知道为啥希望能指导一手,感激~~

贴上Python2的成功脚本:

# _*_ coding: utf-8 _*
from base64 import *
import requests
import string#设置URL
url = "http://ce4d7cd87bd0400eae49ec2fa094677525d7825dd2e64350.changame.ichunqiu.com/fl3g_ichuqiu.php"cookie = requests.get(url).cookies['user']          #请求该URL,获取user的COOKIE值txt = b64decode(cookie)                               #将得到的cookie进行base64解码
rnd = txt[:4]                                      #密文前四位是随机字符
tmp = txt[4:]                                      #guest与key进行异或的密文,5位
key = list('123456')                             #key为6位的字符,目前不知是啥
guest = list('guest')                                #guest明文
system = list('system')                                  for i in range(0,len(guest)):guest[i] = chr(ord(guest[i]) + 10)               #为加密做准备for i in range(0,len(guest)):key[i] = chr(ord(tmp[i]) ^ ord(guest[i]))      #得到key的前五位for i in range(0,len(system)):system[i] = chr(ord(system[i]) + 10)          #同样是为了加密做准备#准备爆破key的第6位
s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"tmp_news = ''                                     #system与key的异或值
cookie_system = []
xstr = ""for ch in s:key[5] = chfor i in range(0,len(system)):tmp_news += chr(ord(system[i]) ^ ord(key[i]))xstr = rnd + tmp_news                            #随机字符与异或的结果拼接cookie_system.append(b64encode(xstr))          #base64加密,并加入到cookie_system中tmp_news = ""#print(cookie_system)for i in cookie_system:cookie = {'user':i.decode()}                  #设置cookieres = requests.get(url,cookies = cookie)     if "flag" in res.text:print res.text 

失败的Python3脚本╮(╯▽╰)╭(真心觉得和Python2一样,就是出不来!!!!):

import base64
import requests
import string#设置URL
url = "http://ce4d7cd87bd0400eae49ec2fa094677525d7825dd2e64350.changame.ichunqiu.com/fl3g_ichuqiu.php"cookie = requests.get(url).cookies['user']          #请求该URL,获取user的COOKIE值txt = base64.b64decode(cookie).decode()               #将得到的cookie进行base64解码
rnd = txt[:4]                                      #密文前四位是随机字符
tmp = txt[4:]                                      #guest与key进行异或的密文,5位
key = list('123456')                             #key为6位的字符,目前不知是啥
guest = list('guest')                                #guest明文
system = list('system')                                  for i in range(0,len(guest)):guest[i] = chr(ord(guest[i]) + 10)               #为加密做准备for i in range(0,len(guest)):key[i] = chr(ord(tmp[i]) ^ ord(guest[i]))      #得到key的前五位for i in range(0,len(system)):system[i] = chr(ord(system[i]) + 10)          #同样是为了加密做准备#准备爆破key的第6位
s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"tmp_news = ''                                     #system与key的异或值
cookie_system = []
xstr = ""for ch in s:key[5] = chfor i in range(0,len(system)):tmp_news += chr(ord(system[i]) ^ ord(key[i]))xstr = rnd + tmp_news                            #随机字符与异或的结果拼接cookie_system.append(base64.b64encode(xstr.encode()))  #base64加密,并加入到cookie_system中tmp_news = ""#print(cookie_system)for i in cookie_system:cookie = {'user':i.decode()}                  #设置cookieres = requests.get(url,cookies = cookie)     if "flag" in res.text:print(res.text)

i春秋 WEB code相关推荐

  1. i春秋 WEB 象棋

    i春秋 WEB 象棋 一天一道CTF题目,能多不能少 打开页面,一副象棋映入眼帘,玩了一会,,,太菜了,打不过人机,,,: 打开网页源代码,仔细查看一番,发现有一处CTF的字样~~: 这个正则表达式嘛 ...

  2. i春秋 WEB fuzzing

    i春秋 WEB fuzzing 一天一道CTF题目,能多不能少 打开网页发现there is nothing,最后一通折腾什么都没有,最后进行抓包,得到提示: 按照提示应该是要构造ip,使用X-For ...

  3. i春秋 WEB Login

    i春秋 WEB Login 一天一道CTF题目,能多不能少 打开网页,发现登录,查看源代码,发现疑似账号密码的东西~: 登录,发现什么都没有,源码也没有什么~: 既然如此就抓包吧,bp启动: 发现一个 ...

  4. i春秋 WEB 123

    i春秋 WEB 123 一天一道CTF题目,能多不能少 打开网页一个登录框,按照惯例查看网页源代码,有所发现: 查看user.php,发现存在但是什么都没有,检查是否存在备份文件~ 发现存在: 下载打 ...

  5. i春秋 WEB GetFlag

    i春秋 WEB GetFlag 一天一道CTF题目,能多不能少 打开网页,点击login来到登陆页面: 发现验证码是截取MD5的验证:substr(md5(captcha), 0, 6)=3aab4a ...

  6. 暑期练习web25:web code(i春秋)index.php文件包含、base64图片加密

    这次有意思,上来就是个萌妹子 但我们不能光看妹子,学习更重要!查看一波源码,很长一段,前面提示了是base64(html中图片可以用base64表示,那么用base64表示的文本就是破损图片) 但是我 ...

  7. i春秋-Web(一)

    前言 做了几道i春秋的Web题,所以总结一下. Web1:爆破-1 题目提示:某六位变量.查看题目,发现是代码审计 <?php include "flag.php"; $a ...

  8. I春秋——web Write up(三)

    前言:继续总结,学习更多关于web知识和练习编写脚本的能力. GetFlag 一个登陆框加上验证码,不过有一点不同的是substr(md5(captcha), 0, 6)=e7e24a,截取MD5加密 ...

  9. I春秋——web Write up(二)

    前言:最近都没有更新过,感觉博客快荒废了,得更新了[]( ̄▽ ̄)*,这次总结一下做的一些web题. 一.Not Found 打开页面便是404,但是下面有一个404.php,访问一下 除下有出题人的h ...

最新文章

  1. 活动目录之用户配置文件(转载)
  2. solve Ax+By+C=0
  3. 小师妹学JVM之:JIT中的PrintAssembly
  4. Android SDK上手指南:应用程序数据
  5. 投资,个人未来的生存之道(任何个人必知)
  6. Customing 维护中TR弹出逻辑
  7. jQuery心得5--jQuery深入了解串讲1
  8. 计算机常用控温算法,常用温度控制方法原理 -解决方案-华强电子网
  9. v8声卡调音软件_声卡出现杂音怎么办?教你几招解决杂音问题
  10. vue 防止按钮重复点击
  11. angular4.0 父子组建之间的相互通信
  12. springboot定制404错误信息
  13. 现在大多数论文存在的弊病——可重复性
  14. AAAI 2021 Structured Co-reference Graph Attention for Video-grounded Dialogue
  15. 荣耀30会更新鸿蒙系统吗,华为荣耀30肿么升级鸿蒙系统?
  16. 芯片设计里的Multi-Bit FF探究
  17. 基于产生式表示的动物识别系统
  18. vue页面背景颜色修改
  19. Smith圆图阻抗匹配介绍使用
  20. RT-Thread Nano入门学习笔记(1)

热门文章

  1. CUDA C 编程权威指南 Grossman 第6章 流和并发
  2. c语言趣味程序设计过桥,计算机c语言趣味的程序设计——题目百例.doc
  3. 学Linux运维的前景
  4. c语言已知年第几天求哪月哪日,已知今天的日期(年月日),求明天的日期(年月日)...
  5. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理...
  6. 从ReadView深入理解MySql MVCC原理
  7. Kali-Linux-2021.1 root登录
  8. 图片的数据增强与批量压缩
  9. HE学业水平考试游记 By cellur925
  10. Python项目一:pygname