文档章节

PwniumCTF2014 - JJSN总结

huangjacky
 huangjacky
发布于 2014/10/12 12:21
字数 2562
阅读 27
收藏 1
点赞 0
评论 0

Write-ups

本文最早发布在TSRC,详细地址:http://security.tencent.com/index.php/blog/msg/55

Forensics

USB is FUN

这道题目就给出了一个文件下载地址:http://41.231.53.40/for1.pcapng

文件后缀是pcapNG的,当然玩ctf的时候,看见的并不一定就是真的,我们可以通过file命令和一些hex工具来查看一下,信息如图:

image

image

通过上面信息可以确定该文件的确是pcapng格式,google了一下这个文件类型就是pcap格式的扩展,目前还只是实验阶段,可以使用wireshark打开分析。心急的朋友可能直接使用wireshark打开这个文件开始分析了,22M这得多少网络包呀。取证中经常用到一个方法就是使用strings查看文件中有什么字符串,运行结果如下图:

image

我们发现熟悉的flag字符串,提交,搞定了。

Altered Code

这一题给出了一个.c文件(下载地址:http://41.231.53.40/main.c),没有任何提示。

最初我们拿到这个文件后,编译,执行,得到一串无意义的字符串,当然这肯定不是flag。

接下来我们尝试了调换代码顺序,再编译执行,还是不对。

最后通过观察网页上面展示的代码段(这里有一个坑:工具打开.c文件会自动缩进好),我们发现缩进有问题,如图:

image

为了进一步确认,我们查看该文件的HEX,如图:

image

正常的缩进使用的空格,而有几行代码缩进使用的是\t。因此我们尝试注释掉\t缩进的代码段,再编译执行,效果如图:

image

提交,搞定。

Find the owner

题目:

http://41.231.53.40/Forensics100.zip flag format == Pwnium{md5[ip:port]} Be careful this file may harm your computer

这道题目肯定是这个文件会干什么操作。于是我们先用Total uninstall来监控注册表和C盘文件,然后运行exe文件,发现没有任何操作,那么exe肯定是进行网络操作。打开Wireshark可以看到如下的网络请求:

image

ip:193.95.68.245,port:81,按照题目的提示md5一下,提交就搞定了。

ps:文件是一个木马,更简洁的方法可以扔给各种在线木马检测网站试一下,根本不用自己分析。懒人必备。

MISC

Look Closer

这题也只给出一个rar文件,下载地址:

https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/look-closer/Misc1.rar?raw=true),没有任何提示。

下载后,我们发现无法打开,提示是错误的格式,于是Hex查看一下文件的格式,如图:

image

图7 Hex查看misc1.rar

文件头很明显告诉我们这个是一个jpg文件,于是修改后缀,flag就在图片中,如图:

image

提交,搞定。

So basic

这题同样只给出一个zip文件(下载地址:

https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/so-basic/Misc75.zip?raw=true)。

我们将下载的zip文件进行解压,里面有40个小文件,每个文件中是一个数字,给人感觉就是这个是ASCII值。

首先将所有文件中的文本合并到一个文件中:

