simpleArch (Reversing) write-up simpleArch-v1이라는 바이너리를 다운 받을 수 있고, 이 바이너리는 s390x 라는 아키텍쳐를 사용한다.힌드로 simpleArch-v2라는 바이너리가 올라왔는데 이 바이너리는 64bit powerpc 바이너리이다. qemu를 이용해서 simpleArch-v2를 분석했다. 분석에 들어가기 앞서.. apt-get install -y gcc-multilib-powerpc64-linux-gnu apt-get install qemu-user-static apt-get install qemu-ppc64-static qemu와 위의 것들을 설치해주고, qemu-ppc64 -g 12345 /usr/powerpc64-linux-gnu/lib/ld-2.23..
Failure Observation Engine (FOE) 퍼저?CERT에서 만든 바이너리 퍼징 도구.파일을 여러가지 기법으로 변조하여 응용프로그램으로 실행하고 크래쉬 발생 시 이를 수집한다.또한 windbg와 msec 모듈을 사용하여 크래쉬에 대한 EXPLOITABLE, PROBABLY EXPLOITABLE, .. 등 공격 가능성에 대해 분류해준다.최신 버전은 BFF (Basic Fuzzing Framework) 와 FOE 퍼저가 합쳐져서 유용한 크래쉬에 대한 순위도 매겨진다.https://www.cert.org/vulnerability-analysis/tools/foe.cfm? 이 퍼저를 이용해서 Windows 환경에서 퍼징을 돌려서 몇몇 취약점을 찾아냈었는데 안드로이드 앱에서 취약점을 찾고 싶어서 ..
카테고리 BABY’S FIRST 풀이서버에 접속하면 username와 Pass를 입력 받는다. 알맞은 계정을 입력하면 다섯 개의 메뉴를 사용할 수 있다. login 함수를 보면 checkuser 함수와 checkpass 함수로 계정을 검사하는 것을 볼 수 있다. 각각의 함수로 들어가면 입력 값을 어떤 값과 비교하는 것을 볼 수 있는데 확인한 결과 username은 mcfly, pass는 awesnap이다.이 계정을 이용하여 메뉴에 접근할 수 있다. 1번 메뉴인 Request Exploit 은 add_request 함수로 연결된다.56 bytes 만큼을 malloc 해서 reqlist 라는 전역 변수 배열에 할당된 순서대로 포인터를 저장한다. 그 후 힙 영역에 쓸 text를 0x80 bytes 만큼 입력 ..
카테고리 Web (132 solved) 풀이 웹 사이트와 app.py 파일이 주어진다. 웹 사이트에서는 네 개의 입력 칸이 있고 submit 버튼을 누르면 입력한 문자열을 읽어주는 .wav 파일이 생성된다. app.py 를 보면, 입력할 수 있는 tweet의 최대 개수(MAX_TWEETS)는 4개이고 하나의 tweet당 입력할 수 있는 문자의 최대 길이는 140이다. 취약점 `ls` 를 입력하면 ls 명령어가 실행되어 그 결과가 음성 파일로 만들어진다. 커맨드 인젝션이 가능하다. 이제 플래그가 있는 파일을 찾아야한다. find 명령어를 사용해서 flag 파일의 경로를 찾을 수 있다. 하지만 음성을 알아듣기 어려운데, app.py 파일에서 docker_cmd 변수를 보면 -v 옵션으로 컨테이너에서 사용할 ..
카테고리 sombra 문제 TEMPORAL 버튼을 누르면 php 파일 두개와db.sql이 다운받아진다. 소스를 확인해보면 아이디와 패스워드 값이 모두 노출되어 있다. 하지만 "gportero" 라는 아이디로 로그인하려고 보면 해당 아이디가 block되어 로그인이 불가능하다. 또한 addslashes를 사용하여 인젝션을 방지하고 있다. 처음엔 addslashes를 우회해야 된다고 생각하여 0xbf, 0xaa등을 시도했는데 euc-kr을 utf-8로 변환하는 코드가 있어야 가능한 방법이기 때문에 우회가 되지 않았다. 그 다음으로 본 것은 trim 함수다. trim은 문자열의 공백을 제거해주는 함수인데 스페이스바, 탭, 개행 문자, 캐리지 리턴, 널 등을 제거한다. trim으로 제거되지 않는 백스페이스(0x0..
카테고리 reversing 문제 keygenme.exe 파일이 주어지는데 해당 파일에서는 Name과 Serial 값을 입력 받아 매치되는지 확인한다. 이때 Name값을 이용하여 Serial 값을 생성하는데 Serial 값이 "SpuLhNlYlcVsbApvU"와 매치되는 Name값을 찾는 문제다. ida로 바이너리를 열어보면 Name으로 Serial을 계산하는 부분을 쉽게 찾을 수 있다. (sub_401080) v1은 5로, 항상 값이 일정하다. 5-71 = -66, 5-39 = -34 이고 각각에 97과 65를 더하면 둘 다 31이 된다. 알파벳을 31번 rotate 하고 있는 것이고, 알파벳은 26개이기 때문에 5번 rotate하는 것과 같다. Serial로부터 Name을 계산하려면 19(26-5)번 ..
카테고리 analysis 문제 압축 파일이 주어진다. 압축을 두 번 해제하면 malscript 라는 폴더에 다섯개의 vbscript 파일이 있는 것을 볼 수 있다. 이 파일들을 모두 분석하여 key url을 찾아야 한다. 파일은 위와 같은 형태로 난독화 되어 있다. 주석을 제거하고, 각각의 변수들을 문자로 치환하는 과정을 거쳐 난독화를 어느정도 해제했다. 이때 제일 처음 등장하는 function(위 파일에서는 AXSZWYG)이 첫 번째 인자의 문자열에 대한 decode를 수행하고 있다. 해당 함수가 호출되는 부분을 찾아 첫 번째 인자와 두번째 인자를 구해 난독화를 한 번 더 해제하면 사이트의 url들이 나타난다. 다섯개의 파일들을 분석한 결과, 다섯번 째 파일에서 key url을 찾을 수 있었다. Cod..
카테고리 matrix 문제 32 bit elf 바이너리가 주어진다. 이 바이너리는 code.txt를 해석하여 인스트럭션들을 실행한다. 인스트럭션을 호출하는 부분은 위 그림 중 22번 째 줄 부분이다. 여기서 instruction_table 배열에는 mov, add, sub, xor, cmp, jmp, je, jne, jl, jg, call, ret, push, pop, syscall 이 순서대로 있고, 각각의 함수들은 바이너리 내부에 구현되어 있다. 예를 들어서 coce.txt의 첫 번째 바이트가 0x0c 라면, 열 두 번째 함수인 push가 실행된다. 다음 실행할 인스트럭션은 세 번째 바이트의 값 + 3 만큼 건너뛴 위치가 된다. 만약 방금 실행한 인스트럭션이 pc 값을 변경할 만한 함수(jmp, re..
카테고리 PWNABLE 문제 main() passcode.txt를 읽은 값과 사용자의 입력 값이 같아야 sub_8048756 함수를 호출 할 수 있다. passcode.txt를 읽은 값은 s2, 사용자의 입력 값은 s1에 들어가는데 0x28 바이트 크기의 s1에 0x50 바이트의 입력을 넣을 수 있어 s2로 overflow가 발생한다. Overflow를 이용하여 s2의 값을 조작할 수 있으므로 passcode.txt를 몰라도 우회가 가능하다. sub_8048756() sub_8048756 함수로 들어오면 네 가지 메뉴가 있다. echo는 입력한 문자열을 출력해주고, man은 메뉴를 출력해주고, exit는 프로그램을 종료한다. 여기서 중요한 건 root_auth 메뉴이다. s = &v4 root_auth ..