목록리버싱 기초/CODEGATE (6)
Self-Improvement
FILE 적용된 보호기법 IDA input_name의 크기는 (0x20-0x8)로 0x18크기이며 스택의 바로 아래에는 canary가 존재하고 있다. Main함수에서 name을 입력 받을때 read()함수로 0x28크기만큼 받고 있음으로 input_name 변수의 크기보다 0x10바이트 만큼 더 입력 할 수 있음으로 canary leak을 할 수 있다. 그 다음 아래에서 bof에 취약한 scanf() 함수로 문자열을 입력 받고 있음으로 BOF를 수행할 수 있다. 친절하게도 바이너리 파일안에 helper()함수로 system("/bin/sh")이 존재하고 있다. 결론적으론 1. read() 함수에서 canary을 leak 한다. 2. scanf() 함수에서 BOF로 ret 영역에 helper() 함수를 덮..
32bit는 cdecl, 64bit는 fastcall cdecl은 스택으로 인자를 전달 fastcall은 레지스터로 인자를 전달 (6개의 인자(RDI, RSI, RDX, RCX, R8, R9)는 레지스터로, 그 외의 인자는 스택) FILE 64bit, dynamically linked, not stripped 적용된 보호기법 NX, ASLR IDA Main에서는 크게 봐야할 부분은 my_turn과 your_turn 함수밖에 없는 것 같다. your_turn buf의 크기는 176바이트이지만 read()함수에서 400바이트를 입력 받아 bof가 발생하여 여기서 ROP를 수행하면 될 것 같다. 64bit 임으로 buf(176)+SFP(8)=ret까지 접근할 수 있다. ROP를 위한 가젯 구하기 ELF 64b..
FILE 적용된 보호기법 IDA Main에서 1129포트로 소켓을 열어주고 있다 sub_8048C65 핵을 실행시키는? passcode가 필요하며 passcode는 "THIS_IS_NOT_KEY_JUST_PASSCODE" 자체적으로 만든 파일 안의 존재하고 있다. 당연히 passcode를 leak을 수행해야 하는데 코드들을 살펴보기 전 스택의 상황은 input | v4 | v5 | passcode로 이루어져 있음으로 v4, v5가 채워져있다는 가정하게 input크기만큼 가득채우면 passcode까지 leak이 발생할 것이다. "target"이라는 문자열을 입력하면 조정값?을 입력하는데 이 조정값이 존재하는 input에서 실수형으로 v5, v4에 채워지게 된다. v4, v5를 채워준 후 "launch" 문..
FILE ELF 32bit, dynamically linked, stripped 적용된 보호기법 Functions IDA Main 8888포트로 소켓 통신이 이루어진다. 그리고 그림엔 없지만 fork()로 인해 canary는 고정이 되어진다. sub_8048FC6 취약점이 존재하는 함수를 바로 확인해본다. buf 변수는 ebp-0x16이며 canary(ebp-0xC)를 빼면 10바이트크기를 가지고있다. 하지만 read함수에서 110바이트를 읽어들이고 있음으로 BOF가 발생하게 되며 sprintf함수에 의해 memory leak으로 canary까지 구할 수 있을 것으로 보인다. Canary LEAK canary의 뒤 1바이트가 \x00으로 존재한다는 가정하에 11바이트를 전송하여 leak 해본다. 그리고 ..
이번 문제는 base64에 대한 것을 공부하게 되는 계기가 되었다. FILE ELF 64bit, Dynamically linked, stripped 실행 BabyMISC을 실행하게 되면 STAGE 01이 뜨면서 입력값을 받음으로 hello?을 했더니 종료가 되어진다. IDA Main을 확인해 보니 간단하게 3가지의 스테이지가 있는것처럼 보인다. sub_400EA8(STAGE 01) 분석하는 과정에서 name을 재정의를 몇몇 하였다. return 과정에서 True 참이 되면 다음 STAGE로 넘어갈 수 있다. 1. 입력 값과 기존 base64의 길이가 같아야 한다. 2. base64로 decode할 시 값이 같아야 한다. 3. 입력 값은 달라야 한다. base64에 대해 알아야 풀 수 있으며 아래의 링크에..
FILE 파일을 다운로드 받은 후에 정보를 확인해 본다. 32bit, dynamically linked, stripped로 되어있다. 적용된 보호기법 Functions IDA IDA를 통해서 메인과 서브함수들의 중요한 것만 확인해 본다. (Strings 찾기로 접근음) 8181포트로 socket을 열어준다. v2의 크기는 40바이트이지만 입력값을 받을땐 100바이트로 받고 있음으로 1번과 2번 선택에서 BOF가 발생하게 된다. v3= ebp-0xC v2= ebp-0x34 v2의 크기는 0x34-0xC =0x28이다. Main에서 Fork()함수로 인해 Canary는 고정이 되어있을 것이다. 먼저 Canary 값을 구하기 위해 v2의 크기만큼 40바이트를 채워본다. Canary Leak Pwntools로 ..