cat ./* > misc75.txt

然后转换成对应字符串看看,得到如图的结果:

image

图9 unhexlify的结果

看上去很像flag,但是顺序是乱的。我们找到字符P对应的文件“cfcd208495d565ef66e7dff9f98764da”,文件名很像是MD5加密的,于是我们尝试破解一下,解密后是字符0。那么大胆猜测所有的文件名其实是0~39的MD5密文。那么我们修改一下程序:

image

图10 修改后的Py代码

YEAH!!搞定。

Crypto

Break me

题目中给出一个字符串:

“QlpoOTFBWSZTWTxSmOAAAAsJAF/gOwAgADEAAAiZMNT0JbKzhCQcyQtA2gNbvXgSvxdyRThQkDxSmOA=”

经验告诉我们这个是一个经过Base64编码的字符串,于是我们尝试使用Base64解码,解码后结果含有不可见字符,说明这还不是Flag。

image

在这里有一些不知所措,于是乎我们将前面可见部分字符在google中进行搜索了一下,发现有相关文章说这是bz2文件格式的头部,通过对比bz2文件格式的头部和尾部,我们可以确认上面的字节流的确是经过bzip2压缩后的内容,现在就就简单了,再解压缩一次:

image

提交,搞定了。

Programming

2048

Crack me fast

题目提示如下:

Crackme Fast The binary http://41.231.53.44:9393/ Send the password in less than 2 secondshttp://41.231.53.44:9393/check.php?p={p@55}

访问题目中的地址,可以得到一个文件,打开之后如图:

image

文件头是个LPCK,不知道啥格式,不过在之后看到了MZ头。把MZ头之前的部分统统删掉,成功得到一个exe。

image

要求输入Password。没有办法了,直接扔进ida….找到关键部分如下:

.text:00401363 mov [esp+5Ch+var_5C], offset aPassword ;

"Password :"

.text:0040136A call puts

.text:0040136F lea eax, [esp+5Ch+var_3E]

.text:00401373 mov [esp+5Ch+var_58], eax

.text:00401377 mov [esp+5Ch+var_5C], offset aS ; "%s"

.text:0040137E call scanf

.text:00401383 mov [esp+5Ch+var_14], 0

.text:0040138B jmp short loc_4013B1

.text:0040138D ; ---------------------------------------------------------------------------.text:0040138D

.text:0040138D loc_40138D: ; CODE XREF:

main+8F j

.text:0040138D mov eax, [esp+5Ch+var_14]

.text:00401391 mov eax, [esp+eax*4+5Ch+var_34]

.text:00401395 mov ecx, eax

.text:00401397 xor ecx, 1

.text:0040139A lea edx, [esp+5Ch+var_3E]

.text:0040139E mov eax, [esp+5Ch+var_14]

.text:004013A2 add eax, edx

.text:004013A4 mov al, [eax]

.text:004013A6 movsx eax, al

.text:004013A9 cmp ecx, eax

.text:004013AB jnz short loc_4013C7

.text:004013AD inc [esp+5Ch+var_14]

.text:004013B1

.text:004013B1 loc_4013B1: ; CODE XREF:

main+57 j

.text:004013B1 mov ebx, [esp+5Ch+var_14]

.text:004013B5 lea eax, [esp+5Ch+var_3E]

.text:004013B9 mov [esp+5Ch+var_5C], eax

.text:004013BC call strlen

.text:004013C1 cmp ebx, eax

.text:004013C3 jb short loc_40138D

.text:004013C5 jmp short loc_4013C8

.text:004013C7 ; ---------------------------------------------------------------------------.text:004013C7

.text:004013C7 loc_4013C7: ; CODE XREF:

main+77 j

.text:004013C7 nop

.text:004013C8

.text:004013C8 loc_4013C8: ; CODE XREF:

main+91 j

.text:004013C8 lea eax, [esp+5Ch+var_3E]

.text:004013CC mov [esp+5Ch+var_5C], eax

.text:004013CF call strlen

.text:004013D4 cmp eax, 8

.text:004013D7 jnz short loc_4013E8

.text:004013D9 cmp [esp+5Ch+var_14], 8

.text:004013DE jnz short loc_4013E8

.text:004013E0 mov [esp+5Ch+var_10], 1

.text:004013E8

.text:004013E8 loc_4013E8: ; CODE XREF:

main+A3 j

.text:004013E8 ; main+AA j

.text:004013E8 cmp [esp+5Ch+var_10], 1

.text:004013ED jnz short loc_4013FD

.text:004013EF mov [esp+5Ch+var_5C], offset aGoodBoySendTha ; "Good Boy ! Send That pass to server to "...

.text:004013F6 call printf

.text:004013FB jmp short loc_401409

.text:004013FD ; ---------------------------------------------------------------------------

.text:004013FD

.text:004013FD loc_4013FD: ; CODE XREF:

main+B9 j

.text:004013FD mov [esp+5Ch+var_5C], offset

aSorryIncorrect ; "Sorry ! Incorrect pass"

.text:00401404 call printf

大概理解一下:这里输入的字符串为8个字符,然后以esp+5Ch+var_34为地址之后的8个DWORD,取低8位字符,然后都xor 1,结果与输入的串比较,相等则正确。

来看看esp+5Ch+var_34的数据怎么得到:

.text:00401345 lea edx, [esp+5Ch+var_34]

.text:00401349 mov ebx, 402000h

.text:0040134E mov eax, 8

.text:00401353 mov edi, edx

.text:00401355 mov esi, ebx

.text:00401357 mov ecx, eax

.text:00401359 rep movsd

看样子是从0x402000h复制过来的,于是跟过去:

image

看样子把这些东西xor 1一下就可以得到password了然后提交就可以得到Flag了。

结果却是”Too late”,好吧题目写了少于2s。

那就把VA转换成文件偏移,得到0x1310,写个脚本自动破解吧。

image

ROT

题目如下:

Rot 90, Rot -90, Rot 90, Rot -90... nc 41.231.53.40 9090

每次连上去后会得到一个base64的字符串,解码后是一个png文件格式的字节流,可以还原成如图:

image

仔细观察一发,应该只要把左右两部分折叠拼凑在一起就行,而且题目中不是也说rot90。

image

运行后的结果如下:

image

自动提交,搞定。

Web

Guest book

题目:

Find the key ! http://41.231.53.43:8383/

题目是一个web页面,而New post功能的post内容存在sql延时盲注。Flag内容存在于数据库中,利用注入得到库名表名字段名,然后查询得到flag内容。盲注得到库名为web200,表名列名为flag:flag。

盲注sql语句:

test', '1' and (select if(ascii(mid((select flag from web200.flag where flag!='' limit 0,1),1,1))=100,sleep(5),0)))#

写一个脚本就来完成这个过程,就轻松搞定了。

Xwebsite

题目:

Find the key http://41.231.53.44/web100/index.php

目前题目已经无法访问了,所以这里就简单说一下情况。在登陆的时候,我们使用万能登录“’ or ‘1’=’1”,成功以管理员身份登录后,再搜索“’ or ‘1’=’1”,得到的结果中就有flag。是不是很简单呀?其实ctf中很多题目只要你有思路都很简单的。

Reverse

Baby crack me

题目:

a baybe crackme http://41.231.53.44/tasks/re10.zip

如果上面地址无法下载,那么可以从这里

https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/baybe-crackme/re10.zip?raw=true下载。

运行下载后的文件,无限输出“baby crackme”,用IDA逆向一下,可以得到如下代码:

image

程序大致的意思是在没有参数运行的时候会无限输出Baby Crackme,当有参数的时候就会输出Flag。

莫非答案就是G00d_B0y,提交试一下,正确了。好吧,10分的题目。

Kernel Land

题目:

The third Tick gives you the answer ;) http://41.231.53.40/kernel

备用下载地址:

https://github.com/ctfs/write-ups/blob/master/pwnium-ctf-2014/kernel-land/kernel?raw=true

运行下载后的文件,出现“segment fault”,而IDA调试刚连上去就自己断开,现在只能扔IDA里开始逆吧。

从启动函数开始看,一路设置GDT,IDT,IRQ,然后开个定时器,主线程就结束了,没发现啥和flag有关的。。。。把定时器翻出来看看,代码如下:

.text:00100958 public timer_tick

.text:00100958 timer_tick proc near ; DATA XREF:

timer_init+3 o

.text:00100958 sub esp, 14h

.text:0010095B mov eax, ds:1060C0h

.text:00100960 lea edx, [eax+1]

.text:00100963 mov ds:1060C0h, edx

.text:00100969 push eax

.text:0010096A push offset aDTick__ ; "%d Tick..\n"

.text:0010096F call printf

.text:00100974 movzx ecx, byte ptr ds:1060C0h

.text:0010097B add esp, 10h

.text:0010097E mov eax, 0

.text:00100983

.text:00100983 loc_100983: ; CODE XREF:

timer_tick+42 j

.text:00100983 mov edx, ecx

.text:00100985 xor dl, byte ptr ds:flag[eax]

.text:0010098B add edx, 1

.text:0010098E mov byte ptr ds:flag[eax], dl

.text:00100994 add eax, 1

.text:00100997 cmp eax, 28h

.text:0010099A jnz short loc_100983

.text:0010099C add esp, 0Ch

.text:0010099F retn

.text:0010099F timer_tick endp

这里的flag只和tick进行运算,而tick是个char,也就是说现在flag可能的取值一共有256种,那么穷举一下看看结果就知道哪一个是Flag了。

image

运行结果:

image

搞定了。

本文转载自:http://www.cnblogs.com/huangjacky/p/3859786.html

共有 人打赏支持
huangjacky
粉丝 5
博文 19
码字总数 0
作品 0
深圳
高级程序员
《Yaf零基础学习总结》系列技术文章整理收藏

《Yaf零基础学习总结》系列技术文章整理收藏 1关于Yaf的一些说明[转Yaf作者] 2Yaf零基础学习总结1-Yaf框架简介 3Yaf零基础学习总结2-Yaf框架的安装 4Yaf零基础学习总结3-Hello Yaf 5Yaf零基础...

开元中国2015 ⋅ 2015/05/30 ⋅ 1

成为Java GC专家系列

成为Java GC专家(1):深入浅出Java垃圾回收机制 成为Java GC专家(2):如何监控Java垃圾回收机制 成为Java GC专家(3):如何优化Java垃圾回收机制 成为Java GC专家(4):Apache的MaxClients参数...

HenrySun ⋅ 2016/06/21 ⋅ 0

常见Shell命令用法总结

常见命令用法总结 ----- 目录: --- 关于grep的总结 关于egrep的总结 关于tr的总结 关于sort的总结 关于uniq的总结 关于cut的总结 关于tee的总结 关于split的总结 关于type的使用 关于find的...

小骏骏 ⋅ 2016/02/19 ⋅ 0

PHP正则分段问题求救

用正则分段 字符串: 一、个人总结 个人总结: 1.学习 学习。。。 2.工作 工作。。。 二、生活总结 生活目录: 1.情感1 情感内容。。。 2.情感2 情感2。。。 如题上面字符串,想把他分段存入...

xixilvlv ⋅ 2014/04/17 ⋅ 2

Java程序员从笨鸟到菜鸟之——总结和声明

前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友。最近不知道为什么,一直很懒,做东西也一...

长平狐 ⋅ 2012/11/12 ⋅ 0

nutch相关命令(网上收集资料)

Nutch本地索引更新策略 Nutch查询分析总结及思考 Nutch二次开发总结(一) Nutch二次开发总结(二) Nutch基本命令解释(一) Nutch基本命令解释(二) Nutch基本命令解释(三) Nutch搜索引...

hiqj ⋅ 2014/04/18 ⋅ 0

Core Animation总结(六)知识点整理

Core Animation总结(一)图层变换(平面 立体) Core Animation总结(二)专用图层 Core Animation总结(三)动画 Core Animation总结(四) Core Animation总结(五)性能 Core Animation...

asjoker ⋅ 2016/12/16 ⋅ 0

[读书]读书年终总结

今天总结了一下,今年看书的数量 总结: 今年工作太忙,只是看了11本书,14年半年都21本。 读书原来定的策略: 先广泛涉猎,然后专注,整理的书籍还有很多静静地等我去读。所以过于追求数量了...

zemel ⋅ 2016/02/05 ⋅ 0

是时候给你的GitHub账号做个总结了

是时候给你的GitHub账号做个总结了 亚里士朱德的博客2017-12-232 阅读 github 时间飞逝,2017年转眼就要过去了,又到了写总结的时候了。怎么给自己为开源项目写的代码做个总结? 点赞 github...

亚里士朱德的博客 ⋅ 2017/12/23 ⋅ 0

自学Python之字符串总结

自学一段时间之后,突然回首往昔,提笔忘字。 现在回头重新总结,以后还会不停更新总结。往大家互勉。 1、字符串的创建 #coding=utf-8 这句话一定要写在第一行。第一行。第一行。stringX = "...

Asktao ⋅ 2015/07/21 ⋅ 7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部