HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • JNDI
  • 취약점
  • log4j
  • 아파치

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9

HO9

2016 Codegate -Serial
SYSTEM HACKING/문제 풀이

2016 Codegate -Serial

2018. 2. 3. 01:36
728x90

BugBug문제 풀다가 멘붕이 와서 다른 문제를 풀고 풀자고 마음을 먹고..

Serial을 풀어봤습니다!


생각보다 쉽게 풀었다.


serial




파일은 64비트이고 ssp와nx가 걸려있다.


일단 파일을 실행을 해서 대충 무슨 프로그램인지 감을 잡아보자.



키를 받아야지 다음 단계로 넘어 갈 수 있는 것 같다.

ida로 열어보자.




main함수를 확인을 해보니

처음에 get_num함수로 값을 받은 후 product_key부분으로 넘어가는데 product_key부분을 보면



무슨 엄청난 연산을 한다...

전에 2017Codegate Angry Bird를 풀어봤는데 그것처럼 angr을 사용해서 풀면 될 것 같다.

(나도 처음에는 잘몰랐는데 angr을 사용해보니 값이 나왔다!)




이와 같이 짜준 후 돌리면 key값이 나온다.



615066814080

key값을 구했으니 다음단계로 넘어가보자



이와 같은 메뉴가 나온다.


1,Add

1번을 선택하면 insert가 나오면서 값을 줄 수 있다.


2.Remove

만들어진 목록을 보여주고 그중에서 선택을 해서 삭제를 할 수 있다.


3.Dump

정확하게는 모르겠지만 Add를 하고난 다음 3번을 실행 할 경우 주소값이 보여진다.(ex:0x123456)


4.Quit

프로그램을 빠져나간다.



4번을 제외한 1번2번3번에 취약점이 존재할 것 같다.

위에서 main 함수를 ida로 확인을 해봤으니

이번에는 1번2번3번 메뉴를 하나씩 ida로 확인을 해보자.


Add



*(_QWORD *)(32LL * count + a1 + 24) = num_list

이와 같이 구조체인 것을 확인을 할 수 있다.



위에 그림처럼 총32바이트 구조체이고

처음 24바이트는 get_num함수를 통해서 들어가고 마지막 8바이트는 num_list라는 것이 들어간다.


이번에는 Remove함수를 확인해 보자.


Remove 



remove함수는 별거 없어 보인다..

그래도 나중에 쓰이니 있다고만 숙지해두자!


Dump



print로 a1+24의 주소값을 보여주고

(a1+24)를 실행을 해주고 a1을 인자로 받는다.

딱보아도 이곳이 취약한 것을 알 수 있다.






vulnerability


Dump부분에서 취약한 곳을 찾을 수 있었다.

Add부분도 확인을 해보면 취약점을 찾을 수 있다.

(※Add부분에서 insert를 get_num함수로 받는데 32바이트를 받는다.)

이 두개를 조합하면 쉘을 따낼 수 있다.




Exploit


이점들을 이용해서 Exploit을 해보겠다.

a1+24부분을 printf의 plt로 바꾸고 a1에 %p를 적어서 포맷스트링을 발생 시키는 것이다.

처음에는 got를 릭을 할려고 했는데 잘안되서 변경을 했다.

포맷스트링을 해서 값을 확인을 하면 Libc와 일정한 offset으로 떨어진 값이 나오는 것을 확인 할 수 있다.

이를 통해서 Libc주소를 Leak을 한 다음 system주소를 계산해서 구한 다음 쉘을 따면 될 것 같다.



         





Exploit코드가 너무길어서 캡쳐를 하기 힘들어서 두개로 분할해서 올렸습니다.

.

.

.

.


재밌는 문제였던 것 같다.

그럼 1일1pwn완료~!



'SYSTEM HACKING > 문제 풀이' 카테고리의 다른 글

HarekazeCTF 2018 - Harekaze Farm (Pwn)  (0) 2018.02.12
HITCON 2017 - Start  (0) 2018.02.11
간단한 Crc CTF 문제  (0) 2018.01.29
2016 Codegate -Watermelon  (0) 2018.01.24
2017 Codegate -babypwn  (0) 2018.01.12
    'SYSTEM HACKING/문제 풀이' 카테고리의 다른 글
    • HarekazeCTF 2018 - Harekaze Farm (Pwn)
    • HITCON 2017 - Start
    • 간단한 Crc CTF 문제
    • 2016 Codegate -Watermelon
    HO_9
    HO_9

    티스토리툴바