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 ...
随机推荐
- QTcpSever和QTcpSocket实现多线程客户端和服务端;
QTcpServer提供了newConnection信号, 可以通过connect实现连接槽函数,利用nextPendingConnection 函数获取连接的QTcpSocket * :也可以继承Q ...
- 05--STL序列容器(List)
一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...
- sqlyog试用期到期--win10
1.win+R打开搜索框,输入regedit,打开windows注册表 2.删除HKEY_CURRENT_USER 下 software 的前几个随机编码.
- smbclient匿名访问win7共享文件夹
windows: 首先需要开启Guest用户,设置密码为空. 然后需要在管理工具下的本地安全策略中检查本地策略\用户权限分配\拒绝从网络访问这台计算机如果有Guest或Guests则删掉. 然后正常共 ...
- js的splice方法
splice是js原生处理数组的方法,可以在不改变引用的情况下对数组处理 arrayObject.splice(index,howmany,item1,.....,itemX)参数 描述index 必 ...
- python selenium 模块
控制已打开的浏览器 https://www.cnblogs.com/lovealways/p/9813059.html selenium.自动填充文本框.自动点按钮 https://blog.csdn ...
- flask学习(一)
特点: 短小精悍,可扩展性强 依赖wsgi:werkzurg werkzurg示例: from werkzeug.wrappers import Request, Response from werk ...
- 机器学习基石8-Noise and Error
注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课,我们主要介绍了VC Dimension的概念.如果Hypothese ...
- 从基本理解到深入探究 Linux kernel 通知链(notifier chain)【转】
转自:https://blog.csdn.net/u014134180/article/details/86563754 版权声明:本文为博主原创文章,未经博主允许不得转载.——Wu_Being ht ...
- python操作redis命令
Python操作redis from redis import StrictRedis, ConnectionPoolredis_url="redis://:xxxx@112.27.10.1 ...