분류 전체보기 62

Web Hacking STAGE 5 Cross Site Request Forgery(CSRF)

CSRF 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. CSRF 공격에 성공을 하려면 공격자가 작성한 HTTP 요청을 보낸 코드를 이용자가 실행해야한다. XSS와 CSRF의 차이 공통점 두 개의 취약점은 모두 클라이언트를 대상으로 하는 공격이다. 또한 이용자가 악성 스크립트가 포함된 페이지에 접속하도록 유도해야한다. 차이점 XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로 하는 공격이다. CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내는 것을 목적으로 하는 공격이다. 이번 시간에는 분량이 엄청 적었다. 출처 https://dreamhack.io/lecture/courses/172 [ClientSide: CSRF 이 코스에서는 클라이언트 사이드 공격인 CSRF에 대..

보안/Dreamhack 2022.07.05

Web Hacking STAGE 4 Cross-Site-Scripting (XSS)

XSS 클라이언트 사이드 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입하여 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있게 하는것 이다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취할 수 있다. XSS 종류 종류 설명 Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS Reflected XSS XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS DOM-based XSS XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS Universal XSS 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS Stroed XSS 서..

보안/Dreamhack 2022.07.03

Web Hacking STAGE 3 Cookie & Session

쿠키(Cookie) 쿠키는 Key와 Value로 이뤄진 일종의 단위이다. 쿠키는 Connectionless, Stateless 특성을 가지고 있다. Connectionless: 하나의 요청에 하나의 응답을 한 후 연결을 종료한다. Stateless: 통신이 끝난 후 상태 정보를 저장하지 않는다. 서버가 클라인어트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때 마다 쿠키를 같이 전송한다. 서버는 클라이언트의 요청에 포함된 쿠키를 확인해 클라이언트를 구분한다. 복습 Web Server 정보를 제공하는 주체 ex) 식당에서 음식을 서빙하는 사람 Web Client 정보를 받는 이용자 ex) 음식을 주문하는 고객 단 쿠키 변조가 일어날 수 있다. 쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는..

보안/Dreamhack 2022.06.23

Web Hacking STAGE 2 웹

URL(Uniform Resource Locator) 웹에 있는 리소스의 위치를 표현한다. Scheme: 웹 브라우저가 어떤 통신 규약을 사용할지 지정한다. Host: Authority의 일부로, 접속할 웹 서버의 주소에 대한 정보를 가진다. Path: Authority의 일부로, 접속할 웹 서버의 포트에 대한 정보를 가진다. Query: 웹 서버에 전달하는 파라미터이다. URL에서 '?'뒤에 위치한다. Fragment: 메인 리소스에 존재하는 서브 리소스를 접근할 때 이를 식별하기 위한 정보를 담고 있다. #문자 뒤에 위치한다. Domain Name IP Address는 사람이 외우기 어려우므로 쉬운 의미를 부여하기 위해 Domain Name을 사용한다. IP Address 네트워크상에서 통신이 이루어..

카테고리 없음 2022.06.21

Web Hacking STAGE 2 웹 기본상식

인코딩 0과 1로 우리의 문자를 표현자 하는 것에 대한 약속 아스키와 유니코드가 있다. 통신 프로토콜 규격화된 상호작용에 적용되는 약속이다. 예를 들어 누군가에게 전화를 걸때 "여보세요" 라고 하는 것 과 같은 약속이다. 이것을 컴퓨터와 통신하는 것으로 적용한다면 좀 더엄격해지는 것이다. 통신프로토콜에는 HTTP, TCP/IP등등이 있다. HTTP 서버와 클라이언트가 데이터의 교환을 요청과 응답 형식으로 정의한 프로토콜 HTTP의 기본 매커니즘은 클라이언트가 서버에게 요청을 하면 서버가 응답을 하는것이다. 네트워크 포트 네트워크에서 서버와 클라이언트가 정보를 교환하는 장소 포트를 항구라는 의미를 가지고 있다. 서비스 포트 네트워크 포트중에 특정 서비스가 점유하고 있는 포트 포트로 데이터를 교환할 때는 전..

