2017GCTF部分writeup
0x00:热身题
渗透测试大法:第一招,扫端口;第二招,... 。
扫后台试试呗,用御剑扫到存在robots.txt,访问发现很多个Disallow:可能的试试,发现flag在/rob0t.php中
flag:GCTF{ae609880185f1d75}
0x01:reverseMe
下载下来的文件用winhex查看一下发现头部D9FF很眼熟啊,想起来和JPEG文件格式的尾部FFD9正好反过来而且题目是reverseMe,赶紧去看看尾部D8FF正好是JPEG文件头倒过来,那么就很明显了就是让我们把文件数据反过来,这里在windows下的python中总是读不全该文件,扔到linux中去执行就ok了,改成jpg后缀查看是个倒着的flag直接反着输入即可。
#python脚本
a=open("ae0c42b1-5e0d-4600-abc8-40f36a763061.reverseMe")
temp=a.read()
temp=temp[::-1]
b=open("1.jpg",'w+')
b.write(temp)
0x02:text.pyc
文件下载下来后是个pyc文件去在线pyc反编译:https://tool.lu/pyc/,发现有部分不能编译,又找到了NSCTF的re500和这题很类似:http://blog.nsfocus.net/wp-content/uploads/2015/09/reverse_500.pdf,去用uncompyle反编译找到报错的位置,这里专门去研究了一下pyc的字节码,开始报错的位置是3个NOP也就是对应字节码09,然后发现有三个LOAD_CONST并没有用到,猜测应该是把这几个字符串都相加起来,也就是修改成为头两个LOAD_CONST然后BINARY_ADD,再一个LOAD_CONST再BINARY_ADD的形式:
即64 0D 00 64 03 00 17 64 04 00 17 64 05 00 17 64 06 00 17
再把改了后的pyc拿去反编译可以看到前面的str变成了5个字符串相加,后面出错的地方为flag3的函数位置有4个00字节码,比较前面两个函数的字节码发现这四个字节码是多余的,于是删除了这四个00,但是发现删除后并不能运行,最后自己慢慢的研究了下字节码发现flag3函数的字节码和前两个函数基本相同,不同的就是多了个base64的解码,于是还原原py文件再运行flag3()拿到flag:
#python代码
str = '=cWbihGfyMzNllzZ' +'0cjZzMW'+'N5cTM4Y'+'jYygTOy' + 'cmNycWNyYmM1Ujf'
import base64
def flag1():
code = str[::-3]
result = ''
for i in code:
ss = ord(i) - 1
result += chr(ss)
print result[::-1]
def flag2():
code = str[::-2]
result = ''
for i in code:
ss = ord(i) - 1
result += chr(ss)
print result[::-2]
def flag3():
code = str[::-1]
code = base64.b64decode(code)
result = ''
for i in code:
ss = ord(i) - 1
result += chr(ss)
print result[::-1]
flag3()
执行结果:
flag{126d8f36e2b486075a1781f51f41e144}结束后了解到删除那四个字节后还要改前面的总字节数
0x03:APK逆向
下载后dex2jar然后jd-gui去看代码,思路还是比较清晰的大体就是把字符串Tenshine,getbytes的md5值去执行tohexstring函数得出一个字符串和你输入的字符串比较,直接把两个函数拿出来写个java执行就行了:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class one {
public static void main(String[] args) {
try{
String str="Tenshine";
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.reset();
localMessageDigest.update(str.getBytes());
String str1 = toHexString(localMessageDigest.digest(), "");
StringBuilder localStringBuilder = new StringBuilder();
for (int i = 0; i < str1.length(); i += 2)
localStringBuilder.append(str1.charAt(i));
String str2 = localStringBuilder.toString();
System.out.println(str2);
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
{
localNoSuchAlgorithmException.printStackTrace();
}
}
private static String toHexString(byte[] paramArrayOfByte, String paramString)
{
StringBuilder localStringBuilder = new StringBuilder();
int i = paramArrayOfByte.length;
for (int j = 0; j < i; j++)
{
String str = Integer.toHexString(0xFF & paramArrayOfByte[j]);
if (str.length() == 1)
localStringBuilder.append('0');
localStringBuilder.append(str).append(paramString);
}
return localStringBuilder.toString();
}
}
0x04:debug.exe
用peid查看发现是.net程序,用ILSPY去查看程序,查到关键类,同样直接把函数拿出来写个C#即可:
private static int a(int A_0, int A_1)
{
return (new int[]
{
2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
73,
79,
83,
89,
97,
101,
103,
107,
109,
113
})[A_1] ^ A_0;
}
private static string b(string A_0)
{
byte[] bytes = Encoding.ASCII.GetBytes(A_0);
return "flag{" + BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(bytes)).Replace("-", "") + "}";
}
private static void c(string A_0, int A_1, ref string A_2)
{
int num = 0;
if (0 < A_0.Length)
{
do
{
char c = A_0[num];
int num2 = 1;
do
{
c = Convert.ToChar(a(Convert.ToInt32(c), num2));
num2++;
}
while (num2 < 15);
A_2 += c;
num++;
}
while (num < A_0.Length);
}
A_2 = b(A_2);
}
private void button1_Click(object sender, EventArgs e)
{
string str = null;
string value = string.Format("{0}", DateTime.Now.Hour + 1);
string a_ = "CreateByTenshine";
c(a_, Convert.ToInt32(value), ref str);
textBox1.Text = str;
}
}
把CreateByTenshine和当前小时+1去做函数c返回的str即为flag,这里好像发现最后答案不管在几点都一定。
flag{967DDDFBCD32C1F53527C221D9E40A0B}
2017GCTF部分writeup的更多相关文章
- 2016第七季极客大挑战Writeup
第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...
- ISCC2016 WriteUp
日期: 2016-05-01~ 注:隔了好久才发布这篇文章,还有两道Pwn的题没放,过一阵子放上.刚开始做这个题,后来恰巧赶上校内CTF比赛,就把重心放在了那个上面. 这是第一次做类似于CTF的题,在 ...
- 参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp
洒家近期参加了 Tokyo Westerns / MMA CTF 2nd 2016(TWCTF) 比赛,不得不说国际赛的玩法比国内赛更有玩头,有的题给洒家一种一看就知道怎么做,但是做出来还需要洒家拍一 ...
- 爱春秋之戏说春秋 Writeup
爱春秋之戏说春秋 Writeup 第一关 图穷匕见 这一关关键是给了一个图片,将图片下载到本地后,打开以及查看属性均无任何发现,尝试把图片转换为.txt格式.在文本的最后发现这样一串有规律的代码: 形 ...
- 《安全智库》:48H急速夺旗大战通关writeup(通关策略)
作者:ByStudent 题目名字 题目分值 地址 MallBuilder2 350 mall.anquanbao.com.cn MallBuilder1 200 mall.anquanbao.c ...
- iscc2016 pwn部分writeup
一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...
- We Chall-Training: Encodings I -Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- We Chall-Encodings: URL -Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- We Chall-Training: ASCII—Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
随机推荐
- 分类器的评价指标-ROC&AUC
ROC 曲线:接收者操作特征曲线(receiver operating characteristic curve),是反映敏感性和特异性连续变量的综合指标,roc 曲线上每个点反映着对同一信号刺激的感 ...
- 支持向量机SVM原理_python sklearn建模乳腺癌细胞分类器(推荐AAA)
项目合作联系QQ:231469242 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?cours ...
- 编写高质量的Python代码系列(三)之类与继承
用Python进行编程时,通常需要编写心累,并定义这些类应该如何通过其接口及继承体系与外界交互.本节讲解如何使用类和继承来表达对象所以更具备的行为. 第二十二条:尽量用辅助类来维护程序的状态,而不要用 ...
- js根据毫米/厘米算像素px
<html><meta http-equiv="content-type" content="text/html;charset=utf-8" ...
- JGUI源码:实现日期控件显示(17)
本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...
- Activiti工作流学习笔记
先从工作流的启动开始讲,Activiti提供了四种工作流的启动方式 1.空启动事件 2.定时启动事件 3.异常启动事件 4.消息启动事件 空启动事件中标签内没有任何其他元素的定义 <startE ...
- order by 的用法
select * from emp order by sal desc --将员工工资按照由高到低的顺序排列
- lambda+mutable配合move实现单函数多程序域
主代码 //-----------------------------------说明一的代码 void fun0{ int t = 10; auto loopFun = [=]() mutable{ ...
- Pollard-rho算法学习笔记
写在前面 目录 问题的提出 生日悖论 利用生日悖论来因数分解 Pollard-rho算法 例题完成进度 1/3 问题的提出 如何快速地找到一个自然数N的两个因数(除自己和1以外)? 首先想到的肯定是传 ...
- 项目Alpha冲刺(团队)-第一天冲刺
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 作业目标:描述第一天冲刺的项目进展.问题困难.心得体会 ...