c1 - exercise7 포스팅 썸네일 이미지

War Games/training_prob

c1 - exercise7

vuln과 try_to_win 함수를 차례로 들어가네요 buf를 0으로 초기화하고, 입력을 0x3C만큼 입력받네요. 일단 BOF가 일어나는 것을 확인할 수 있습니다. 마지막 try_to_win에서는 그냥 buf에 입력을 받고 끝냅니다. 마지막으로 helper라는 함수가 있네요. 이것때문에 system plt를 구할 수 있게 되었기 때문에 따로 leak할 필요는 없어졌습니다. 공격 시나리오는 다음과 같습니다. 1. 첫 번째 vuln에서 puts함수를 통해 libc_main의 주소를 leak + main으로 다시 ret 1.5 bss에 binsh를 입력할 수 있는 상황이 못되기때문에 그냥 libc 내에서 binsh주소 찾기 2. 또다시 실행된 vuln에서 bof를 이용해 system("/bin/sh\x00"..

2020.11.29 게시됨

[linux] 4. PIE에 대하여 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] 4. PIE에 대하여

PIE Position Independent Execution Linux Memory Protection - 4 1. What is PIE? 리눅스 보호기법의 마지막, PIE입니다. 우선 PIE는 Position Independent Execution의 약자로, 해석하면 "위치 독립 실행"이라는 뜻입니다. 그럼 파일이 위치 독립적으로 실행되면 어떤 일이 생기는지 봅시다. 결론적으로 PIE 보호기법이 적용되면 실행할 때마다 바이너리의 주소가 랜덤화 됩니다. 무슨 말인지 잘 모르겠다구요? 아래 캡쳐본을 봅시다. 다음과 같이 스택을 제외한 바이너리의 주소까지도 offset만을 가지고 있고, 실행시 바뀌게 됩니다. 실습으로 직접 해보는 걸로 합시다. +) 당연히 gdb-peda의 checksec로 확인 가능합니..

2020.11.27 게시됨

c1 - exercise6 포스팅 썸네일 이미지

War Games/training_prob

c1 - exercise6

exercise5랑 거의 똑같은데 이번에는 직접 쉘을 따야 하는 것 같네요. buf는 0x48인데 0x60씩 넉넉하게 받아서 편하게 페이로드 짜면 될 것 같군요 NX도 걸려있는지라 RTL쓰겠습니다 system함수 검색 안되게 해놨네요.. libc database 사용하겠습니다. offset___libc_start_main_ret = 0x18550 offset_system = 0x3a950 offset_str_bin_sh = 0x15910b 페이로드 "A"*0x4c + &system + "A"*0x4 + &"/bin/sh\x00" etc 1. 직접 구한 base와의 offset과는 달라서 왜 저런거지?라고 생각했는데 모든 라이브러리 및 버젼에 따라서 달라져서 그렇다고함. wow 2. libc.blukat...

2020.10.18 게시됨

c1 - exercise5 포스팅 썸네일 이미지

War Games/training_prob

c1 - exercise5

오 좀 다른 양상! 좋습니다 먼저 read_flag()를 시키는데, flag.txt를 &g_buf에 저장하네요. g_buf의 위치입니당 그다음에는 get_function()을 통해 write함수의 주소를 불러오네영 그러면 지금 필요한건 &g_buf에 있는 flag를 출력시키는 거니깐, rtl을 이용하도록 하겠습니다. 대놓고 실행시키면 write함수의 주소를 주니깐 이걸로 puts를 구하고, puts함수에 인자를 &g_buf로 줘서 리턴하면 되겠죠? 그럼 페이로드는 "A"*0x4c + puts_addr + "A"*4 + &g_buf puts = write - 480096 ㅋㅋㅋㅋㅋflag는 그냥 제가 임의로 만들었어영 어차피 flag읽는게 목표라 EOF터져도 됨!

2020.10.16 게시됨