- Today
- Total
목록Pwnable (104)
Phantom
Arm 공부에 앞서.... qemu로 Arm을 구동하기 위해 구동법부터 적겠다. sudo apt-get install qemu wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2 wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress 실행 방법 qemu-system-arm -M vexpress-a9 \ -kernel vmlinuz-3.2.0-4-vexpress \ -initrd init..
어............... 아무생각이없다. 첫 분석이긴한데..어....어떻게 작성해야할지 너무 분석력도 떨어져서 확실하게 분석한건 맞는지 의심이 들 정도로 분석력이 미약하다. 일단 CVE를 보자면 Mini-stream Sadow Stream Recorder 3.0.1.7의 Stack-Based BOF는 원격 공격자가 재생 목록 (.m3u) 파일의 긴 URI를 통해 임의의 코드를 실행할 수있게합니다. 라고 설명 되어있다. POC코드를 보면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 ..
오늘은 이런 글을 보고 많은 얘기를 듣고 Binary Diffing Tool인 Bindiff를 설치하다 삽질했던걸 적어보려 한다. 우선 설치 방법은 간단하다. 준비물은 Bindiff IDA PRO(with hex-ray) JRE 최신버전 이렇게 있으면 된다. Bindiff는 IDA의 플러그인 방식으로 작동하는 툴이다. 우선 설치는 간단하다. Bindiff를 설치하면서 JRE를 설치하고 Bindiff 경로를 IDA 경로에 맞추어 주면 된다. 단, 여기서 IDA는 설치시에 기본적으로 경로가 IDA 6.x or 7.x 이렇게 버전으로 되어있다. 이것을 IDA로 수정해준다. ※ 그리고 혹시 Windows에서 BinDiff를 사용하시는 분들은 "Can't start disassembler. Please set c..
이번 문제는 Replace이다. 글자는 입력이 되지 않고 숫자만 입력이 된다. 그리고 Check를 누르면 에러가 떠버린다. 우선 이게 뭐로 짜여진건지 봐야겠다. C++로 짜여져 있다. 이건 Wrong을 Correct로 바꾸는 문제같은데.. 일단 헥스레이를 이용한다. 우선 보니 입력과 출력함수에 대해 BP를 건다 GetDigItemInt의 리턴값은 입력한 값을 16진수로 리턴한다 분석을 하면 이렇다. 우선 값을 11111을 넣고 Check를 누르면 함수의 RET값으로 0x2B67을 리턴한다. 그리고 아래 함수에 들어가게 되면 Correct를 저장하고 0x4084D0에 있는 입력값을 2 증가시킨다. 후에 0x40466F함수를 실행하고 0x4084D0에 0x601605C7을 더하고 +1 증가시킨다. 0x408..
음... ELF바이너리 문제인데 Wrong과 Correct이런문제같다. 아직 PE와 ELF에 대해 자세히 공부하지는 않았다. 나중에 공부를 해야겠다 아무튼 gdb로 디버깅하려했는데 file명령어로 보니 stripped 되어있었다. IDA로 바이너리를 열어봐야겠다. Main 함수는 이렇다. xor_func를 보면 다음과 같다. 배열이 선언되는데 char[5]이다. 이 조건들을 간단히 하면.. char data[5]; data[0] = data[0] ^ 0x34 data[1] == '1' data[2] = data[2] ^ 0x32 data[3] = data[3] ^ 0x88 data[4] == 'X' data[5] ==NULL data[2] == '|'(0x7C) data[0] == 'x' -> data[..
This MP3 Player is limited to 1 minutes. You have to play more than one minute. There are exist several 1-minute-check-routine. After bypassing every check routine, you will see the perfect flag. 이것이 ReadMe에 적혀있는 문장이다. 이 MP3 Player는 1분으로 제한되어있다. 1분 이상 재생해야 한다. 몇몇의 1분체크루틴이 존재한다. 모든 체크루틴을 우회한 후에, 너는 완전한 flag를 볼 수 있을것이다. 라고 발번역을 하면 이렇게 된다 하핫.. 실행 모습은 이렇다. 그리고 1분이 지나면 이렇게 메시지가 출력되며 다시 위의 상태로 돌아간다. 우..
ReversingKr UnpackMe Find the OEP ex) 00401000 이번 txt파일에는 이렇게 적혀있었다 OEP를 찾으라는 것이다. OEP(Original Entry Point) : 프로그램의 진짜 실행 위치를 뜻한다. 패킹된 바이너리에서 언패킹을 하고 OEP로 가게 되면 원래 프로그램의 흐름이 보이게 되는 것이다. 문제는 패킹되어있으나 무엇으로 되어있는지 모른다. 직접 패킹을 풀어봐야 알것 같다. 음...UPX처럼 처음에 PUSHAD라도 있으면 POPAD를 찾을텐데 그런게 없다.. 직접 트레이싱을 해봐야겠다. 이 문제는 풀이는 쉽다 근데 하다보니 분석을 하게 되었다. 우선 kernel32.dll아스키값을 PUSH하고 LoadLibrary 함수를 실행시켜 라이브러리를 로드하고 라이브러리 ..
ReversingKr KeygenMe Find the Name when the Serial is 5B134977135E7D13 압축을 풀고 ReadMe.txt를 열면 저 문장이 나온다. 시리얼값은 찾은 듯 하고 이제 파일에 대한 분석을 해야겠다. 이번도 역시 C++로 짜여져 있다. 실행을 하면 다음과 같이 나온다. 맞지 않은 Name을 입력해서 그런지 Wrong이라는 메시지를 출력하고 프로그램은 종료 됐다. 이번도 역시 Wrong이라는 문자열을 추적해서 문제를 푸는 쪽으로 가봐야겠다. 역시나 분기문이 존재 했다. 입력 함수를 찾고 거기에 BP를 걸고 트레이싱을 한다. 이것이 XOR 루프인데 여기서 스트링을 XOR시켜버린다. 맨 아래부분은 문자열의 길이를 비교하고 JMP시키는 명령이다. 문자열의 길이는 루..
음.... 나는 리버싱을 다시만지는 것은 참 오랜만이다. 많은 정보를 듣고 머리로 저장만해두고 사용해본적이 오랜만이라는것 또한 같다. 그리고 나는 포너블과 취약점 분석을 더 잘하기 위해 리버싱을 시작했다. 시원포럼에 다녀와서 느낀것을 가지고 리버싱을 시작했다. 첫 문제는 Easy_CrackMe이다. 프로그램을 실행하면 막연히 이렇게 나온다. 저곳에 값을 넣고 확인을 누르면 이렇게 나온다. 이제 분석을 시작해보자. 우선 PEID로 본 결과 C++로 짜여진 것을 알 수 있다. 이뮤니티로 위에서 출력된 Incorrect Password를 찾아보자 위에 스트링 값을 추적해보면 분기가 존재하게 된다. 위로 올라가서 분기문을 추적해보자. 입력함수 아래서부터 비교값과 루프가 존재한다. 그리고 루프가 끝나는 지점에서 ..
개요 이번 문제는 ROP문제 3대장중 2번째인 nuclear다. 저번 ropasaurusrex가 아주 심플한 ROP였다면 이번 문제는 함수Libc를 leak해야 한다. 문제 내용 및 분석 1129 port로 연결하고 accept후 fork가 되면 subroutine으로 이동하게 된다. 로컬의 THIS_IS_NOT_KEY_JUST_PASSCODE를 stream에 저장하고 fread로 s에 읽어온다. 각 명령어를 입력하고 target을 입력하면 Latitude/Longitude를 입력한다. 여기서 이 else문을 이용하여 v5, v4를 지나서 char s에 있는 pascode를 leak한다. 그리고 launch와 leak한 passcode를 입력하여 thread를 생성하고 newthreadroutine()으..