전체 글 (35) 썸네일형 리스트형 BufferedReader 이번 포스팅에서는 Java에서의 입력방법 중 하나인 BufferedReader에 대해 얘기해볼 것이다. 3) BufferedReader : 문자열을 읽어 들인다. 저번 포스팅에서 InputStreamReader 클래스는 고정된 길이로만 읽어야 한다는 불편한점이 있다고 하였다. BufferedReader는 사용자가 엔터키를 입력할 때까지 사용자의 입력을 전부 받아들일 수 있게 하는 클래스로, InputStreamReader의 단점을 보완해준다. 예시) 입력 : HelloWorld, 출력 : HelloWorld 그렇다면, 이제 BufferedReader을 이용해 입력을 받는 코드를 짜 보자. import java.io.BufferedReader; import java.io.InputStream; import.. InputStreamReader 이번 포스팅에서는 Java에서의 입력방법 중 하나인 InputStreamReader에 대해 얘기해볼 것이다. 2) InputStreamReader : 문자 단위로 읽어 들인다. 저번 포스팅에서 InputStream 클래스는 출력되는 값이 아스키코드 값이므로 다시 문자로 해석해야 하는 방식 때문에 불편하다고 하였다. InputStreamReader는 바이트 단위로 읽어 들이는 InputStream을 통해 입력을 받은 뒤, 문자 단위로 데이터를 변환시키는 중개자 역할을 하는 클래스로, InputStream의 단점을 보완해 우리가 입력한 문자 값을 그대로 출력해주는 역할을 한다. 예) 입력 : abc, 출력 : abc 그렇다면, 이제 InputStreamReader을 이용해 입력을 받는 코드를 짜 보자. im.. InputStream 이번 포스팅에서는 Java에서의 입력에 대해 알아볼 것이다. 먼저, 사용자가 입력을 할 수 있는 방법 4가지에 대해 얘기해볼 것이다. 1) InputStream : 바이트 단위로 문자를 읽어 들인다. 2) InputStreamReader : 문자 단위로 읽어 들인다. 3) BufferedReader : 문자열을 읽어 들인다. 4) Scanner 1) InputStream : 바이트 단위로 문자를 읽어 들인다. InputStream 은 java.io 패키지에 속해 있는 자바의 내장 클래스로, 이 클래스를 이용해 문자나 숫자를 입력받으면, 아스키코드 값이 출력된다. 예) 입력 : a , 출력 : 97 / 입력 : 0, 출력 : 48 그렇다면, 이제 InputStream을 이용해 입력을 받는 코드를 짜 보자... 변수 이번 포스팅에서는 Java에서의 변수명 규칙, 자료형, 사용자 정의 자료형에 대해서 알아볼 것이다. Java에서의 변수명 규칙은 다음과 같다. 1. 변수명의 길이는 제한이 없고, 공백은 포함할 수 없다. 2. 변수명은 대소문자를 구분한다. 3. 변수명은 숫자로 시작할 수 없다. 4. _ 와 $ 문자 이외의 특수문자는 사용할 수 없다. 5. 자바의 키워드는 변수명으로 사용할 수 없다. [자바 키워드] abstract continue for new switch assert default synchronized package throw boolean do if private this break double implements byte else import public throws case enum transi.. main 메소드 C나 C++ 언어를 사용하는 프로그램은 무조건 main() 함수를 먼저 실행시킨다. 따라서 main() 함수는 C나 C++ 언어로 작성된 프로그램에서 필수적인 요소이다. 마찬가지로 Java 언어를 사용하는 프로그램의 시작도 main()함수이기 때문에 Java 언어로 작성된 프로그램에서의 main() 함수는 필수적이다. 그러므로 이번 포스팅에서는 Java로 프로그램을 만들기 위하여 main 메소드에 대해서 알아볼 것이다. java에서의 main 메소드는 다음과 같다. ******************************************************************************************************* // main 메소드의 원형 public static v.. [FTZ] level 11 문제풀이 힌트를 먼저 봐보자 ! 힌트를 보면, argv[1]의 값을 str에 복사해준 후 출력을 해 주는데, 복사해주는 부분이 취약하다는 것을 알 수 있다. 왜 취약할까 ?? strcpy 함수는 문자열을 복사하는 함수로, 복사하는 버퍼(argv[1])의 크기를 검증하지 않고 복사한다. 따라서 str의 크기인 256byte를 넘는 데이터를 str에 복사할 수 있게 되고, 이것은 buffer overflow 공격을 가능하게 하여 공격자가 원하는 대로 할 수 있기 때문에 취약하다고 할 수 있는 것이다. 그럼 이제 이 취약한 부분을 이용해 쉘을 얻어보자 ! 먼저, 쉘을 얻어올 수 있는 쉘코드는 다음과 같다. \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x8.. XSS (Cross-site Scripting) 란? XSS 공격이란? 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해 놓은 악성 스크립트가 애플리케이션에서 브라우저로 전달되는 데이터에 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것을 의미한다. XSS 공격 종류 ① 저장 XSS 공격 XSS 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해놓은 방법으로, 웹 사이트의 게시판, 사용자 프로필 및 코멘트 필드등에 악성 스크립트를 삽입해 놓으면, 사용자가 사이트를 방문하여 저장되어 있는 페이지에 정보를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행되면서 공격한다. ② 반사 XSS 공격 웹 애플리케이션의 지정된 변수를 이용할 때 발생하는 취약점.. [FTZ] level 9 문제풀이 먼저 ls를 해보면! 힌트가 있다!! 힌트를 먼저 봐보자! 힌트를 보니 소스 코드는 /usr/bin 폴더 안에 있는 bof의 소스코드이고 buf2에 go라는 문자열이 있다면 쉘을 얻어올 수 있으니 buf2에 go를 집어넣으면 된다라는 것을 알 수 있었다. 그렇다면 고것을 어떻게 할까..? 그걸 알아보기 위해 gdb를 이용해보기로 하자! /* gdb란? Linux에서 사용되는 디버깅 툴로 프로그램 내부에서 무슨 일이 일어나고 있는지 보여주거나 프로그램이 잘못 실행되었을 때 무슨 일이 일어나고 있는지 보여준다. ******************level 9를 풀기 전 알아야 할 gdb 명령어************************** - gcc -o a a.c : a.c라는 소스코드를 컴파일 하여 a라는.. 이전 1 2 3 4 5 다음 목록 더보기