짱짱해커가 되고 싶은 나

[flag] Writeup 본문

pwnable/pwnable.kr

[flag] Writeup

동로시 2020. 5. 21. 01:56

malloc()을 한뒤 그곳에 flag를 복사해 놓았다고 한다.

 

처음에 loc_44A770을 call하는데 이곳에서 flag를 pop하는 것을 볼 수 있었다.

그런데 analysis failed가 계속 나타났다.

 

항상 포너블 문제를 풀때 바이너리 파일에 관해 checksec로 보안기법이 걸려있는지 확인하고 시작하자.

flag는 UPX로 패킹되어 있다.

 

패킹 : 실행 파일 압축과 암호화 효과를 위해 사용

+ 악성코드를 안티바이러스, 소프트웨어로부터 숨길 수 있고, PE 파일의 내부 코드와 소스 분석을 어렵게 하며 악성코드의 크기를 줄일 수 있다.

 

UPX(the Ultimate Packer for eXecutables) : 여러 OS에서 수많은 파일 포멧을 지원하는 실행 파일 압축 프로그램

- 패킹/언패킹 : upx.exe와 같은 위치에 파일을 놓은 뒤 upx filename/upx -d filename

 

upx -d flag

main을 분석해보니

puts(*0x402080)

malloc(0x64)

rbp-0x8 = rax;

rdx = rip+0x2c0ee5 = 0x40118b+0x2c0ee5 = 0x6c2070

rax = rbp-0x8;

rsi = rdx = 0x6c2070(flag)

rdi = rax = rbp-0x8

0x400320(rdi, rsi);

를 하게 된다.

 

0x400320을 확해보니 0x6c2008로 점프한다.

stcnpy()

0x6c2008의 함수를 보니 strncpy() 함수임을 확인할 수 있다.

즉, rdi에 flag를 넣어놨다는 뜻이다.

 

우리는 0x6c2070에 flag가 들어가있다는 사실을 알고 있음으로 그 주소에 있는 문자열을 보면 된다.

 

'pwnable > pwnable.kr' 카테고리의 다른 글

[random] Writeup  (0) 2020.05.21
[passcode] Writeup  (0) 2020.05.21
[bof] Writeup  (0) 2020.05.20
[Collision] Writeup  (0) 2020.05.20
[fd] writeup  (0) 2020.01.01
Comments