본문 바로가기

전체 글

(167)
PE - AutoPE 우선 오토잇으로 만들어진 파일을 하나 준다.실행을 하면 에러가 발생하는데 정상적으로 실행이 안된다. Exe2Aut 이 프로그램을 사용하면 디컴파일 된 소스를 볼 수 있다.총 소스 길이가 6264줄로 어마어마하다 하지만 딱히 중요한건 몇줄 안된다 이 부분에서 에러가 발생하는데 temp 폴더에 있는 gui5.png를 못풀어 오는 것이다.나중에서야 프랑스 언어때문에 안된다는걸 알게되었는데우선 프랑스 언어로 된 windows 8을 다운받았다. 실행시 모습이다 프랑스 언어로 된 운영체제에서는 아무 에러 없이 잘 돌아간다.그럼 이제 아무거나 입력해보자 에러 메시지가 보이는데 저런 문자열이 해당 소스에 존재하지 않는다 왜냐, 이런식으로 나와있기 때문이다.그래서 풀 방법을 생각했는데 우선 저 입력 창을 찾았다. 해당 ..
ELF - ARM 우선 ida로 해당 바이너리를 열어봤더니 어떻게 돌아가는지 감이 안잡혀서 실행해봤다아무것도 출력이 안된다. 그래서 메인에 브레이크 포인트를 설정하고 천천히 분석해보았다. 인자값을 하나 받으니 처음 사진에서 처럼 AAAA를 넣고 실행해보자 헥스레이로 보면 v4를 -1로 만들어야하는거 같은데 키 값의 길이는 31이다 그리고 빨간색으로 네모칸 친 부분에서 내가 입력한 값과 키값을 비교한다. R1 내가 입력한 값 R3가 키값 키 값을 어디서 가져오나 했더니 여기서 가져온다. 처음에는 저게 키값이라고 생각도 못했는데 뒤에 ^_까지 31이므로ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_가 플래그다...
Plaid ctf prodmanager 보호 기법은 NX와 ASLR이 걸려있다. 프로그램 실행모습 1 제품 생성2 제품 삭제3 제품 매니저에 등록4 제품 매니저에서 가격이 제일 낮은거 3개 출력 후 삭제5 프로파일 보여주기 메인 부분 - 입력한 것을 스위치 구문으로 표시했다. 제품명과 가격을 적고 malloc으로 76만큼 할당한 곳에 복사하고 링크드리스트를 설정한다. 제품을 3개 등록해야하니3개 등록하고 매니저에도 ADD해서 4번으로한번보면위처럼 나오게 된다. 이 때 매니저에 등록하고 2번으로 지우게 되면 위처럼 가격이 바뀌는걸 볼 수 있다. 그리고 2번에서 free한 것을 5번에서 다시 malloc 하기 때문에 use-after-free 취약점이 발생한다. create에서 malloc을 한 후 이 함수를 호출하는데 나머지를 0으로 초기화하고..
codegate 2014 angry doraemon nuclear와 비슷한 문제라는 얘기를 듣고 한번 풀어볼려했는데 ssp걸려있다. 하지만 그냥 풀어보자 우선 처음 4번을 누르면 위와같은 함수로 진입하게 되는데 read함수에서 buf크기보다 많은 사이즈를 입력받게 되면서 취약점이 발생한다.nuclear와 다른점은 passcode를 릭하는 대신 canary를 릭해야한다.fork()함수 덕분에 canary값이 고정이 되는데 밑에 You choose에서 알아낼 수 있다. buf의 위치는 bp-16임으로 v8과는 0xA만큼 떨어져있다.즉 값을 10개 넣어주면 알 수 있을거라 생각했는데 11개를 넣어야한다.sprintf는 null값을 만날 때 까지 출력을 하므로 보면 canary의 마지막 바이트가 null인걸 알 수 있다. 1234567891011121314151..
Warm-Heap 문제는 간단하다. malloc으로 할당한 후 fgets로 2번 입력받아서 2번 복사를 한다. 처음 malloc을 할 때 힙 상태는 이렇다. 총 4번의 malloc을 마치면 위처럼 주소가 등록된다. fgets로 입력받아서 넣는다. 입력받았던걸 위에 복사한다. 두번째 fgets를 받는다. (처음 받은 곳이랑 같은 위치) 두번째 복사는 malloc에서 가르치는 곳에 해당 주소를 복사한다. 그럼 첫번째 입력에서 "A"를 40개 넣고 exit의 주소를 넣는다. (마지막에 exit함수를 호출하니..)두번째 입력에서는 exit에 복사될 함수의 주소를 입력한다. 여기 flag를 읽는 함수가 있다. 123456789101112131415from struct import *from socket import * p = la..
PE - RunPE 이 문제는 다른 문제에비해 푼사람이 많아 도전해봤는데 음 왜그런지 알거같다. RunPE는 윈도우용으로 널리 사용되는 패킹 기술이라는데 실행하면 이렇게 나온다. UPX 섹션이 보이기도하고 UPX같아서 UPX 언패킹을 했더니 잘 되지 않았다. 디버거로 열어보면 음 보면 알겠지만 다른게 없다 정해진 것만 있는데 upx 언패킹 하는 소스도 안보이고 음 조금 난감했다.덤프떠보고 이것저것해봤는데 관련 자료에 RunPE라는 글이 있다 대충 내용이 readprocessmemory함수로 내용을 읽고 PE파일을 writeprocessmemory함수로 버퍼에 쓴다는거같다. 해당 함수에 브레이크 포인트를 걸고 실행한다음 스택을 보고버퍼의 주소를 덤프해보자덤프창에 새로운 PE가 있음을 확인할 수 있다. 내려보면 여러섹션들도 보..
codegate 2014 nuclear 이 바이너리는 따로 nc서버 설정을 안해도 바이너리 자체에서 소켓 통신을 한다. 고로 바이너리 실행 후 포트를 1129로 연결해주기만 하면된다. 서버에 있는 THIS_IS_NOT_KEY_JUST_PASSCODE를 읽어 들인다. (직접 파일을 만들고 문자열을 집어 넣어 세팅해준다.)실제 대회에서는 문자열이 뭔지 모르기 때문에 릭을 통해 알아내야한다.처음 입력은 quit와 target launch등 입력할 수 있다. s를 알아내야하는데 s1에서 0x200만큼 입력할 수 있다.v4와 v5를 다 채우면 s를 릭할 수 있는데 0x200으론 v4와 v5를 채울 수 없다. 마지막 부분에 이런 부분이 있다. 여기를 활용해 릭해보자. 이부분을 이용하면 v4와 v5를 채울 수 있으니 소스를 짜보면 1234567891011..
pwnable.kr fix 12345678910111213141516171819202122232425262728293031323334353637383940414243#include // 23byte shellcode from http://shell-storm.org/shellcode/files/shellcode-827.phpchar sc[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69" "\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"; void shellcode(){ // a buffer we are about to exploit! char buf[20]; // prepare shellcode on executable stack! strcpy(bu..