보안/Dreamhack 2022.06.20

모각코 코틀린<기초편>15일차

오늘은 apk파일 빌드하는 법을 배웠다. Debug vs Release AAB 파일을 만들 때 선택하는 것이다. Release 빌드는 배포용 앱을 만든다는 뜻이고 Debug 빌드는 별다른 과정 없이 개발 버전 혹은 디버그 용도로 앱을 빌드하는 것이다. 앱을 실제로 구글 플레이스토어에 배포하거나 공유할 때는 릴리즈 빌드가 좋다. 왜냐하면 앱의 용량도 줄고 코드 난독화 과정을 통해 코드를 보호할 수 있다. 출처:https://codemate.kr/project/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-APP-%EB%A9%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%ED%8B%80%EB%A6%B0-%EA%B8%B0%EC%B4%88%ED%8E%B8/15.-AP..

모각코 코틀린<기초편>14일차

오늘은 내가 쓴 텍스트를 공유하는 법에 대해 배웠다. ACTION_SEND 인텐트를 생성하기 val sendIntent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "공유할 메세지") type = "text/plain" } 이렇게 하여 공유할 메세지 부분에 다양한 콘체츠를 공유한다. Intent.createChooser()를 이용해 Intent 객체를 전달하고, startActivity로 실행한다. val shareIntent = Intent.createChooser(sendIntent, null) startActivity(shareIntent) 이러면 공유를 하고 싶을 때 내가 입력한 텍스트가 공유가 된다. 출처:..

모각코 코틀린<기초편>13일차

오늘은 activity를 전환하는 법에 대해 배웠다. 인텐트 컴포넌트 간에 작업 수행을 위해 정보를 전달하는 역할 메세지 객체라고 말할 수 있다. 인텐트를 이용한 액티비티 전환 MemoActivity 클래스를 불러와 Intent 를 생성한다. 그리고 이 intent 를 실어서 startActivity 라는 함수를 호출한다. ​ 그럼 startActivity 함수에서는 intent 에서 호출된 Activity 위치를 찾아가, 해당 Activity 를 열게 된다. ​val intent = Intent(this, MemoActivity::class.java) startActivity(intent) 액티비티 소멸 시키기 this.finish() 이 코드를 작성해주면 전에 있던 액티비티를 소멸시켜준다. 이 코드가..

모각코 코틀린<기초편>12일차

오늘은 activity를 생성하고 변경하는 법에 대해 배웠다. 그래서 변경하는 법에 대해 다루려고 한다. 에서 Activity 이름을 MainActivity 에서 MemoActivity 로 변경해 주었다. 그러면 앱을 켰을 때 MemoActivity가 나온다. 출처: https://codemate.kr/project/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-APP-%EB%A9%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%ED%8B%80%EB%A6%B0-%EA%B8%B0%EC%B4%88%ED%8E%B8/12-1.-%EB%B9%84%EB%B0%80%EB%A9%94%EB%AA%A8%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0-3-%EC%..

모각코 코틀린<기초편>11일차

오늘은 메모의 비밀번호를 체크하는 것을 만들었다. // EditText 컴포넌트를 찾아서 editText 변수에 저장한다. val editText = findViewById(R.id.아이디) // editText 에서 사용자가 입력한 텍스트를 불러와 passwordText 에 저장한다. val passwordText = editText.text.toString() EditText 컴포넌트에서 사용자가 입력한 텍스트를 가지고 올 수 있다. 이때, 주의할 점은 아래의 코드처럼 Edit Text 컴포넌트의 text를 불러올 때는 뒤에 꼭 .toString()을 붙여야 한다는 거다. 왜냐하면 EditText만의 형태를 가지고 있기 때문에 .toString()을 붙여줘야한다. 출처:https://codemate...