오늘도 짱짱아이다로 열어보니 대학교 팀을 고르고 game함수가 있는 조건문으로 뛰어서 스코어가 121209이상이면 조건문 안으로 들어오는 것 같다. 해당 조건문에 들어오면 read함수에서 s크기보다 더 많이 받아주는 것을 볼 수 있다. bof취약점이다. 해당 부분을 맞춰주고, sh같은 문자가 들어있는지 검사한 뒤에 마지막으로 buf가 변조되었는지 봐주고 함수가 종료된다.

우선 game함수를 보면 menu함수에서 menu출력해주고 경기할 값을 입력해주면 해당 값에 따라 gogo함수에서 진행해서 전역면수 score값을 바꿔준다. 7번은 숨겨진 항목!

score은 unsigned int이고, gogo에는 score을  -- 해주는 기능이 있음으로 score값이 -가 되면 엄청 큰 숫자로 바뀌게 된다.

원하는 조건문까지 들어온 것을 확인할 수 있다. 보면 ebp가 0x124만큼 떨어져 있음으로 저만큼 채우고 ret값에 system함수 주소 넣어주고   sh주소 찾아서 인자로 넣어주면 될 것 같다......라고 생각했는데 오류가 떴다

확인해보니 memcmp함수에서 buf와 random_bak을 비교해주더라. s을 덮으면서 buf도 같이 덮어서 그런거 같은데 buf값을 어케 확인해 줄까 고민하다가 4u가 눈에 띄었다. team이름을 정하는 부분에서 printf함수를 보면 %s가 \n이 나올때까지 출력한다 한다. 그 앞에 read함수는 4u만큼 입력값을 받는데 생각해보면 뒤에 atoi로 변환해 v8에 넣어주고 nptr은 출력해주는 것을 볼 수 있다. 그럼 read에서 `1aaa`를 넣어주면 \n도 안들어가니 계속 출력될 것 같다. 

이런식으로 작성해주면 되겠다!....했는데 되지 않는다...

다시 덮은 스택을 보고 있는데 포인터로 선언된 v10이 마음에 걸렸다. 해당 부분을 맞춰줘야 하나 싶어 주소를 찾아 넣어주니 해결 되었다!

'war game > game' 카테고리의 다른 글

[practice]-19950320  (0) 2019.07.28
[practice]-daRk_TempLer  (0) 2019.07.23
[practice]-rain_dROP  (0) 2019.07.23
[practice]-catchme  (0) 2019.07.16
[practice]-rop_practice64  (0) 2019.07.15

+ Recent posts