목록Run to us with Sh4n3e (77)
Sh4n3e
정수형 Ver. int fastread(){ register char c = 0; while(c33){ num = num*10 + c-'0'; c = getchar(); } return num;}
이번 문제는 이전 문제와 비슷하면서도 약간 응용이 필요한 문제이다. 보면 FEBP라고 써있는데, 딱봐도 EBP를 이용해라 라고 말해주고있다. [assassin@localhost assassin]$ cat zombie_assassin.c/* The Lord of the BOF : The Fellowship of the BOF - zombie_assassin - FEBP*/ #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][..
해당 문제는 RET에 \xbf와 \x40을 쓰지못하는 문제다.이것은 기존 Stack으로 Return해서 Shellcode를 실행할 수 없고, RTL을 사용할 수 없다.그럼 우리는 딱 argv[1][47]이 \xbf, \x40인 것만 회피하면 된다. 따라서 나는 여기서 main함수의 ret를 다시한번 호출하는 아이디어를 이용했다. [giant@localhost giant]$ cat assassin.c/* 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 e..
이번 문제는 앞의 문제와는 다르게 execve()함수를 이용해서 RTL을 진행해야한다.execve()함수의 속성을 알기위해서는 아래의 주소를 참조한다. 문자열 "/bin/sh" 의 주소값을 얻는 방법과 execve()함수의 주소를 얻는 방법은 이전 문제에서 진행했던것과 동일하다. http://linux.die.net/man/3/execve 아래는 해당 문제의 C코드와 어셈블 코드가 있다. [bugbear@localhost bugbear]$ cat giant.c /* The Lord of the BOF : The Fellowship of the BOF - giant - RTL2*/ #include #include #include main(int argc, char *argv[]){char buffer[40..
해당 문제는 BOF에 Basic RTL을 보면 좀더 쉽게 이해할 수 있다. 아래는 진행관련해서 순서적으로 나열했다. [darkknight@localhost darkknight]$ cat bugbear.c /* The Lord of the BOF : The Fellowship of the BOF - bugbear - RTL1 */ #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, arg..
input box아래에 "select szPwd from T_Web13 where nIdx = '3' and szPwd = '"&pwd&"'"가 존재하는 것을 보면, 이 부분은 SQL Injection으로 풀어야 하는 것을 깨달을 수 있다. 우리가 기본적으로 아는 ‘ or 1 = 1 -- 을 넣었을 때, 다음과 같이 NO! hacking!이라는 Alert창이 뜬다. 이것은 기본적인 SQL injection을 막아놨다라고 봐도 무방하다. SQL injection의 원리는 결국 위의 Query문을 참(True)로 만들어 우회하는 것을 목적으로 한다. 따라서 우리는 다른 방법으로 참을 만들어야 함을 깨닫게 된다. select szPwd from T_Web13 where nIdx = '3' and szPwd =..
우리는 소스에서 이상한 점을 발견해야 한다. 또한 Hint의 숫자를 나중에 Unpacking한 소스에 이용해야 한다. 이 소스는 Packing된 Script언어임을 알아야 한다. http://www.strictly-software.com/unpacker 다음의 사이트를 통해 unpacking을 할 수 있다. 패킹된 결과이다. var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); function PASS(n) { var result = ''; var start = true; for (var i = 32; i > 0;) { i -= 4; var digit = (n >> ..
우리는 다음의 힌트와 같이 Point를 50까지 만들어야 한다. 하지만 25를 넘어가면서 다음과 같은 경고창을 띄워주게 된다. 우리는 이것을 우회해야만 한다. 여기서 단순히 Request를 변조하면 좋겠지만 25번의 작업을 거쳐야 하므로, 우리는 Burp Suit를 이용해서, 계속적으로 User-Agent를 SuNiNaTaS로 변조할 것이다.
이번 문제는 Notice Board에 글을 써야 하는 문제이다. 하지만 우리는 Notice Board에 대한 권한이 없다. Notice Board URL : http://suninatas.com/board/list.asp?divi=notice Q&A Board URL : http://suninatas.com/board/list.asp?divi=Free 우리는 Q&A Board의 글쓰기 권한을 통해 변조해서 접근하면 된다. http://suninatas.com/board/write.asp?page=1&divi=Free 이 주소는 Q&A Board의 Write Page이다. 뒷부분의 divi를 notice로 변조해서 접근하면 우리는 게시판에 접근할 수 있다. http://suninatas.com/board/..
문제는 아래와 같다. [golem@localhost golem]$ cat darkknight.c/* The Lord of the BOF : The Fellowship of the BOF - darkknight - FPO*/ #include #include void problem_child(char *src){char buffer[40];strncpy(buffer, src, 41);printf("%s\n", buffer);} main(int argc, char *argv[]){if(argc