[pwnable.xyz] catalog
Wargame/pwnable.xyz
Another name saving app, so you don't forget it.AttachmentBugwrite_name()에서 c->length를 0x20으로 설정했다가 c->name을 입력받은 후에 다시 strlen(c->name)으로 설정한다. strlen()이 호출되는 시점에 c->name에 0x20바이트가 채워져 있다면 strlen()의 return value는 0x21이 되어 c->length에 0x21이 들어가게 된다.이후에 edit_name()에서 c->length만큼 입력을 받는데 ,c->length가 0x21인 경우 1바이트만큼 buffer overflow가 발생하여 c->length에 0xff 이하의 임의의 값을 넣을 수 있다.ExploitationBOF를 이용하여 c->fun..
[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
h0meb0dy_
'Wargame' 카테고리의 글 목록 (2 Page)