BCTF Web Code–考脑洞,你能过么?
BCTF Web Code–考脑洞,你能过么?
1)打开链接,是一张图片
根据URL特点推断可能是有文件包含漏洞
2) 将jpg参数修改成index.php,查看源代码,发现base64编码后的代码
3)解码后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,尝试访问config.php,没有用,返回内容为空
4)此题脑洞在于注释部分
Created by PhpStorm.
phpstorm会产生一个./idea文件,尝试访问 .idea/workspace.xml
得到另一个php文件
5)直接访问文件,没有可用信息
读取该文件,也没有可用信息
6)脑洞在于,根据config.php源码,对config进行了replace替换操作,逆向思维下将_编程config
fl3g_ichuqiu.php –> fl3gconfigichuqiu.php
读取文件,发现可以读到
7)base64解码后,得到源代码
<?php
/**
* Created by PhpStorm.
* Date: 2015/11/16
* Time: 1:31
*/
error_reporting(E_ALL || ~E_NOTICE);
include('config.php');
function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') {
$hash = '';
$max = strlen($chars) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
function encrypt($txt,$key){
for($i=0;$i<strlen($txt);$i++){
$tmp .= chr(ord($txt[$i])+10);
}
$txt = $tmp;
$rnd=random(4);
$key=md5($rnd.$key);
$s=0;
for($i=0;$i<strlen($txt);$i++){
if($s == 32) $s = 0;
$ttmp .= $txt[$i] ^ $key[++$s];
}
return base64_encode($rnd.$ttmp);
}
function decrypt($txt,$key){
$txt=base64_decode($txt);
$rnd = substr($txt,0,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];
}
for($i=0;$i<strlen($tmp);$i++){
$tmp1 .= chr(ord($tmp[$i])-10);
}
return $tmp1;
}
$username = decrypt($_COOKIE['user'],$key);
if ($username == 'system'){
echo $flag;
}else{
setcookie('user',encrypt('guest',$key));
echo "╮(╯▽╰)╭";
}
?>
根据源代码得到加密和解密算法,当输入的cookie[user]经过解密算法得到system时,可以输出flag的值
8)根据encrypt算法,需要计算出$key的值,然后用在decrypt中,根据算法写出解密算法
<?php
function ss($txt,$m){
for($i=0;$i<strlen($m);$i++){
$tmp .= chr(ord($m[$i])+10);
}
$m=$tmp;
$tmp='';
$txt=base64_decode($txt);
$rnd = substr($txt,0,4);
$txt = substr($txt,4);
for($i=0;$i<strlen($txt);$i++){
$key .= $txt[$i] ^ $m[$i];
}
$s='0123456789abcdef';
$txt1='system';
for($i=0;$i<strlen($txt1);$i++){
$tmp .= chr(ord($txt1[$i])+10);
}
$txt1=$tmp;
$tmp='';
for($i=0;$i<16;$i++){
$tmp = $key.$s[$i];
for($ii=0;$ii<strlen($txt1);$ii++){
$txt2 .= $txt1[$ii] ^ $tmp[$ii];
}
echo base64_encode($rnd.$txt2).'</br>';
$txt2='';
}
}
ss('Nmo1ehccWERM','guest');
?>
9)首先访问链接得到user的cookie值
然后将cookie值作为参数带入解密算法中,计算得到
10)将这16个值作为burpsuite爆破的对象,进行爆破,得到flag
BCTF Web Code–考脑洞,你能过么?的更多相关文章
- ace & web ide & web code editor
ace & web ide & web code editor web ide https://ace.c9.io/ https://github.com/ajaxorg/ace ht ...
- 【C#】转一篇MSDN杂志文:ASP.NET Pipeline: Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code
序:这是一篇发表在2003年6月刊的MSDN Magazine的文章,现在已经不能在线阅读,只提供chm下载.讲的是异步请求处理那些事,正是我上一篇博文涉及的东西(BTW,事实上这篇杂志阐述了那么搞然 ...
- web - code/flash
trace 来源: 1. http://traces.cs.umass.edu/index.php/Storage/Storage 源代码: 1.sourceforge 2.github.github ...
- [C#]動態叫用Web Service
http://www.dotblogs.com.tw/jimmyyu/archive/2009/04/22/8139.aspx 摘要 Web Service對大家來說想必都不陌生,也大都了解Web S ...
- web.py学习心得
1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...
- Linux 安装tomcat,搭建web app运行环境
Tomcat 8 下载地址:https://tomcat.apache.org/download-80.cgi 解压tomcat:tar -xf apache-tomcat-8.5.31.tar.gz ...
- [转]Clean Code Principles: Be a Better Programmer
原文:https://www.webcodegeeks.com/web-development/clean-code-principles-better-programmer/ ----------- ...
- web之ics-06
打开网址,四处点击,点到报表中心,跳转新页面 查看源码也没有什么特别的,发现URL栏有?id=1 以为是sql注入,但是并不是,查看大佬的wp 发现这题采用brupsuite爆破 先将抓到的包放到In ...
- 渗透测试思路 - CTF(番外篇)
渗透测试思路 Another:影子 (主要记录一下平时渗透的一些小流程和一些小经验) CTF(番外篇) 笔者是一个WEB狗,更多的是做一些WEB类型题目,只能怪笔者太菜,哭~~ 前言 本篇 ...
随机推荐
- Hibernate缓存配置
一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...
- 读书笔记:《HTML5开发手册》Web表单
这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...
- Cocos2d-x 3.x事件分发机制总结
在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐.而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器Even ...
- nordic DFU固件升级
一:测试固件芯片类型: nordic 52832 二:下载升级源码 1>nRF Toolbox App 源码 https://github.com/NordicSemiconductor/IO ...
- Android studio使用smack连接xmpp服务器收发消息
我使用的是ejabberd16.09的Linux版本,安装教程网上有很多,我在这里只介绍一下Android端连接.登录和收发消息的方法.文章最后附上了我写的一个demo,欢迎大家参考. ejabber ...
- C# 语言规范_版本5.0 (第21章 附录C_参考资料)
A. 参考资料 Unicode 联合会.The Unicode Standard, Version 3.0(Unicode 标准 3.0 版).Addison-Wesley,Reading,Massa ...
- 解码红外遥控信号——使用遥控器的按键来调节LED的亮度
程序开始时,提示遥控键0~4的代码,然后程序通过设置LED的亮度来对被按下的按钮作出响应,以0关闭LED,1~4提供增加的亮度. 代码如下:(需要使用IRremote库,可在库管理中搜索该库进行下载后 ...
- SUSElinux的pam模块中$ISA变量的作用
目的:限制非wheel用户切换至root 方法:vi /etc/pam.d/su文件,增加如下两行 auth sufficient /lib/security/pam_rootok.soauth re ...
- java的三种构造器
重叠构造器:不可取: javabeans模式:不可取: Builder模式:可取.
- 自定义报表开发(HTML/XML)
定义报表执行的包或存储过程: --创建包头 CREATE OR REPLACE PACKAGE XXPLM_AARONTEST001 IS PROCEDURE MAIN(errbuf OUT VARC ...