베트남 화이트햇 하러 왔다가 메시지를 받고 짬짬이 푼 문제들 !
사실 대회보다 재밌었다 ㅜㅜ. 시간이 별로 없어 올클 하지 못한게 아쉽다 흑흑
obfuscator말고는 모든 문제를 열어보았다. 각 문제별 설명과 풀이는 아래에 있다.
한국가서 나머지 문제 풀어봐야겠다.
- create_name 함수에 n을 입력받은 만큼 정의해준다. 만약 n보다 작은 값을 입력하면 n보다 작은 데이터가 들어가는데 show_name에서 메모리 릭을 낼 수 있다.
- create_middle_name 함수에 middlename[len(input)] = 0을 해준다. off-by-one으로 name ptr의 lsb를 0으로 바꿀 수 있다.
- show_name 릭과 off-bye-one을 잘 조절해서 내 인풋이 fake objc object가 되게끔 할 수 있다.
- 처음에 filesystem 매핑을 힙에 로드하는데 서버랑 환경이 잘 안맞아서 서버에선 못 했다 ㅜ
- 뭔가 좀더 릴라이어블한 방법이 있는 것 같다.
호텔 옮기다가 시간 내에 풀지 못한 문제다 ㅜ. 간단한 취약점이 있다.
- sub_401374 함수가 thread로 돌고 commandLength를 계속 체크하면서 256보다 작으면 memcpy를 commandLength만큼 하고 아니면 qmemcpy한다.
- commandLength가 global 변수이기 때문에 race-condition이 발생한다.
- 256보다 작은값, 큰값을 계속 넣어주면 된다.
- 문제는 ROP 하는거 였는데 원래는 2-stage exploit을 하려고 했다. 무엇 때문인지 몰라도 리눅스 태스크 스케쥴러에서 read를 호출하면 main-thread exit이 되는지.... 알 수 없게 계속 죽었다.
- bss 영역에 커맨드 넣고 실행하는 방법으로 ROP했다 ㅜ
FLAG{h4v3_4_v4ri0us_p3r5p3ct1v3_v13w_c4n_f17d_bu9}
- format에 원하는 값을 넣어줄 수 있다.
- user 모델을 줘서 auth까지 올라가면 된다.
- https://www.cdxy.me/?p=738
- {user.groups.model._meta.app_config.module.admin.settings.SECRET_FLAG}
FLAG{IU_Is_the_b3st_singer_ev3r!}
- off-by-one이 있어 length를 조작할 수 있다.
- puts(key) 하면 됨.
FLAG{HOLYMOLY_HOW_DID_YOU_DO_Thatt!!!}
- 열심히 하란대로 하면 플래그를 준다..
FLAG{C0ngratulstions!_u_arE_worDMast3R!}