본문 바로가기

pwnable.kr31

pwnable.kr collision Pwnable.kr# [Toddler’s Bottle] collision collision 문제를 보면 아래와 같은 화면을 볼 수 있다. col.c 파일은 아래와 같다. system(“/bin/cat flag”) 가 수행되도록 하면 된다.이 때 hashcode와 check_password( argv[1] )의 값이 같아야한다. check_password()를 보면 입력받은 20바이트를 char형 포인터로 받아 4바이트 씩 나누어 다섯 개를 더한 뒤 리턴한다. 즉 더했을 때 hashcode가 나오는 다섯 개의 수를 알면 된다.따라서 python을 이용하여 해당 수를 5로 나눈 뒤 적절히 맞추어 주었다. 그 결과 flag를 얻을 수 있었다. 2019. 2. 1.
pwnable.kr flag Pwnable.kr# [Toddler’s Bottle] flag flag 문제는 아래와 같다. 문제를 보면 파일이 패킹되어 있을 것 같다는 힌트를 얻을 수 있다.우선 실행해보면 아래와 같이 malloc()을 한 뒤 flag를 strcpy한다는 것을 알 수 있다. 그러나 파일이 패킹되어 있기 때문어 먼저 언패킹을 해주어야 한다.이 때strings ./flag를 이용하여 보면 ㅇ래와 같이 UPX executable packer로 패킹되었다는 것을 알 수 있다. kali에서 upx를 입력하면 아래와 같이 나온다. -d 옵션을 이용하여 먼저 언패킹을 한 뒤 gdb로 열었다. 주석으로0x6c2070 가 있다. 해당 주소의 값을 보면 flag의 주소가 들어 있다.따라서 그 값을 보면 flag를 얻을 수 있다. 2019. 2. 1.
pwnable.kr bof [Toddler's Bottle] bof bof문제는 아래와 같다. 아래는 bof.c 코드이다. overflowme를 이용하여 func의 인자로 전달되는 key를 0xcafebabe로 덮으면 될 것으로 보인다. 이 때 overflowme와 key의 거리를 알아야 하므로 AAAA를 입력했을 때의 스택 상태를 보면0x41414141이 0xffffd37c에 위치해 있고0xdeadbeef가 0xffffd3b0에 있는 것을 알 수 있다. 0xffffd3b0 - 0xffffd37c = 0x34 = 52이므로52만큼 A로 덮은 뒤0xcafebabe를 넣어주면 된다. 코드는 아래와 같다. 그 결과 flag를 얻을 수 있었다. 2019. 2. 1.
pwnable.kr fd [Toddler's Bottle] fd fd 문제는 아래와 같다. 문제 이름처럼 file descriptor에 관한 문제라고 한다. 일단 접속을 해보면 위와 같이 fd.c 가 있는 것을 보게 된다. fd.c 코드를 보면,fd에 argv[1]을 int로 변환한 값에서 0x1234를 뺀 값을 저장한다.그 뒤, buf에 32바이트만큼 읽어오고 “LETMEWIN\n”과 비교한다. 따라서 fd를 stdin으로 해준 뒤, 해당 문자열을 입력하면 될 것으로 보인다.stdin은 0에 해당하므로 0x1234, 즉 4660을 입력한 뒤 stdin으로 LETMEWIN을 입력하니 flag를 얻을 수 있었다. 2019. 2. 1.