[pwnable.xyz] PvP
Wargame/pwnable.xyz
iape v2AttachmentBugshort_append()에서 발생하는 buffer overflow를 이용하여 dest를 덮어쓸 수 있다.Exploitationdest가 0이 아니면 그 주소에 x를 복사한다. BOF를 이용하여 dest에 GOT의 주소를 넣고, GOT에 win()의 주소가 들어가도록 하면 플래그를 획득할 수 있다.ex.py
[pwnable.xyz] bookmark
Wargame/pwnable.xyz
Save your links hereAttachmentBugcreate_url()에서 입력한 bm에 : 또는 /가 계속해서 이어지면 ptr은 제한 없이 계속해서 증가한다.bm에 처음에는 9바이트만 입력할 수 있지만 뒤에 0x7f바이트를 이어붙일 수 있다. 이어붙인 문자열이 : 또는 /로만 이루어져 있을 경우, 다음에 create_url()이 한 번 더 호출되었을 때 그 뒤에 다시 0x7f바이트를 이어붙일 수 있게 된다. 이 과정을 반복하면 buffer overflow가 발생하여 logged_in을 덮어쓸 수 있다.Exploitationlogged_in을 0이 아닌 값으로 설정하면 플래그를 획득할 수 있다.ex.py
[pwnable.xyz] attack
Wargame/pwnable.xyz
Can you win the Arena?AttachmentBugdo_skill_change()에서 isAttack에 음수가 들어갈 수 있어 OOB가 발생한다.ExploitationSkillTabel의 앞쪽에는 Team 구조체 2개로 구성된 Teams가 있다.Teams 내부에는 Equip의 Name 필드가 있는데, 이 필드에는 change_equip()에서 임의의 0x20바이트 값을 입력할 수 있다.이 위치에 win()의 주소를 써 놓고 do_skill_change()에서 player->Skills[destSkill].Skill_Func에 OOB를 이용하여 win()의 주소를 넣으면 그 스킬을 사용할 때 win()이 호출되어 플래그를 획득할 수 있다.ex.py
[pwnable.xyz] rwsr
Wargame/pwnable.xyz
What's your target if you have arbitrary read and write?AttachmentAnalysisArbitrary address readArbitrary address writeExploitationPIE가 비활성화되어 있기 때문에, GOT를 leak하여 libc base address 계산environ을 leak하여 스택 주소 계산 (이때, main()의 스택 프레임과 environ 사이의 거리가 local과 remote 환경에서 다른 점을 고려해야 한다.)main()의 return address를 win()의 주소로 overwriteex.py
[pwnable.xyz] fclose
Wargame/pwnable.xyz
Challenge is using libc 2.23AttachmentAnalysisinput에 fake FILE structure를 만들고 fclose()를 호출한다.Exploitation파일 구조체 전체에 임의의 값을 쓸 수 있기 때문에 vtable overwrite 기법을 이용하여 win()이 실행되도록 할 수 있다. 문제에서는 libc 2.23 버전을 사용하고 있어서 vtable check가 존재하지 않는다.fclose()는 내부적으로 _IO_file_jumps+0x10에 있는 _IO_new_file_finish()를 호출하는데, _IO_new_fclose+48부터 _IO_new_fclose+60까지의 코드가 이 과정에 해당한다. 이 코드까지 도달하기 위해서 딱히 필요한 조건은 없는데, _lock ..
h0meb0dy_
'Wargame/pwnable.xyz' 카테고리의 글 목록 (2 Page)