'Wargame/FTZ'에 해당되는 글 20건

FTZ level20

2018. 1. 7. 23:08

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

FTZ level19

Wargame/FTZ 2018. 1. 7. 23:07

코드를 보면 다음과 같다. 특별할게 없는 코든데 setreuid가 없어서 권한상승이 안된다.

 

두가지 방법으로 풀 수 있는데 setreuid가 포함된 쉘코드를 올리는 방법과 RTL Chaining으로 푸는 방법이 있다.

 

개념정리 및 연습도 할겸 RTL Chaining 기법으로 풀었다.

 

 

익스할 구조는 SFP + "setreuid 주소" + " gadget(pop pop ret)" + "setreuid 인자1" + "setreuid 인자2" + "system 함수주소" + "dummy 4byte" + "/bin/sh"

요렇게 해주면 된다.

 

그럼 이제 필요한 재료만 구해주면 된다.

 

먼저 호출할 함수들의 주소를 얻기 위해 간단히 소스짠 후 gdb로 주소를 구했다.

setreuid = 0x420d7920

system = 0x4203f2c0

 

 

 

다음으로 objdump로 gadget을 구했다. setreuid의 인자값이 2개이기 때문에 pop pop ret 구조인 gadget을 찾았다.

덤프된 내용을 보면 80489d 주소에 pop pop ret가 연속으로 이루어지고 있어 해당 주소를 사용했다.

 

 

마지막으로 /bin/sh 문자열이 담긴 주소를 구하면 되는데 system 함수내에 있는 /bin/sh를 구하는 방법과 환경변수에 /bin/sh를 등록하고 환경변수 구하는 두가지 방법 중 환경변수를 통해 구하는 방식을 썼다.

 

 

이제 필요한건 다 구했으니 그대로 익스해주면 된다.

 

 

 

잘나온당.

 

 

 

 

 

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level20  (0) 2018.01.07
FTZ level18  (0) 2018.01.07
FTZ level17  (0) 2018.01.07
FTZ level16  (0) 2018.01.06
FTZ level15  (0) 2018.01.06
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level18

Wargame/FTZ 2018. 1. 7. 17:36

소스를 보면 다음과 같다. check 변수의 메모리 영역을 0xdeadbeef값으로 덮어야되는데 입력값이 들어가는 string 변수 영역이 check 변수보다 아래의 존재해 bof로는 덮을 수가 없다. 아래의 소스를 좀더 보면 switch문에서 0x08값이 들어오면 스트링 배열의 인덱스값이 1씩 감소한다. 즉 입력값으로 \x08을 한번 넣어주면 string[-1]요런식으로 들어가서 string 변수 위에 존재하는 check 변수 영역을 덮을 수 있게 된다.  

 

 

필요한 개념은 다 끝냈으니 바로 익스하면 되는데 string 배열 과 check 사이에 더미가 얼마 존재하는지 모른다. gdb로 까서 구하면 되겠지만 귀찮아서 그냥 4바이트씩 늘려가면서 대입했다.

 

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level20  (0) 2018.01.07
FTZ level19  (0) 2018.01.07
FTZ level17  (0) 2018.01.07
FTZ level16  (0) 2018.01.06
FTZ level15  (0) 2018.01.06
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level17

Wargame/FTZ 2018. 1. 7. 17:01

소스를 보면 이전단계와는 다르게 함수포인터를 덮어서 대체할만한 쉘을 실행할수 있는 함수가 정의되어 있지 않다.

그럼 특정 메모리 영역에 쉘코드를 올려놓고 해당 메모리영역으로 함수포인터를 덮어주면 된다.

 

먼저 환경변수에 쉘코드를 올려놓았다.

 

 

gdb로 확인해보면 함수포인터는 buf 20byte + mmy 20byte + 함수포인터 요런식으로 이루어져있었고 바로 환경변수 주소 구한 뒤 익스했다.

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level19  (0) 2018.01.07
FTZ level18  (0) 2018.01.07
FTZ level16  (0) 2018.01.06
FTZ level15  (0) 2018.01.06
FTZ level14  (0) 2018.01.06
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level16

