Security

    FTZ level14

    FTZ Level14 ID : level14 PW: what that nigga want? 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level14의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include #include main() { int crap; int check; char buf[20]; fgets(buf, 45, stdin); #buf 변수에 45바이트만큼 입력받음 if (check==0xdeadbeef) { setreuid(3095, 3095); system("/bin/sh"); #/bin/sh 쉘 실행 } } fgets 함수에서 BOF가 일어날 수 있다!! 그런데 fgets는 45byte만큼..

    FTZ level13

    FTZ Level13 ID : level13 PW: have no clue 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level13의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include int main(int argc, char *argv[]) { long i=0x1234567; char buf[1024]; setreuid(3094, 3094); if(argc>1) #argv로 받는 입력이 1개 이상 있다면 strcpy(buf, argv[1]); #입력 buf로 복사 if(i != 0x1234567){ printf(" Warning: Buffer Overflow !!! \n"); kill(0, 11); ..

    FTZ level12

    FTZ Level12 ID : level12 PW: it is like this 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level13의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include #include #include int main(void) { char str[256]; # 256바이트 크기의 문자형 배열 setreuid(3093, 3093); #level13의 프로세스 ID printf("문장을 입력하세요.\n"); gets(str); #gets 함수로 배열 str에 입력을 받음 printf("%s\n", str); #입력받은 내용 출력 } gets 함수에서 BOF가 일어날 수 있다!! 우리의..

    Webhacking.kr 41번

    파일을 업로드할 수 있는 폼들이 있다. 우선 소스를 보자! 소스코드를 보면 파일명에서 ., , /를 필터링하고 복사해서 upload_dir에 저장하고 그 위치에 flag를 write하는 것을 알 수 있다. 그럼 upload_dir를 찾아보자! 파일 이름을 엄청 길게 해서 업로드를 하면 오류 메시지와 함께 해당 디렉토리의 위치를 알려준다! 다만 로컬에서 하면 파일 이름을 아무리 길게 해서 만들어도 소용이 없으므로 burpsuite 같은 툴을 이용해주자! 찾은 디렉토리와 업로드 했던 파일을 url에 써주면 flag를 알 수 있다!

    HackCTF read file

    이번에는 HackCTF의 Web 문제 중 Read File 문제를 풀어보자! File is flag.php라고 나와있다. 뭐 바로 풀리진않겠지만 url에 flag.php를 넣어보자! 음 flag가 필터링 되어있을까? url 아무 곳에나 flag를 넣어보자 구글 주소 사이에 flag를 넣어도 아무 문제 없이 처음 페이지가 잘 나오는 것을 보아 flag가 필터링되어있음을 알 수 있다! flag가 필터링되어도 flag.php가 출력되게끔하면 성공!

    Webhacking.kr 42번

    webhacking.kr 42번을 풀어보자! 해당 페이지의 소스를 보면 flag.docx의 download를 누르면 Access Denied가 뜨게 되어있다. 그런데 test.txt를 보면 ?down=dGVzdC50eHQ= 라고 수상한 알파벳들의 나열이 있다. 앞구르기 하면서 봐도 base64로 인코딩된 상태...! 디코딩을 해보면 test.txt가 나온다..!!!!!! 그럼 flag.docx를 인코딩해서 넣으면 될 것 같다. flag.docx를 인코딩한 값은 ZmxhZy5kb2N4이다. 이를 링크에 넣으면 다운로드가 진행된다!!!! 다운로드 된 파일 안에 FLAG 값이 존재한다.

    Webhacking.kr 25번

    webhacking.kr 25번 문제를 풀어보자. url을 보니 file=hello라고 되어 있는 것을 보아 GET 방식으로 파일을 받아오며 회색창에 그 파일이 출력되는 것 같다. 그리고 실제 파일은 hello.php인데 hello까지만 출력되는 것을 보아 file 파라미터로 받아온 값에는 자동으로 .php를 붙여 실행하는 것 같다. flag.php 파일을 열기 위해 url에 flag을 입력해보자! 흠... FLAG가 코드 안에 있다...? 소스코드를 알아보기 위해 php://filter라는 PHP Wrapper을 사용해보자. php는 입출력, 오류 파일 등에 접근할 수 있는 다양한 I/O 스트림을 제공하는데 이를 PHP Wrapper라고 한다. php://filter/convert.base64-enco..

    Webhacking.kr 6번

    webhacking.kr 6번 문제를 풀어보자 첫 화면에 들어가면 ID와 PW가 보인다. 먼저 소스를 보자 코드를 정리해보면 user 쿠키값이 없을 때 val_id 값에 guest, val_pw 값에 123qwe를 저장하고 20번 반복하면서 val_id, val_pw를 인코딩하고 항목 안에 1~9의 숫자가 있으면 해당되는 특수문자로 대체한 뒤 user 쿠키와 password 쿠키에 저장하는 코드이다. 디코딩 부분도 마찬가지로 user와 password 쿠키값을 가져와서 각 특수문자에 대칭되는 1~9의 숫자로 치환하고 20번의 디코딩을 한 후 디코딩한 id가 admin이고 pw가 nimda면 문제가 해결된다. 따라서 admin과 nimda를 20번 인코딩한 후 숫자를 해당되는 특수문자로 바꾼 뒤 그 값들을..