분류 전체보기 309

[Circle City Con CTF 2021 : pwnable] [Baby] Fawn CDN 풀이 (overwriting)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Analysis Check Mitigation Execution & Code 1번 메뉴를 선택하면 무슨 주소를 출력해 준다. 이 주소는 IDA에서 확인한 결과, win함수의 주소임을 알 수 있다. win 함수는 아래와 같이 생겼다. fawn.jpg를 화면에 출력해준다. 뭔가 이 사진에 flag가 저장되어 있을 것 같아서 이 함수를 최종적으로 실행시켜야겠다고 생각했다. 그리고 3번 메뉴에서 이 deliver 함수를 실행한다. 직감적으로(?) 이 함수 대신에 win함수를 실행해야겠다고 생각했고, 마침 디버깅하면서 확인해보니 s에 선택메뉴 번호 적을 때 s.fptr 영역을 덮을 수 있어서 그대로 바로 진행하였다. Get Flag fr..

CTF/Write UPs 2021.06.17

[BCACTF 2.0 : binex] 내가 푼 문제들 풀이 (포넙 올클!) (예약글, 6/14 09:30 공개)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro BCA Mart 일정 금액의 money를 주고 그 money보다 많은 flag를 구매해야 하는 문제 이런 문제일 경우, 보통 음수로 입력하거나 int 최댓값 뭐 이런거 입력하면 바로 풀린다. amount 입력할 때 int 최대값 입력해서 내 money를 늘릴 수 있다. Honors ABCs 진심 이게 젤 어려웠음 ㅎㅎ; gets로 인한 BOF for문에서 response에 대한 값을 뭐 검증한 후, 밑의 if문 로직에서 grade 변수의 값에 따라 flag를 준다. 내가 한 삽질 처음에 BOF가 일어나서 grade 변수 부분의 값을 flag출력되는 조건에 맞게 변조시키려고 했으나, 내가 입력한 후 for문 안에서 grade 변수..

CTF/Write UPs 2021.06.14

[pwnable.xyz] bookmark 풀이 (logic bug로 인한 overflow?)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro logic error라고 하는데, 사실 error랑 bug 차이도 잘 모르겠고,, (?) 결국은 overflow가 일어나서 변수의 값을 덮는 것이기 때문에 logic bug로 인한 overflow? 라고 제목을 지었다. Analysis Check Mitigation 요새는 왤케 다 문제들이 보호기법이 전부 걸려있는지 잘 모르겠다. Execution 일단은.. login을 하는게 무슨 의미인지 잘 모르겠고, url을 생성하고 프린트하고 save하는 곳에서 뭔가 취약점이 발생할 것 같은 느낌적인 느낌? 이제 코드를 살펴보자. Code 빨간색 네모 1번 Login 메뉴로 password를 입력하는 부분이다. 여기서 qword_2023..

[pwnable.xyz] message 풀이 (OOB, pie leak, canary leak)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro Analysis Check Mitigation 보호 기법이 전부 다 걸려있다. 엄청 간단하거나, 카나리 릭이나 파이릭을 해야하는 그런 문제일 수도 있다. Execution 처음에 이 문제보고 FSB 문제일려나? 싶었는데 아니었다.ㅎ Code 노란색 admin은 전역변수이다. admin 위치에 뭔갈 넣고 저 메뉴를 선택하면 win함수(flag 출력)이 호출이 될 것이다. 빨간색 scanf에서 bof가 터지고 2번 메뉴에서 나의 인풋을 출력해준다. 그래서 여기서 카나리 릭도하고 파이 릭도하고,, RET를 덮자~ 라고 생각했다. 하지만 문자열을 입력받을때 마지막에 NULL도 같이 붙어버린다. OMG 그래서 다른 방법을 찾아야 했다. ..

main 함수가 호출, 종료되는 과정(.init_array&.fini_array)

참고 : https://wogh8732.tistory.com/228 https://dreamhack.io/learn/11#8 https://rninche01.tistory.com/entry/Linux-Binary-Execution-Flow 분석 대상 바이너리 : pwnable.xyz의 Dirty Turtle문제 바이너리 fini_array 가 뭔지 알아보려고 위 블로그를 토대로 main함수가 호출, 종료되는 과정을 살펴보았다. 1. ELF 헤더 확인 Entry point(EP) : 코드가 시작될 때 실행이 시작되는 파일, 프로그램의 시작점 또는 그 영역 Entry point 주소를 IDA에서 찾아보면 _start 함수임을 알 수 있다. 프로그램을 실행하면, _start 함수가 맨 처음에 호출이 된다. 2..

System Hacking 2021.06.03

[pwnable.xyz] badayum 풀이 (pie leak, canary leak)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 랜덤으로 bof 찾기!? Analysis Check Mitigation 보호 기법이 전부 다 걸려있다. 엄청 간단하거나, 카나리 릭이나 파이릭을 해야하는 그런 문제일 수도 있다. Execution Code stripped된 파일이다. sub_cb8은 그냥 셋팅하는거라서 sub_ead 함수를 살펴보기로 한다. random_str을 sub_d48 함수를 통해 정의해주고 있다. (sub_d48함수는 추후 살펴볼 예정) 그리고 random_str을 포함해서 이것저것 출력을 해준 다음, random_str의 길이를 재고 v0변수에 저장하고 있다. read함수로 사용자에게서 v0+1(random_str보다 한글자 더 긺) 길이의 input..

[pwnable.xyz] Dirty Turtle 풀이 (*)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 처음에 문제 이름만 보고 풀이가 좀 더러운 문제인가..? 싶었다 ㅎ. Analysis 보호 기법 확인 No 렐로 Execution 뭔가 원하는 주소에 원하는 값을 넣을 수 있게 생겼다. Code 오호, 원하는 주소에 원하는 값을 넣을 수 있다. 게다가 flag를 출력해주는 win함수도 있다. no relro였으니, 어떤 함수 got에다가 저 주소를 넣어주면 될 듯 하다. 그런데 딱히 덮을만한 got가 없다..! 그러면 fini_array 덮어야지 Exploit Scenario 1. fini_array에 win주소 넣기 아 그런데, get_val 함수 리턴값이 뭐길래 처음에 자꾸 v5 변수에 그냥 0이 들어갔었다. 정체는 strt..

Double Staged FSB

이 문제 풀다가 첨으로 봄 FSB FSB는 스택의 값을 조작하여 원하는 결과가 나타도록 공격하는 방법이다. 지역변수(buffer)가 선언되어 있고, 이 값을 쓰기도 가능하며, 출력도 가능한데, 출력을 할 때 포맷스트링을 지정해주지 않아 발생하는 취약점이다. FSB는 %p 등을 이용하여 스택의 값을 엿볼수도 있고, %n을 이용하여 원하는 스택 위치에 값을 쓰는 것도 가능하다. 보통 exploit을 하려면, 변조하고 싶은 주소(got)를 넣고 해당 값이 나오는 곳에 %n 포맷스트링을 이용하여 실행하고 싶은 주소를 넣는 방법을 쓴다. 하지만 어떤 변수를 printf로 출력을 하는데, 그 변수가 지역변수(buffer)가 아닌 전역변수로 선언이 되었다면 어떻게 될까? (Double Staged FSB) 기존 FS..

System Hacking 2021.05.30