Wargame/FTZ 2018. 1. 6. 21:13

소스를 보면 함수 포인터에 printf함수의 주소가 들어가있는걸 볼 수 있다. 간단하게 shell함수의 주소로 함수 포인터 변수인 call변수의 메모리 영역을 덮어주면 된다.

 

먼저 gdb로 printit의 함수주소와 shell의 함수주소를 구했다.

 

 

 

그 다음 스택구조를 확인해보니 총 40바이트(buf 20byte + dummy 20byte) 후에 printit함수의 주소가 담겨있는걸 확인할 수 있었다.

 

필요한건 다 구했으니 이제 printit함수의 주소가 담겨있는 영역에 shell 함수의 메모리주소값을 덮어씌워주면 된다.

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level18  (0) 2018.01.07
FTZ level17  (0) 2018.01.07
FTZ level15  (0) 2018.01.06
FTZ level14  (0) 2018.01.06
FTZ level13  (0) 2018.01.06
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level15

Wargame/FTZ 2018. 1. 6. 20:29

소스를 보면 다음과 같다. 이전단계와 로직자체는 같은데 차이점은 포인터형 변수라 비교하는 변수의 메모리영역 값이 아닌, 비교하는 변수의 메모리 영역의 있는 값이 주소인 곳의 값을 비교한다.

 

 

먼저 스택 구조를 파악해야하는데 이전단계처럼 단순히 check변수 영역에 비교값을 넣기만 하면 되는게 아니라 brute forcing 식으로 더미노드값을 늘려가면서 할 수가 없어 해당 소스를 긁어다 위의 소스코드 구조일 때 지역변수간의 더미노드를 포함한 정확한 거리를 출력해주는 소스를 짰다.

 

 

랜덤스택이라 스택값 자체는 변하지만 구조자체는 변하지 않기 때문에 각 변수간의 거리차를 통해 더미노드를 포함한 스택구조를 구할 수 있었다.

 

 

buf 시작주소와 check 시작주소사이의 거리차이는 40바이트다.

 

그럼 이제 메모리 특정영역에 비교하는 대상값인 0xdeadbeef를 넣어놓고 check변수의 스택영역값을 미리 올려놓은 0xdeadbeef가 들어있는 메모리주소값으로 덮어주면 된다.

 

현재 스택이 랜덤스택이기때문에 버퍼부분에다 올려놓고 가르킬 수가 없었고 환경변수는 주소값이 변하지 않아 환경변수를 사용했다.

 

 

 

 

이제 필요한건 다 구했으니 바로 익스해주면 된다.

 

 

잘나온당.

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level17  (0) 2018.01.07
FTZ level16  (0) 2018.01.06
FTZ level14  (0) 2018.01.06
FTZ level13  (0) 2018.01.06
FTZ level12  (0) 2018.01.05
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level14

Wargame/FTZ 2018. 1. 6. 12:07

소스를 보면 그냥 스택 내의 특정 변수 영역을 원하는 값으로 덮어쓰면 된다. 스택 구조를 알고있냐고 간단히 물어보는 것 같다.

 

 

대충보면 buf 20byte 이후에 check변수의 4바이트 영역이 존재할텐데 이 사이에는 몇바이트의 더미노드가 존재할지 모른다. 즉 더미노드값을 0바이트부터 1바이트씩 늘려가면서서 20byte+dummy+덮을check값 요렇게 넣어주면 된다. 40byte+check값 요렇게 터졌고 더미노드가 20byte였던 것을 알 수 있었다.

 

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level16  (0) 2018.01.06
FTZ level15  (0) 2018.01.06
FTZ level13  (0) 2018.01.06
FTZ level12  (0) 2018.01.05
FTZ level11  (0) 2018.01.05
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level13

