War Games/training_prob
c1 - practice4
NX가 없으니깐 걍 쉘코드 넣어서 품
War Games/training_prob
c1 - practice4
NX가 없으니깐 걍 쉘코드 넣어서 품
War Games/training_prob
c1 - practice3
practice2인데 버젼만 64비트인것 뿐이네요. 쉬워여~~
War Games/training_prob
c1 - practice2
callme의 주소를 대놓고 알려주네요. 그리고 buf의 크기는 0x48인데 0x50만큼 입력받으니깐 ret까지 쉽게 덮어줄 수 있을 것 같습니다. 안알려줘도 충분히 풀 수 있었던 문제!
War Games/training_prob
c1 - practice1
너무 간단한 bof져? 넘모쉬워여~~
War Games/training_prob
betting
너무 길어서 필요한 것만 쓴다 일단 read에서 0x28만큼 입력받는데, 뒤에 canary를 leak할수 있다. ==간단한 설명== 36번줄에서 s를 출력시키는데, 문자열은 뒤에 \x00이 있는 걸 통해서 문자열의 끝임을 확인하기 때문에 canary의 1바이트를 덮어씌운 후 s를 출력시키면 뒤에 canary 7바이트를 leak할 수 있다. 그러면 어차피 canary의 마지막 바이트는 0x00이기 때문에 canary를 leak할 수 있다. 그리고 여기서는 scanf로 입력받기때문에 입력제한없이 ret까지 무리없이 exploit할 수 있다. 이름 입력을 받은 뒤 rsp를 까본건데 빨간색 박스가 canary고 노란색 박스가 ret값이라 canary만 leak해내면 쉽게 exploit할 수 있다. 그리고 코드를..
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"..
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...
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터져도 됨!
War Games/training_prob
c1 - exercise4
봅시당 그냥 exercise3이랑 똑같이 품 bb 이거 될때도 있고 안될때도 있넹ㅇㅅㅇ
War Games/training_prob
c1 - exercise3
보면 기본적으로 exercise1과 같은데, 대신 리턴할 함수가 없네여 저는 쉘코드 사용했습니다.
War Games/training_prob
c1 - exercise2
ㄱㄱ vuln함수로 들어가네요. s는 ebp-0x14에서 시작해서 크기가 0x14밖에 되지 않지만, 입력은 0x38이나 받고 있네요. main함수 외의 함수에서 sfp까지 조작할 수 있기 때문에 간단히 FPO를 사용하면 될 듯 합니다. 보니깐 NX도 안걸려있어서 쓸 수 있습니다. FPO를 모른다면 : dokhakdubini.tistory.com/228?category=809542 [Stack] Frame Pointer Overflow, FPO에 대하여 오늘은 FPO, Frame Pointer Overflow에 대해서 알아볼 것입니다. SFP Overflow라고도 불립니다. FPO에 대한 풀이 글들을 보면 계속 leave가 ebp+4에 접근할 수 있다, sfp를 조작했으니 ebp를 조작할 수 있다이런.. ..
War Games/training_prob
c1 - exercise1
후배가 준 문제들 모음이 있어서 1일1폰하기로 했다! 후배림 땡큐소마치 문제를 보면 단순히 scanf를 사용하고 있고, v5는 ebp-0x24에 있기 때문에 쉽게 bof를 일으킬 수 있을 것 같습니다. 게다가 대놓고 쓰라고 win함수도 주어졌네염 굳굳