본문 바로가기

전체 글

(167)
pwnable kr flag 안녕 먼저 패킹이 되있는지를 살펴봤는데UPX로 되있는거같아서 한번풀어봤다 UPX하기전보다 많은 문자열이 나타났는데두 번째 문자열 i will malloc()and strcpy the flag there take it.이란 문자열은 프로그램 실행시 나오는 문자열인데 그 위에 UPX문자열은 그냥 답같았다찔러보니 답맞는데...flag is 라고 써있었으면 좀더 쉽게 찾을 수 있었을텐데..
pwnable kr random 안녕랜덤값을 어떻게 찾을까...rand는 불안정하기때문에그냥 같은값이 나온다그래서 나온것이 srand인데아무튼 rand니깐 개이득 1804289383==rand값이다 코딩해보니깐 저렇게 나오는데 트레이스를 이용한 방법도 있다 아무튼 저걸 이렇게 계산하면정답이다
pwnable kr bof 안녕ㅇㅇ 소스는 이렇다key가 0xcafebabe랑 같아야하는데 스택구조를 보자면key[4]ret[4]sfp[4]buffer[44]위처럼 나오는데 52바이트를 채워주고 그 뒤에 리틀엔디안으로주소를 입력하면된다 아래처럼... 32비트 때문에 우분투를 깔았다....
pwnable kr collision 안녕하세요 메인부터 보자 인자를 입력해야하고argv[1]이 20바이트여야한다해쉬코드(0x21DD09EC)가 check_password(argv[1])랑 같아야한다즉 return res가 0x21DD09EC가 되야한다 check_password()를 보면 4바이트씩 나눠받는다나눠받은걸 res에 더한다 win10에 계산기 디자인이 괜찮다 5로 나눴다 근데 다시 5를 곱하면 4가 적다 고로 이렇게 나눠준거에서 4를 더한다 성공
pwnable kr fd 안녕하세요 소스를 보자 버퍼는 32fd는 내가 입력한 argv[1]에서 0x1234(4,660)을 뺀다len은 버퍼에서 32만큼의 문자열을 읽는다만약 버퍼가 LETMEWIN이면 flag를 cat하고else가 없으므로밑에 프린트를 출력한다 파일 디스크럽터 대상 0 표준입력 1 표준 출력 2 표준 에러 우리는 argv[1]에 입력을 해서 0으로 만들어주고LETMEWIN을 입력하면된다 4660은 16진수로 0x1234 이렇게 성공이다
LOB LEVEL20(xavious ==> death_knight) 안녕하세요 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667/* The Lord of the BOF : The Fellowship of the BOF - dark knight - remote BOF*/ #include #include #include #include #include #include #include #include #include main(){ char buffer[40]; int server_fd, client_fd; struct sockaddr_in server_addr; struct sockaddr_in clie..
LOB LEVEL19 (nightmare ==> xavious) 안녕하세요 사진을 보면 알겠지만 안되는게 너무 많다buffer+47에 \xbf, \x08을 못하게 함으로 스택 영역이나 코드 영역의 주소를 사용 못한다LD_PRELOAD 안됨leave-ret도 사용 불가 (\x40을 제한하진 않았음)그러니 라이브러리도 사용 못한다그냥 다 사용하지말라는거다 그럼 어떻게 풀수있냐면fgets()사용하면read라는 함수를 통해 일정 영역에 버퍼로 잠시 넣어둔다 $(python -c 'print "A"*48';cat) | strace ./파일 이름이렇게 하면 중간에 old_mmap으로 0x40015000부터 0x40016000까지 할당해 임시 버퍼로 사용하고있다 A 48개를 read로 읽은 뒤에 0x40015000 임시버퍼영역에 넣어준다그럼 이제 쉘코드를 임시버퍼에 넣어주고 re..
LOB LEVEL18 (succubus ==> nightmare) 안녕하세요 ret 값이 &strcpy가 아니면 아래의 메세지를 띄운다소스 마지막에 memset의 AAAA로 buffer+48부분을 덮는다그럼 우리는 strcpy인자를 통해 AAAA주소를 덮어쓴다 dummy[44]&strcpy[4]dummy[4]&buffer[4]&argv2[4] &system[4]&exit[4]&/bin/sh[4] 몇시간동안 주소를 못맞추고있다풀이를 보고 페이로드를 파이썬 소스도 돌렸는데 안나온다bash2도 입력했는데 극혐이다