Wargame/FTZ 2018. 1. 6. 11:22

소스를 보면 이전과 익스자체는 크게 다른게 없어 RTL로 풀어주면되는데 중간에 스택가드가 들어가있다. 스택가드 영역을 기존과 같이 0x1234567로 덮어주면서 익스해주면 된다.

 

 

먼저 스택가드영역 확인해보면 다음과 같이 1024입력값을줬을때 12바이트 더미 후에 0x01234567이 들어있으므로 buf 1024 + dummy 12 + stack guard 4 + dummy ?? + sfp + ret 인 것을 알 수 있다.

 

 

이제 스택가드 영역 후의 더미값 확인 후 RET 영역 확인해서 이전과 같이 RTL방식으로 진행하면 된다. 스택가드 이후 12바이트값이 들어갔을 때 세그먼트 fault가 터지는 것으로 보아 8바이트 더미 + sfp + ret 인 것을 알 수 있다.

 

 

이제 메모리 구조 파악이 다 됬으니 이전과 같이 익스만 해주면 된다.

./attackme `python -c 'print "A"*1036+"\x67\x45\x23\x01"+"A"*12+"\xc0\xf2\x03\x42"+"A"*4+"\xa4\x7e\x12\x42"'`

 

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level15  (0) 2018.01.06
FTZ level14  (0) 2018.01.06
FTZ level12  (0) 2018.01.05
FTZ level11  (0) 2018.01.05
FTZ level10  (0) 2018.01.05
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level12

Wargame/FTZ 2018. 1. 5. 22:35

입력값 부분만 다를뿐 level11과 똑같은 방식으로 풀이가 가능해 RTL로 풀었당.

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level14  (0) 2018.01.06
FTZ level13  (0) 2018.01.06
FTZ level11  (0) 2018.01.05
FTZ level10  (0) 2018.01.05
FTZ level9  (0) 2018.01.05
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

FTZ level11

Wargame/FTZ 2018. 1. 5. 22:01

힌트파일을 보면 다음과 같다.

 

 

처음엔 별다른 제약이 없어 그냥 BOF를 시도했지만 스택주소값이 랜덤하게 바뀌는바람에 RTL로 시도했다.

 

먼저 스택구조를 확인해보면 다음과 같이 268바이트에서 세그먼트 fault가 뜨는걸로 보아 더미노드8바이트가 포함되어있다.

 

 

SFP까지 268바이트 덮고 RET값에 시스템 함수 주소 넣어준다음 인자값 넣어주기 위해 더미값4바이트 추가한 후 /bin/sh 문자열주소값을 찾아서 넣어주면 될 것 같다.

 

먼저 system함수의 값을 구하기 위해 간단한 system함수를 호출하는 코드를 짜서 동적으로 컴파일 한 후 main함수에 bf걸고 실행을 시켜 동적라이브러리를 로딩시킨다음 print system 함수로 주소값을 구했다.

 

 

 

다음으로 system 함수의 인자로 들어갈 /bin/sh 문자열 주소값을 구해야 되는데 처음엔 환경변수에 넣고 주소값 구한다음에 시도해봤는데 랜덤스택때문인지 제대로 동작을 안했다.

 

그래서 system 함수의 시작 주소부터 1바이트씩 증가하면서 /bin/sh를 찾는 코드를 짜서 돌렸다.

 

 

 

이제 준비물을 다 구해졌으니 그대로 익스플로잇 해주면 된다.

./attackme `python -c 'print "A"*268+"\xc0\xf2\x03\x42"+"A"*4+"\xa4\x7e\x12\x42"'`

 

 


 

 

 

 

'Wargame > FTZ' 카테고리의 다른 글

FTZ level13  (0) 2018.01.06
FTZ level12  (0) 2018.01.05
FTZ level10  (0) 2018.01.05
FTZ level9  (0) 2018.01.05
FTZ level8  (0) 2018.01.05
블로그 이미지

JeonYoungSin

메모 기록용 공간

,