살려주세요
  for ( i = 0; i <= 9; ++i )
    *(&v17 + i - 500) = sub_401130(80LL);
  sub_4010D0(v15);
  sub_4010D0(v14);
  sub_4010D0(v13);

이부분에 의해서 malloc이 10번 되고 그다음에 free가 3번 되서 index잘주면 free chunk에 접근 가능해져서 임의주소 쓰기 가능한것까지 확인했고 실제로 샘플 하나 가지고 로컬에서 셸도 띄웠습니다. 문제는 *(&v17 + i - 500) 이부분인데 여기서 숫자가 랜덤으로 바껴가지고 나옵니다. 결국 base64로 주는 바이너리에서 어떤 짓을 해서 저 숫자를 추출해서 최종적으로는 index를 구해내야 한다는건데 저 숫자를 어떻게 추출해야 할지를 모르겠습니다. 조금이라도 힌트 부탁드립니다...ㅠ

#pwnable
작성자 정보
답변 2
avatar
snwo
CTF First Place

분석해주는 코드를짜거나 무식하게푸는방법이 있습니다

2021.05.23. 20:19
2dedce
워게임 고인물

저 숫자를 찾으려면은 우리가 보고 있는 저 부분의 기계어나 어셈블리를 자동으로 추출하게 만들면 될 것 같습니다.
AEG(Automatic Exploit Generation)가 자동으로 gdb디스어셈블러를 실행하고 출력물을 분석해서 숫자를 알아내거나(이때 정규식 캡처기능을 사용해도 좋습니다), 기계어의 위치를 찾아서 오퍼랜드에 해당하는 숫자를 추출하면 됩니다.

2021.05.24. 17:36
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기