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–考脑洞,你能过么?的更多相关文章

  1. ace & web ide & web code editor

    ace & web ide & web code editor web ide https://ace.c9.io/ https://github.com/ajaxorg/ace ht ...

  2. 【C#】转一篇MSDN杂志文:ASP.NET Pipeline: Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code

    序:这是一篇发表在2003年6月刊的MSDN Magazine的文章,现在已经不能在线阅读,只提供chm下载.讲的是异步请求处理那些事,正是我上一篇博文涉及的东西(BTW,事实上这篇杂志阐述了那么搞然 ...

  3. web - code/flash

    trace 来源: 1. http://traces.cs.umass.edu/index.php/Storage/Storage 源代码: 1.sourceforge 2.github.github ...

  4. [C#]動態叫用Web Service

    http://www.dotblogs.com.tw/jimmyyu/archive/2009/04/22/8139.aspx 摘要 Web Service對大家來說想必都不陌生,也大都了解Web S ...

  5. web.py学习心得

    1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...

  6. Linux 安装tomcat,搭建web app运行环境

    Tomcat 8 下载地址:https://tomcat.apache.org/download-80.cgi 解压tomcat:tar -xf apache-tomcat-8.5.31.tar.gz ...

  7. [转]Clean Code Principles: Be a Better Programmer

    原文:https://www.webcodegeeks.com/web-development/clean-code-principles-better-programmer/ ----------- ...

  8. web之ics-06

    打开网址,四处点击,点到报表中心,跳转新页面 查看源码也没有什么特别的,发现URL栏有?id=1 以为是sql注入,但是并不是,查看大佬的wp 发现这题采用brupsuite爆破 先将抓到的包放到In ...

  9. 渗透测试思路 - CTF(番外篇)

    渗透测试思路 ​ Another:影子 (主要记录一下平时渗透的一些小流程和一些小经验) CTF(番外篇) ​ 笔者是一个WEB狗,更多的是做一些WEB类型题目,只能怪笔者太菜,哭~~ 前言 ​ 本篇 ...

随机推荐

  1. C++ 头文件系列(deque)

    简介 deque是double ended queue(即双端队列)的简称. 就像C++中的大部分容器的一样,deque具有以下属性: 顺序的(sequence) 动态增长的(dynamic grow ...

  2. 史上最“脑残”的“抢火车票”程序(node.js版)

    [背景] 快过年了,我妈一个电话打过来叫我给他买火车票,我到12306一查,硬座和硬卧基本没有了,高铁又太贵. 最后只抢了3张无座票,但是我妈说能不能买有座位的啊,我说没有了啊,我妈:你过两天再帮我看 ...

  3. 曲演杂坛--SQLCMD下执行命令失败但没有任何错误提示的坑

    今天使用SQLCMD导入到SQL SERVER数据库中,看着数据文件都成功执行,但是意外发现有一个文件数据没有成功导入,但执行不报错,很容易导致问题被忽略. 使用存在问题的文件做下测试,从界面上看几行 ...

  4. 《Hexo+github搭建个人博客》

    <Hexo+github搭建个人博客> 文/冯皓林 完稿:2016.4.22-2016.4.23 注意:本节教程只针对Windows用户.本教程由无人赞助,赞助写出. <Hexo+g ...

  5. 第一百三十二节,JavaScript,封装库--下拉菜单

    JavaScript,封装库--下拉菜单 封装库,增加了3个方法 shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码) ...

  6. 清浮动,防止上下margin重叠(浏览器顶部空白崩溃)

    清浮动 父级添加类别! .clearfix{zoom:1;//兼容ie6,7} .clearfix:after{ content:"."; display: "block ...

  7. SQL server Cannot find one or more

    最近刚安装完sqlserver,新鲜感还没过,却出现了一大堆错误,令人头疼,其中有一个错误:在启动Microsoft SQL Server Management Studio时,出现如下错误提示,程序 ...

  8. CentOS 6.5 安装MySQL5.7 RPM

    一.新特性 MySQL 5.7可谓是一个令人激动的里程碑,在默认了InnoDB引擎的基础上,新增了ssl.json.虚拟列等新特性.相对于postgreSQL和MariaDB而言,MySQL5.7做了 ...

  9. 反编译与调试APK

    0×01前言 这年头,apk全都是加密啊,加壳啊,反调试啊,小伙伴们表示已经不能愉快的玩耍了.静态分析越来越不靠谱了,apktool.ApkIDE.jd GUI.dex2jar等已经无法满足大家的需求 ...

  10. Uva 11889 Benefit (lcm与gcd)

    题意:给你两个数,a,c,求出 lcm(a,b)==c 时的 b 的最小值 思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b 由此我们可以得到 b = gcd(a,b)*lcm( ...