对某次比赛里PWN的分析

原创 2016年04月11日 20:49:31

MD5: FC76A2EFBD7D07A89A2DD343B9328E26
SHA1: EDAA95DB7406E5076A2AA8B30BA6B3E7547CD7B4
CRC32: 1374F4F7


很久很久之前某次CTF的PWN。。。题目在附件。


首先分析.exe文件


前面可以看到程序创建了socket服务

黄色选中的call为‘程序功能区’

 

进入call后,程序先问候一下用户,并设EBX为0:

然后等待用户输入:

清场:

在输入的字符串中查找\x0D,\x0A这两个字符。【这两个查找的目的我不确定,,留作日后任务:

检测输入字符串前九位是否与”USERNAME ”相同,如果不同,跳转至loc_45212c9(即为检测输入字符串是否是”LOGIN ”函数处):

清场:

检查字符串长度,如果字符串长度超过0X7F,只取前0X7F位:

按格式输出一个字符串。需要注意的是此处【mov     dword_4532A6C, 1(此处即为我们需要覆盖的关键内存点)】:

 

 

接下来是检测输入是否以”LOGIN ”开头的函数,紧挨着这一函数的是校验输入是否以”GETFLAG”开头的函数。(因服务端并未向客户端请求数据,所以此处将校验失败,并在最后返回到本个CALL最开始的部分等待用户输入):

上图中可以看到,输入”LOGIN password”后,【mov     dword_4532A6C, 2】,将关键位置设置为2。

并且有:

cmp    byte_4532A70, bl   //4532A70是我们

jnz    short loc_4521306

即如果没有输入”USERNAME ”,则将报错。

如果均为正确输入,则有

call   sub_4521000

在结束这些操作后,检验4532a6c处的值,如果其值为0x4452534e,则send    flag.txt里的内容。

 

跟进4521000,先清场,然后检验字符长度,如果超过0X100,则报错:

用几个API生成IP地址的字符串表示,并压入栈

计算长度,将字符串send出去:

然后在下面,出现了一个格式化字符串漏洞:

静态分析结束,拖进OD

 

直接进入关键点,配置输入,服务端输出如下:

栈内如下:

还可以看到栈内下面不远处就是我们的USERNAME

构造一下输入:

“USERNAME a\x6c\x2a\x53\x04xxxx\x6e\x2a\x53\x04”

                            //此处目测是出了一点问题,应该是从’2’开始字节对齐的。所以字符串前只加一个’a’

“LOGIN%x%x%x%x%x%x%x%x%x%x%x%x%x%x%21169x%n%61700x%n”

其中第一段%x用于为%n找到写在USERNAME里的地址,之所以使用两个%n是因为只写一个的话数太大,要打很多空格,会很慢。

 

溢出完成。

版权声明:本文为博主原创文章,未经博主允许不得转载。

蓝桥杯模拟题-排列序数

标题: 排列序数X星系的某次考古活动发现了史前智能痕迹。 这是一些用来计数的符号,经过分析它的计数规律如下: (为了表示方便,我们把这些奇怪的符号用a~q代替)abcdefghijklmnopq ...
  • sb_Ihateyou
  • sb_Ihateyou
  • 2017年03月30日 13:35
  • 2684

蓝桥杯2017模拟赛-排列序列

标题: 排列序数X星系的某次考古活动发现了史前智能痕迹。 这是一些用来计数的符号,经过分析它的计数规律如下: (为了表示方便,我们把这些奇怪的符号用a~q代替)abcdefghijklmnopq ...
  • a568283992
  • a568283992
  • 2017年03月16日 14:00
  • 2251

2017模拟赛-本科组

1、标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年)。 他年少时便很有才华。一次有人问他的年龄,他回答说: “到了x的平方那年,我刚好是x岁”。 请你计算一下,德摩...
  • qq_32688731
  • qq_32688731
  • 2017年03月20日 17:19
  • 1222

170629 Pwn-XCTF决赛的Pwn视频分析

1625-5 王子昂 总结《2017年6月29日》 【连续第270天总结】 A. XCTF总决赛 Pwn B. 看二进制指导的时候误打误撞看了一个Pwn的视频writeup,不过技术原理上与逆...
  • whklhhhh
  • whklhhhh
  • 2017年06月30日 17:16
  • 234

C语言实验题——计算评分

描述 某次ACM设计比赛,有N个评委对参赛队员进行打分,编写一个程序对一个参赛队员,输入N个评委对该参赛队员的分数,去掉一个最高分和一个最低分,输出参赛队员的最后平均得分。 ...
  • ZJWSA
  • ZJWSA
  • 2017年09月20日 19:26
  • 230

百度杯”CTF比赛(十二月场)

"百度杯"CTF比赛(十二月场) 第一场 1、传说中的签到题 解决:把二进制用在线进制转换器转换,发现转为10进制时,和tips2一样,在qq上一查,是CTF官方群,在公告里有一个字符串ZmxhZ...
  • Root__Liu
  • Root__Liu
  • 2017年04月13日 19:58
  • 736

NBA比赛数据分析与预测

我的任务利用13到16年的NBA比赛统计数据,去预测17年的每场NBA比赛。数据是从http://www.basketball-reference.com/这个网站获得的。前期参考了https://w...
  • icameling
  • icameling
  • 2017年11月01日 10:48
  • 817

溢出练习题pwn1

集训慢慢接近了尾声,樊荣学长给我们jian
  • jia304349145
  • jia304349145
  • 2014年08月26日 14:58
  • 1908

一道ctf pwn 的思路以及解法

一道ctf   pwn  的思路以及解法                                                                               ...
  • tiaotiaolong99234
  • tiaotiaolong99234
  • 2015年06月23日 22:10
  • 6530

pwn学习总结

遇到的优秀文章 关于Heap Overflow(堆溢出) Linux常见漏洞利用技术实践 GCC 中的编译器堆栈保护技术 Linux环境进程间通信(一) 现代Linux操作系统的栈溢出(一)...
  • qq_33514328
  • qq_33514328
  • 2016年09月01日 15:55
  • 1524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对某次比赛里PWN的分析
举报原因:
原因补充:

(最多只允许输入30个字)