security_duck의 등록된 링크

키자드에 등록된 총 547개의 포스트를 확인하실 수 있습니다.

Naver Blog

A7 - Missing Function Level Access Control/ Server Side Request Forgery (SSRF) - Samsung TV -XXE

XXE(XML External Entity)를 이용하여 삼성 스마트 TV(PS50C7700) Dos 공격이다. GET 요청으로 'A' 300개를 보내어 서비스를 중단시키는 취약점이다. 이는 특정 플랫폼만이 가능한 실습이므로 간단한 설명을 했습니다. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4890 특정 삼성(PS50C7700) TV는 TCP 5600번으로 서비스 거부를 발생시킬 수 있다. https://www.exploit-db.com/exploits/27043 위의 사이트에서 소스코드를 확인을 해보면 TCP포트 5600번으로 A를 300개 보내는 것을 확인할 수 있다. 이에 대한 실습 결과인 동영상을 아래에 제공했습니다. https://www.youtube.com/watch?v=U-R2epNnUiM

Naver Blog

코로나19로 인한 사이버 공격

코로나19로 인해 자택에서 보내는 시간이 많아져, 그것을 노리는 사이버 범죄자들이 급격하게 늘어나는 것 같다. Zoom 화상회의, 피싱메일, 재난지원금문자 등.. 크게 7가지로 뉴스에서 말해주고 있다. 1. 온라인 쇼핑 2. 화상 회의 3. 원격 의로 서비스 4. 경기 부양을 위한 세금 환급 5. 온라인 학습 6. 넷플릭스 파티 7. 소셜 미디어 https://www.boannews.com/media/view.asp?idx=87656 [주말판] 코로나가 바꿔버린 온라인 생활, 보안의 눈으로 보기 코로나 19 사태로 인해 전 세계 수많은 사람들이 집안에서 꼼짝 않고 지내고 있다. 그러면서 온라인 쇼핑, 영상 회의, 원격 진료, 원격 학습에 참여하는 사람들이 기하급수적으로 늘어났다. 또한 멀리서도 같은 음악을 듣고, 같은 영화를 보는 방법들이 영리하게 고안되고 있기도 하다. www.boannews.com

Naver Blog

A7 -Missing Function Level Access Control/ XML External Entity Attack (XXE)

XXE(XML External Entity) 외부엔티티 공격 · XML 인젝션으 시도하여 XML Parser(마크업 분석/ 구조화된 정보를 어플리케이션에게 전달하는 프로세서)를 통해 페이지의 내용을 내체하는 권한을 획득하는 취약점입니다. · 공격자는 XML Parser로 서버 시스템에 접근할 수 있습니다. xxe-1.php SYSTEM 키워드를 이용하여 XML 인젝션을 하며, 시스템 내부 자원 정보를 획득합니다. HTTP 연결 요청을 버프스위트에서 가로채 'Repeater'로 보냅니다. Repeater 에서 XML 형식으로 선언된 변수 위에 XML 코드를 추가하여 강제로 외부 엔티티를 사용합니다 난이도 '하' Burp Suite 을 키고 Any bugs? 를 누른 후 HTTP 요청을 가로채봅니다. HTTP 요청을 가로채고 오른쪽 마우스 클릭 후 Send to Repeater 를 클릭해줍니다. Repeater : HTTP 요청을 재요청하고 애플리케이션 응답을 분석 해 주는 기능 입니다

Naver Blog

A8 - Cross-Site Request Forgery (CSRF)

A8 - Cross-Site Request Forgery (CSRF) 공격자에 의해 사용자가 의도하지 않은 악의적인 행위를 서버에 요청하는 취약점이다. 공격자가 입력한 악의적인 스크립트 코드에 접근하면 사용자의 웹 브라우저는 스크립트 코드에서 의도한 내용을 웹 서버에 요청한다. 웹 서버는 변조된 요청을 사용자의 정상적인 요청으로 판단하고 응답을 보낸다. XSS 와 CSRF 는 비슷해보이지만 다릅니다. 웹 브라우저를 신뢰해서 발생하는 취약점으로, 웹 사이트는 사용자가 보낸 정상적인 요청과 변조된 요청을 구별하지 못합니다. 또한, XSS는 공격 대상이 사용자이지만, CSRF는 사용자가 공격의 매개물로 공격자를 대신하여 악의적인 요청을 웹 사이트에 요청합니다. 즉, CSRF를 통해 공격자는 사용자의 권한을 도용하여 중요 기능을 실행하는 것이 가능합니다.

Naver Blog

A8 - Cross-Site Request Forgery(CSRF)/ Change Password

csrf_1.php 접속한 사용자의 비밀번호를 변경할 수 있는 페이지이다. CSRF 취약점을 이용한 인젝션을 실시하여 패스워드 변경을 다른 패스워드로 변경하는 내용이다. 다음 문제 페이지에서 폼에 다음과 같이 입력했다. New password :bug Re-type new password : bug Change button을 누르게 되면 GET 메서드로 HTTP 요청을 하기 때문에 URL 변수가 노출되는 것을 확인할 수 있다. 그 후, URL을 복사해서 메모장 같이 저장할 수 있는 곳에 저장을 해놓겠습니다. htmli_stored.php 해당 페이지로 가줍니다. 여기서는 <img> 태그를 이용하여 CSRF 를 할 것입니다. img 태그의 경우, src 속성에 그림이 아닌 주소와 보내려는 데이터를 넣게 되면 서버에게 해당 데이터에 대한 요청을 하게 되고, 해당 img 태그가 걸려 있는 페이지의 이미지를 가지고 오게 되는 원리를 사용할 것입니다. 해당 폼에 다음과 같이 입력해줍니다. <

Naver Blog

A8 - Cross-Site Request Forgery(CSRF)/ Change Secret

csrf_3.php CSRF 취약점을 이용한 인젝션을 실시하여 패스워드 힌트를 다른 힌트로 변경하는 페이지이다 해당 문제 페이지의 개발자도구(F12) 를 통하여 소스를 확인을 해보면 , type이 hidden으로 정의되어 있는 것을 확인할 수있다. 또한 login 변수가 노출되어 있고 변수 값이 bee인 것을 보아, login 변수는 사용자의 아이디의 변수라는 것을 추측할 수 있다. 버프스위트를 통해 http 요청을 가로채서 확인해보았다. POST 메서드를 이용하여 HTTP 요청하는 것을 확인할 수 있고, 또한 login 변수가 사용자아이디 값을 받는 변수라는 것을 확신할 수 있다. 또한, 폼에 입력을 안해서 빈칸으로 출력되는 secret이 폼에 대한 변수라는 것을 확인할 수 있다. xss_stored_1.php 페이지로 가서 다른 사용자의 아이디를 입력하여 비밀번호 힌트를 바꾸는 CSRF 공격을 시도한다. <img src="http://192.168.56.102/bWAPP/csrf

Naver Blog

A8 - Cross-Site Request Forgery(CSRF)/ Transfer Amount

csrf_2.php 계좌 이제 기능을 제공한다. 현재 계좌에 있는 돈은 1,000유로 인데, CSRF 취약점을 이용하여 계좌에 있는 돈을 수정해 보자 난이도 '하' 해당 페이지의 폼을 개발자 도구를 통해 소스를 확인해보았다. account 변수 - 계좌번호 , amount 변수 - 이제할 금액이 노출되어 있는 것을 확인할 수 있다. amount 변수에 마이너스 값을 넣고 해당 소스가 있는 페이지에 사용자들이 접근할 때마다 지정한 금액이 나한테 입금되게 만들면 될 것같다. 일단, GET메서드를 통해 HTTP요청을 하기 때문에 URL에 변수가 노출되어 있는 것을 확인할 수 있다. URL을 복사해두었다. xss_stored_1.php 페이지로 가서 img 태그를 이용하여 작성해보았다. <img src="http://192.168.56.102/bWAPP/csrf_2.php?account=123-45678-90&amount=-100&action=transfer" height="0" width

Naver Blog

A9 – Using Known Vulnerable Components (알려진 취약점이 있는 컴포넌트 사용)

A9 – Using Known Vulnerable Components (알려진 취약점이 있는 컴포넌트 사용) 컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈은 대부분 항상 전체 권한으로 실행된다. 이러한 취약한 컴포넌트를 악용하여 공격하는 경우 심각한 데이터 손실이 발생하거나 서버가 장악된다. 알려진 취약점이 있는 컴포넌트를 사용하는 애플리케이션은 애플리케이션 방어 체계를 손상하거나, 공격 가능한 범위를 활성화하는 등의 영향을 미친다. 알려진 취약점 확인 방법 취약한지 결정하기 위해서는 프로젝트 메일링 리스트, 취약점과 관련된 발표내용을 잘 파악하고 있어야 한다. 만일, 사용중인 컴포넌트중 취약한 부분이 있을 경우, 사용하고 있는 코드를 검토를 해야하며, 이 컴포넌트를 지금 사용하고 있는지, 영향을 미칠 수 있는지를 확인해야 한다. 예방 방법 이렇게 사용된 기능들이 보안상 안전하려면 정기적인 보안 패치가 필요하지만, 수많은 기능을 완벽하게 대응하기는 어렵다. 패치가 아직

Naver Blog

A9 – Using Known Vulnerable Components/ PHP CGI Remote Code Execution

CGI ? Common Gate Way Interface의 약어로, WWW 서버와 서버 상에서 등장하는 다른 프로그램이나 스크립트와의 인터페이스 폼을 사용한 메일의 송신이나 게임 등 HTML 에서는 불가능한 인터렉티브한 요소를 홈페이지에 받아 들여 쓸 수 있다. 간단히 말하자면, HTML만 가지고는 동적인 부분을 만들 수 없다. 정적인 HTML을 동적으로 표현하기 위해 필요한 것이 CGI 이다. 현재 문제의 페이지에서는 CVE-2012-1823취약점을 다루고 있다. https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823 CVE-2012-1823 ? PHP 5.4.12 이전 버저의 sapi/cgi/cgi_main.c에서 CGI 스크립트가 질의 문자열을 제대로 처리하지 못하여 발생한다. 명령어 라인 옵션을 질의 문자열에 포함하여 원격 명령을 실행할 수 있다. PHP는 CGI 기반으로 'mod_cgid'라는 모듈을 사용하여 동작할 때

Naver Blog

모의해킹 보고서 작성 팁

1. 삽입한 그림의 내용은 모두 설명이 될것 고객이 보고서를 봤을 때, 질문할 것이 없게 만들어진 것이 잘만들어진 것! 세세한 부분까지 작성, 결과만 보여주게 되면 고객입장에서 계속 의문을 가지게 되고 질문을 가져오게 된다. 2. 목차, 캡션, 상호참조만 적용해도 반절은 성공 chapter 3 3.1 iframe 인젝션 3.1.1 난이도 하 그림 3-1 PHP CGI 명령어 옵션 (경로 : bee@bee-box: /var/www/bWAPP$ php5-cgi -h) 3. 보고서 양식, 아이콘 등 통일성을 지키자 4. 한글 표기를 하면 가독성이 높아진다 예) "주소" 라고 해도되는데 일부러 영어로 Address 로 표기 -> 가독성이 떨어진다.

Naver Blog

Java Script - 자바스크립트 선언문

1. 자바스크립트 선언문 선언문은 자바스크립트 코드를 작성할 영역을 선언하는 것이라고 이해하면 됩니다. <script></script> //소스 1-1 <script> 자바스크립트 코드; </script> 선언문은 <head><body> 태크영역에 사용하면 되지만, 보통 <head> 영역에 많이 태그한다. 2. 자바스크립트 주석 처리 한줄 주석일 경우 : // 여러줄 주석을 사용할 경우 /* //소스 1-2 //한줄 설명 /* 여러 줄 설명글 일경우 이렇게 처리하세요 */ 3. 내부 스크립트 외부로 분리하기 자바스크립트 소스를 분리하므로서, 소스 찾기도 쉬울 뿐만 아니라 누군가가 소스를 손상시킬 염려도 없습니다. 즉, 외부로 분리하는 주된 목적은 프로젝트 관리를 원활하게 하기위함입니다. //소스 1-3 <script src="JS 파일경로"></script> 3.1 내부 스크립트 분리하기 1. 다음과 같은 코드를 따로 저장을 해줍니다. // 소스 1-4 document.write("

Naver Blog

Java Script - 변수

1. 변수란? 변수는 변하는 데이터를 저장할 수 있는 메모리 공간입니다. 변수에는 데이터가 오직 한 개만 저장됩니다. 새로운 데이터가 들어오면 기존에 있던 데이터는 메모리 공간에서 지워지게 됩니다. 변수에 저장할 수 있는 데이터 종류로는 문자형(string), 숫자형(number), 논리형(boolean), 빈(null) 데이터가 있습니다. 1.1 변수선언 변수를 선언할 떄는 다음 기본형과 같이 var 키워드를 변수명 앞에 붙입니다. 한글을 사용할 수 없으며, 영문과 숫자 그리고 일부 특수 문자( _, $ ) 만 포함할 수 있습니다. 다음은 변수선언 기본형입니다 var 변수명; 또는 var 변수명=값; 변수 box를 생성하고, box에 100이라는 값을 저장합니다. //소스 2-1 var box; box=100; 2. 변수에 저장할 수 있는 자료형 변수에 저장할 수 있는 자료형으로는 문자형(string), 숫자형(number), 논리형(boolean), 빈 데이터(Undefinde)

Naver Blog

Java Script - 객체

1 객체란 ? 자바스크립트는 객체(Object) 기반 언어입니다. 객체는 기능과 속성을 가지고 있습니다. 예를 들어, TV에는 켜다, 끄다, 음을 소거하다, 볼륨을 높이다, 볼륨을 낮추다 등의 기능이 있습니다. 이러한 기능들을 메서드(Method)라고 불립니다. 그리고 TV에는 크기, 색상 그리고 무게 등을 속성이라고 할 수 있습니다. //1.1 기본형 객체.메서드(); 객체.속성; 또는 객체.속성=값; 1. 객체.메서드(); : 객체의 메서드를 실행합니다. 2. 객체.속성; : 객체의 속성값을 가져옵니다. 3. 객체.속성=값; : 객체의 속성값을 바꿉니다. 2 객체의 종류 자바스크립트의 객체는 크게 내장 객체, 브라우저 객체 모델(BOM, Browser Object Model), 문서 객체 모델(DOM, Document Object Model)로 나눌 수 있습니다. 2.1 내장 객체 내장 객체는 자바스크립트 엔진에 내장되어 있어 필요한 경우에 생성해서 사용할 수 있습니다. 내장 객

Naver Blog

Java Script - 내장 객체

1. 내장 객체 생성하기 기본형 1-1은 내장 객체를 생성하는 기본형입니다. 객체를 생성할 때 new라는 키워드와 생성 함수를 사용합니다. //기본형 1-1 참조변수(인스턴스 이름)= new 생성 함수() 소스 1-1에서는 new 키워드와 기본 객체 생성 함수 Object()를 이용해 객체를 생성합니다.생성된 객체는 변수 tv가 참조하고 있으며, 이를 이용해 객체의 속성과 메서드를 생성합니다. 변수를 이용해 참조를 한다는 말은 앞으로 생성된 객체를 이용할 때 참조 변수를 사용하겠다는 의미입니다. //소스 1-2 new 키워와 기본 객체 생성 함수 Object()를 이용해 객체를 생성 <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <script> var tv = new Object(); tv.color = "white"; tv.price = 3000000; tv.info = function() { document.wri

Naver Blog

Java Script - 브라우저 객체 모델

1. 브라우저 객체란? 브라우저에 내장된 객체를 '브라우저 객체'라고 합니다. window는 브라우저 객체의 최상위 객체이며, window 객체에는 하위 객체가 포함되어 있습니다. 계층적 구조로 이루어져 있으며, 이를 브라우저 객체 모델(BOM,Browser Object Model) 이라고 합니다. 그림1-1은 브라우저 객체의 계층적 구조 입니다. 그림1-1 브라우저 객체의 계층적 구조 2. window 객체 window 객체는 브라우저 객체중 최상위 객체입니다. 표2-1와 같은 메서드를 가집니다. 표2-1 종류 설명 open("URL","새 창 이름","새 창 옵션") URL 페이지를 새 창으로 나타냅니다. alert(data) 경고 창을 나타내고 데이터를 보여줍니다. 방문자가 [확인] 버튼을 누르면 alert()를 사용한 다음 위치의 코드를 수행합니다. prompt("질문","답변") 질문과 답변으로 질의응답 창을 나타냅니다. confirm("질문 내용") 질문 내용으로 확인이나

Naver Blog

Java Script - 함수

1. 함수란? 한 마디로 프로그램의 코드를 저장한 공간이라고 할 수 있습니다. · 자바스크립트 코드를 저장합니다. · function 이라는 키워드를 이용하여 선언합니다. · 출력문, 제어문 등의 코드를 저장하고 데이터를 반환합니다. 2. 기본 함수 정의문 함수를 사용하여 코드를 저장한 것을 '함수 정의문'이라고 합니다. 변수를 선언 할 때 var 키워드를 사용한 것처럼 함수에서는 function 키워드를 사용해 함수를 선언합니다. 함수의 기본형은 기본형2-1과 같습니다. //기본형2-1 function 함수명() { 자바스크립트 코드; } 기본형2-2와 같이 함수명이 없는 함수를 선언하고 변수에 참조해도 됩니다. //기본형2-2 참조 변수 = function() { 자바스크립트 코드; } 기본형2-3은 함수를 호출하는 기본형입니다. //기본형2-3 1. 함수명() 2. 참조변수() 소스2-1은 정의되어 있는 함수를 호출하는 예제입니다. 함수는 바로 실행되지 않고, 메모리에 할당되어

Naver Blog

Java Script - 함수(return)

return · 함수에서 결과값을 반환할 때 사용합니다 · 함수에서 return 문이 실행되면 반복문의 break 문과 비슷하게 코드가 강제로 종료됩니다. 1. 데이터를 반환하고 강제 종료하는 return 문 기본형 1-1은 return문의 기본형입니다. //기본형 1-1 function 함수명() { 2. 자바스크립트 코드1; 3. return 데이터(값); 자바스크립트 코드2; } 1. var 변수=함수명(); 1. var 변수=함수명(); 을 통해 함수호출을 합니다. 2. 함수코드를 실행합니다. 3. 자바스크립트 코드2를 무시하고 데이터를 반환합니다. var 변수 = 반환한 데이터 소스 1-1 은 return문을 활용한 예제입니다. //소스 1-1 function sum(num1, num2) { return num1 + num2; // 2+3 } var result = sum(10,20); //1 document.write(result); 1. sum(10,20); 을 통해 함

Naver Blog

Java Script - 함수(함수 스코프 개념 이해)

1. 함수 스코프란? 스코프의 사전적 의미는 '범위'입니다. 여기에서는 변수 또는 함수의 유효 범위를 가리킵니다. 2. 전역 변수와 지역 변수의 개념과 차이 기본형 2-1은 전역 변수와 지역 변수의 기본형입니다. //기본형 2-1 var 변수명; //전역 변수 function 함수명() { var 변수명; //지역 변수 } 소스 2-1은 지역 변수와 전역 변수의 차이점을 보기위한 예제입니다. // 소스 2-1 var score =10; function myFnc() { var score = 50; //함수 스코프에서는 지역 변수 데이터를 가져옵니다. alert(score); //50 //var score = 50의 값으 가져옵니다. } myFnc(); alert(score);//10 // 2행의 scroe=10의 값을 가져옵니다. 함수 스코프에서 선언한 변수는 지역 변수이며 함수 안에서만 사용할 수 있습니다. 따라서 함수 스코프의 score 값은 50이 되고, 함수 스코프 밖에서의

Naver Blog

Java Script - 함수(객체 생성자 함수의 활용)

1. 객체 생성자 함수 내장 객체를 생성할 때는 이미 자바스크립트 엔진에 내장되어 있는 객체 생성자 함수를 사용하여 객체를 생성합니다. new 키워드를 사용해 객체를 생성하고 객체 생성자 함수에서 this 키워드를 사용해 생성한 객체에 속성과 함수를 등록합니다. 기본형 1-1 은 객체 생성자 함수를 선언하고 객체를 생성하는 기본형입니다. //기본형 1-1 function 함수명(매개변수1, 매개변수2, ...매개변수n){ //객체 생성자 함수 this.속성명 = 새 값; this.함수명 = function() { 자바스크립트 코드; } } var 참조 변수(인스턴스 네임) = new 함수명(); //객체 생성 var 참조 변수 = { 속성 : 새 값, 함수명 : function() {...}} 소스 1-1은 객체생성자 함수를 설명하기 위한 예제입니다. //소스 1-1 <!DOCTYPE html> <html lang="ko"> <head> <meta charset = "UTF-8">

Naver Blog

Java Script - 함수(자바스크립트 내장 함수)

1. 내장 함수 내장 함수란 자바스크립트 엔진에 내장된 함수를 말합니다. 내장함수는 개발자가 함수를 직접 선언하지 않아도 됩니다. 즉 자바스크립트에 이미 내장된 함수는 바로 호출할 수 있습니다. 종류 설명 encodeURI() 문자를 유니 코드값으로 인코딩합니다. (영문, 숫자, 일부 기호(; , / ? : @ & = + $) 는 제외) encodeURIComponet() 문자를 유니 코드값으로 인코딩합니다. (영문, 숫자 제외) decodeURI() 유니 코드값을 디코딩해 다시 문자합니다. decodeURIComponent() 유니 코드값을 디코딩해 다시 문자화합니다. parselnt() 문자열 데이터를 정수형 데이터로 반환합니다. parseFloat() 문자열 데이터를 실수형 데이터로 반환합니다. String() 문자형 데이터로 반환합니다. Number() 숫자형 데이터로 반환합니다. Boolean() 논리형 데이터로 반환합니다. isNaN() is Not a Number의 약자

Naver Blog

[jQuery] - 제이쿼리 기본, 제이쿼리 다운로드,jQuery 다운

1. 제이쿼리란 ? · 제이쿼리란 자바스크립트를 이용해 만든 라이브러리 언어입니다. · 라이브러리 언어란 자바스크립트로 만들어진 다양한 함수들의 집합을 가리킵니다. 2. 제이쿼리 라이브러리 연동하기 제이쿼리 연동방법에는 다운로드(Download), 네트워크 전송(CDN, Content Network) 방식이 있습니다. 2.1 다운로드 방식 제이쿼리 라이브러리를 제공하는 사이트에서 제이쿼리 라이브러리 파일을직접 내려받아 HTML에 불러오는 방식입니다. 2.2 네트워크 전송 방식 온라인에서 제공하는 제이쿼리 라이브러리 파일을 네트워크를 통해 HTML에 불러오는 방식입니다. 2.3 차이점 다운로드 방식은 컴퓨터에 라이브러리를 파일을 내려받아 놓으면, 네트워크랑 연결 없이 사용할 수 있습니다. 간단하게 테스트할 방식이면 네트워크 전송방식을 추천합니다. 3. 다운로드 방식 연동하기 (다운로드방식) 1. 해당 사이트는 제이쿼리 라이브러리를 제공해주는 사이트입니다. https://cdnjs.co

Naver Blog

2020 Kali Linux release

2020.1.28일 Kali Linux가 release 되었습니다. 확인을 해보면 지난 해까지 해오던 기본사용자가 root가 아닌것입니다. [보기 1]처럼 root/toor 의 기본정책이 사라지고, kali,kali로 로그인을 해야 됩니다. [보기1] 중점으로 바뀐점 [보기 2] kali,kali 콘솔을 열어서 확인을 해보시면, kali@kali:~$ 인것을 확인할 수 있습니다. [보기 3] kali@kali~$ 메타스플로잇을 초기화하기 위해 msfdb init을 해주면 root 권한으로 하라고 합니다. sudo msfd init 을 하면 되는 것을 확인할 수 있는데, root 권한이 사용될 때마다 sudo를 붙혀서 사용해야 합니다. [보기4] 다른 방법이라고 하면 su -를 입력하고 사용하시면 될 듯합니다. 그 다음으로는, 이미지파일을 자신이 원하는 것만 다운로드 받을 수 있게 해놓은 것 같습니다. [보기5] [보기6] 모바일 버전도 기본, Light , Rootless 원하는 버

Naver Blog

Python - 문자열 안에 작은따옴표, 큰따옴표를 포함하고 싶을 때

작은따옴표(' ), 큰따옴표(" ) 문자열에 포함시켜 출력하고 싶은 경우를 3가지로 표현해보았다. 1. 문자열내에 작은따옴표( ' )를 표현하고 싶을 경우 큰따옴표( " )로 둘러싸준다. //소스 1-1 print("Python's favorite language") 2. 문자열에 큰따옴표( " ) 포함시키는 방법이다. //소스 1-2 print('"Python is favorite language."he says.') 3. 백슬래시(\)를 사용해서 작은따옴표( ' )와 큰따옴표( " )를 문자열에 포함시키는 방법이다. 작은따옴표와 큰따옴표 앞에 백슬래시( \ )를 포함시키면 특수문자의 의미가 아니라, 문자 그자체를 의미하게된다. //소스 1-3 print("\"Python is favorite language\"he says.")

Naver Blog

Python - 여러 줄인 문자열을 변수에 대입

//예제1-1 I'd like to check out. Here it is. 예제 1-1를 두 줄로 표현하고 싶을 경우를 2가지로 해봤습니다. 1. 줄을 바꾸는 이스케이프 코드 '\n' 삽입하기. //소스 1-1 Mike = "I'd like to check out.\nHere it is." print(Mike) 2. 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용하는 방법입니다. //소스 1-2 Mike = """ I'd like to check out. Here it is. """ print(Mike) //소스 1-3 Mike = ''' I'd like to check out. Here it is. ''' print(Mike)

Naver Blog

Python - 이스케이프 코드

이스케이프 코드란 프로그래밍할 때 사요알 수 있도록 미리 정의해 둔 '문자 조합' 이다. 코드 설명 \n 문자열 안에서 줄을 바꿀 때 사용 \t 문자열 사이에 탭 간격으 줄 때 사용 \\ 문자 \ 를 그대로 표현할 때 사용 \' 작은따옴표 (' )를 그대로 표현할 때 사용 \" 큰따옴표( " )를 그대로 표현할 때 사용 \r 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동) \f 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동) \a 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다) \b 백스페이스 \000 널문자

Naver Blog

Python - 문자열 슬라이싱

문자열 슬라이싱이란, 문자만을 뽑는 것이 아니라, 원하는 문자열을 뽑을 수 있게 해준다. //예제 1-1 a = "Life is too short, You need Pyhon" print(a[0:4]) //a[0] ~ a[3] print(a[5:8]) //a[5] ~ a[7] print(a[:]) print(a[19:-7]) b = a[:5] // a[4] 까지 c = a[5:] // a[5] ~ 끝까지 print(b) print(c) 예제 1-1에서 볼 수 있듯이 슬라이싱 기법은 예를들어 a[0:4]가 있으면 배열의 첫 번째[0]부터 다섯 번째[4]까지 지정한다는 것이다. 즉, a[시작 번호: 끝 번호]를 뜻하는데 여기서 끝 번호는 포함되지 않는다. a[:5]와 같이 시작 번호를 생략할 경우 문자열의 처음부터 끝 번호까지 뽑아낸다. a[5:]와 같이 끝 번호를 생략할 경우 시작번호부터 끝 번호까지 뽑아낸다. // 예제 1-1의 결과 Life is Life is too short,

Naver Blog

Python - 포매팅 연산자 %d와 퍼센트(%)를 표현하고 싶을 때

문자열에 퍼센터(%)를 붙혀서 출력하고 싶을 경우가 생긴다. 그럴 경우 뒤에다가 "%%" 붙여준다. a = 88 print("%d" %a) print("%d%%" %a) print("%%d" %a) //오류 88 // 88 출력 88% // 퍼센트(%) 출력 //오류

Naver Blog

Python - format 함수를 사용한 포매팅

변수에다가 값을 입력하고 출력문에 퍼센트(%)를 붙혀서 변수를 대입하는 방법도 있지만, .fomat() 함수를 이용하여 대입하는 방법이 있다. //예제 1-1 number = 4 day ="three" 1. print("I eat {0} melon".format(3)) 2. print("i ate {0} apples. so i was sick for {1} days.".format(number,day)) 3. print("i ate {number} apples. so i was sick for {day} days.".format(number=5,day=3)) 1. format 함수를 통해 숫자를 바로대입하여 {0} 부분을 3으로 바뀌었다. 2. 변수에 값을 저장하고, format() 함수를 통해 숫자 값을 가진 변수로 대입하였다. 3. 변수에 값을 저장하였지만, format() 함수의 변수값을 수정 후 대입하였다. //예제 1-1의 결과 1. I eat 3 melon 2. i ate

Naver Blog

Python - 문자열 관련함수

문자열 자료형은 자체적으로 함수를 가지고 있습니다. 이들 함수르 다른 말로 문자열 내장 함수라고 합니다. 내장 함수를 사용하기 위해서는 변수뒤에 " . "을 붙이고 다음에 함수이름을 써주면 됩니다. //예제 1-1 a = "Perfect" 1. print(a.count('P')) 2. print(a.find('f')) 3. print(a.find('a')) 4. print(",".join('abcd')) 5. print(",".join(['a','b','c','d'])) 6. print(a.index('f')) 7. print(a.index('k')) //오류 count() 는 문자열의 개수를 알려주는 함수이다. find() 는 문자열에서 지정한 문자의 위치를 알려준다. 문자열에 찾는 문자열이 없을 경우 -1 을 반환한다. join() 은 각각의 문자사이에 " , " 를 삽입한다. index()는 문자열에서 지정한 문자의 위치를 알려준다. 찾는 문자가 없을 경우 오류가 발생한다. 1

Naver Blog

Python - 대 · 소문자 바꾸기(upper, lower)

upper()는 소문자를 대문자로 바꾸어주다. lower()는 대문자를 소문자로 바꾸어준다. // 예제 1-1 a = "HELLO" b = "hello" print(a.lower()) print(b.upper()) // 예제 1-1 결과 hello HELLO

Naver Blog

Python - 공백 지우기(strip())

문자열중 공백을 지우고자 할 때 사용하는 함수가 strip()이다. //예제 a = " HELLO " //양쪽에 공백이 존재합니다. print(a.rstrip()) print(a.lstrip()) print(a.strip()) rstrip() : 오른쪽의 공백을 지웁니다. lstrip() : 왼쪽의 공백을 지웁니다. strip() : 양쪽 공백을 지웁니다. //예제 결과 HELLO HELLO HELLO

Naver Blog

Python - 문자열 바꾸기(replace, split)

문자열의 위치를 바꾸기 위해 replace()를 사용합니다. //예제 1-1 a = "Hello World!" print(a.replace("World!","Guest!")) replace(바뀌게 될 문자열, 바꿀 문자열) // 예제 1-1 결과 Hello Guest! 문자열을 나눠주기 위해서 split()를 사용합니다. // 예제 1-2 1. a = "Hello World!" a.split() print(a.split()) 2. b = "a:b:c:d" print(b.split(':')) 1. a.split() 을 통해 공백을 기준으로 문자열을 나누어 리스트에 들어가게 된다. 2. b.split(':') 처럼 특정 값을 기준으로 나눌 경우 작은따옴표나 큰따옴표로 문자열로 기준을 잡고 기준대상으로 나누어 리스트에 들어가게 된다. //예제 1-2의 결과 ['Hello', 'World!'] ['a', 'b', 'c', 'd']

Naver Blog

Python - 리스트 관련함수

1.del 함수 del 함수는 파이썬이 자제적으로 가지고 있는 삭제 함수입니다. del a[x] 는 x번째 요솟값을 삭제합니다. //예제 1-1 a = [1,2,3,4,5] del a[2:] print(a) del a[2:] : a[2]~ 끝 배열까지 삭제합니다. //예제 1-1 결과 [1,2] 2. 리스트에 요소 추가(append) .append(x) : 리스트의 맨마지막에 x를 추가합니다. //예제 2-1 1. a = [1,2,3,4,5] a.append(6) print(a) 2. a.append([7,8]) print(a) 1. a.append(6) : 리스트 마지막에 6을 추가합니다. 2. a.append([5,6] : 리스트 마지막에 [5,6] 리스트를 추가합니다. // 예제 2-1 의 결과 [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, [7, 8]] 3. 리스트 정렬(sort) .sort() : 리스트의 요소를 순서대로 정렬해줍니다. // 예제 3-1

Naver Blog

Python - 튜플 자료형

튜플은 몇 가지점을 제외한 리스트와 매우 유사합니다. 다른 점은 [보기 1-1] 와 같습니다. [보기 1-1] - 리스트는 [ ] 으로 둘러싸지만 튜플은 ( )으로 둘러쌉니다. - 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없습니다. 튜플을 자세히 설명하기 위해 예제 1-1에 설명했습니다. // 예제 1-1 1. a = () 2. a1 = (1,) 3. a2 = (1,2,3) 4. a3 = 1,2,3 5. a4 = ('a','b',('ab','cd')) 에제 1-1 에서 볼 수 있듯이, a1 의 경우 요소 1개만을 가지경우 요소 뒤에 콤마( , ) 를 반드시 붙여야 합니다. a3 와 같이 괄호를 생략해도 무방합니다. 튜플의 특징 튜플의 가장 큰 특징은 바꿀 수 없다는 것입니다. 앞써 말했듯이, 리스트는 변경 및 수정 삭제가 가능했지만 튜플을 요솟값을 지우거나 변경이 불가합니다. 자신이 프로그램을 실행하는 동안 특정 값이 항상 변하지 않기를 바란다면 튜

Naver Blog

Python - 딕셔너리 자료형

딕셔너리란 리스트와 튜플처럼 순차적으로 요솟값을 찾는 것이 아닌, key 값을 통해 Value 값을 찾는 것이다. 딕셔너리는 중괄호("{}") 를 사용한다. 중괄호는 key,Value 둘러싸서 표현하며 쉼표( , ) 를 통해 구분한다. dic = { KEY , VALUE} 1. 기본 딕셔너리 형태 // 예시 1-1 a = {"kim": 'hi'} print(a["kim"]) 여기서 KEY = "kim" , VALUE = 'hi' 가 된다. key를 통해 값을 불러올 수 있다. // 예시 1-2 a = {"min" : [1,2,3]} print(a["min"]) 예시 1-2와 같이 값에 리스트 값을 넣을 수 있다. //예제 1-1, 1-2 의 결과 hi [1, 2, 3] 2. 딕셔너리 쌍 추가, 삭제 // 예제 2-1 a = {"kim": 'hi'} a["min"] = [1,2,3] a[0] = 'b' print(a) print(a["kim"]) print(a["min"]) print

Naver Blog

Python - 딕셔너리 관련 함수

1. Key 리스트 만들기(keys) // 예제 1-1 a = {'Last name':'Son' ,'First name':'Heong Min','Job':'Football Player'} print(a.keys()) a.keys() : a의 Key만을 모아서 dict_keys 객체를 돌려준다. // 예제 1-1의 결과 dict_keys(['Last name', 'First name', 'Job']) dict.keys 객체는 예제 1-2와 같이 표현할 수 있다. 하지만 고육의 append, insert, pop, remove, sort함수는 사용할 수 없다. // 예제 1-2 a = {'Last name':'Son' ,'First name':'Heong Min','Job':'Football Player'} print(a.keys()) for i in a.keys(): print(i) // 예제 1-2의 결과 dict_keys(['Last name', 'First name', 'Job'

Naver Blog

Python - 조건식 (if)

1. if문의 기본 구조 if 조건문: 수행할 문자1 else: 수행할 문자A if문의 필수조건 1. if문 조건문: 을 쓸경우 ( : ) 콜론은 필수이다. 2. 수행할 구문은 반드시 들여쓰기 해야한다. 2. x in s, x not in s in not in x in 리스트 x not in 리스트 x in 튜플 x not in 튜플 x in 문자열 x not in 문자열 //예시 2-1 print(1 in [1,2,3]) // 1이 [1,2,3] 존재하는가? 있으면 True 없으면 False print (4 in [1,2,3]) print (4 not in [1,2,3]) // 4가 [1,2,3] 에 존재하지 않는가? print (1 not in [1,2,3]) // 예시 2-1 결과 True False True False 3. 다양한 조건을 판단하는 elif if 와 else 만으로 문장을 표현하기 힘들경우 사용한다. //예제 3-1 Drink = ['apple','melon',

Naver Blog

Python - 반복문(while)

1. while문의 기본구조 반복해서 문장을 수행해야 할 경우 while문을 사용한다. //기본 구조 1-1 while 조건문: 수행할 문자1 수행할 문자2 수행할 문자3 while문은 조건문이 참인 동안에 while문 아래의 문장이 반복해서 수행한다. //예시문 1-1 coffee = 10 while True: money = int(input("돈을 넣어주세요:")) if money ==300: print("커피를 줍니다.") coffee = coffee -1 elif money > 300: print("거스름돈 %d를 주고 커피를 줍니다." %(money-300)) coffee = coffee -1 else: print("돈을 다시 돌려주고 커피를 주지 않습니다.") print("남은 커피의 양은 %d 개입니다." %coffee) if coffee == 0: print("커피가 다 떨어졌습니다.판매를 중지합니다.") break break : while 문 강제로 빠져나간다. Tr

Naver Blog

Python - 반복문(for)

1. for문의 기본구조 리스트나 튜플, 문자열의 첫 번째 요소 부터 마지막 요소까지 차례로 변수에 대입되어 수행할문자 수행한다. // 기본구조 1-1 for 변수 in 리스트(또는 튜플, 문자열): 수행할 문자1 수행할 문자2 전형적인 for문 을 예제 1-1에서 확인해볼 수 있다. //예제 1-1 a = [1,2,3,4,5,] for i in a: print(i) //예제 1-1 의 결과 1 2 3 4 5 예제 1-2은 튜플을 사용한 for문 구조이다. //예제 1-2 a = [(1,2), (3,4), (5,6)] for (first,last) in a: print(first+last) a 의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first,last) 변수에 대입된다. // 예제 1-2의 결과 3 7 11 예제 1-3은 for문의 응용 구조이다. //예제 1-3 marks = [90,25,67,45,80] number = 0 for mark in marks: numb

Naver Blog

Python - 함수

1. 파이썬 함수의 구조 def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 함수를 만드는 사람이 임의로 만들 수 있다. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다. //기본구조 1-1 def 함수이름(매개 변수): 수행할 문자1 수행할 문자2 2. 매개변수 와 인수 매개변수 : 함수에 입력으로 전달된 값을 받는 변수 인수 : 함수를 호출 할 때 전달하는 입력값 //예제 2-1 def add(a,b): //a,b는 매개변수 return a+b print(add(3,4)) //3,4는 인자 3. 입력값과 결과값에 따른 함수의 형태 함수의 결과값은 오직 return 명령어로만 돌려받을 수 있다. //예제 3-1 def say(a,b): result = a+b return result def speak(c,d): mine = c+d print(say(3,4)) print(speak(3,4)) //speak 함수는 return문이 없어서 결과

Naver Blog

Python - 사용자 입력과 출력

사용자가 입력한 값을 변수에 대입하는 방법 1. input() input 함수는 입력되는 모든 것을 문자열로 취급합니다. //예제 1-1 a = input("숫자를 입력하세요:") print(a) 2. print print문은 자료형을 출력하는 것입니다. //예제 2-1 a= 123 print(a) b = "Python" print(b) c = [1,2,3] print(c) 2.1 큰따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다. // 예제 2-2 print("life"+"is"+"too shirt") print("life" "is" "too shirt") 2.2 문자열 띄어쓰기는 콤마로 한다. // 예제 2-3 print("life","is","too short") // 예제 2-3 의 결과 life is too short 2.3 한 줄에 결과값 출력하기 //예제 2-4 for i in range(10): print(i, end=' ') // 예제 2-4 의 결과 0 1 2

Naver Blog

Python - 파일 읽고 쓰기

1. 파일 생성하기 open 함수는 기본구조 1-1와 같이 '파일 이름'과 '파일 열기 모드'를 입력값으로 받고 결과값으로 파일 객체를 돌려준다. // 기본 구조 1-1 파일 객체 = open(파일이름, 파일 열기 모드) // 예제 1-1 a = open("hello.txt", 'w') 예제 1-1을 실행하면 프로그램을 실행한 디렉터리에 새로운 파일이 하나 생성된 것을 확인할 수 있다. [표 1-1] 파일 열기 모드 설명 r 읽기 모드 - 파일을 읽기만 할 때 사용 w 쓰기 모드 - 파일에 내용을 쓸 때 사용 a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용 .close() : 열려 있는 파일 객체를 닫아주는 역할을 한다. 2. 파일을 쓰기 모드로 열어 출력값 적기 프로그램의 출력값을 파일에 저장하게 한다. //예제 2-1 a = open("hello.txt",'w') for i in range(1,11): data = "%d번째 줄입니다.\n"%i a.write(da

Naver Blog

Python - 클래스(class)

1. 클래스(class)와 객체(object) 클래스란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 도면을 말한다. 객체란 클래스로 만든 피조물을 말한다. 클래스로 만든 객체는 각각의 고유한 성격을 가진다. // 예제 1-1 a = Cookie() b = Cookie() 여기서 Cookie() 결과값을 돌려받은 a,b가 객체이다. 1.2 클래스 구조만들기 // 예제 1-2 class FourCal: pass a = FourCal: 처럼 객체를 만들 수 있게 했다. 일단은 아무 기능이없다. 1.3 객체에 숫자 지정할 수 있게 만들기 사칙연산을 하기 위해 숫자를 알려줘야 한다. 여기 알아야 할점은, 클래스안에 구현된 함수는 다른 말로 메서드(Method)라고 부른다. 메서드의 첫 번째 매개 변수 self 를 명시적으로 구현하는 것은 파이썬만의 독특한 특징이다. // 예제 1-3 a.setdata(4,2) 연산을 수행할 (4,2)를 지정해줬다. // 예제 1-4 def setdata(s

Naver Blog

Python - 모듈

모듈 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일입니다. 여기서 모듈은 다른사람의 파일을 사용할 수도 있고, 내가 만들어서 사용할 수도 있습니다. 1. 모듈 만들기 // 예제 1-1 #hello.py def add(a,b): return a+b def sub(a,b): return a-b 필자는 add(a,b) 와 sub(a,b) 함수만 있는 hello.py를 C:\Python 위치에 저장했습니다. 파일을 불러오기 위해서 , Virtual Studio Code의 터미널 창에 hello.py 파일의 위치로 가기위해 cd C:\Python을 해줍니다. PS C:\Users\USER> cd /Python PS C:\Python> ls 디렉터리: C:\Python Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020-04-29 오후 1:21 71 hello.py -a---- 2020-04-29 오후 1:1

Naver Blog

Python - 패키지(Package)

1. 패키지란 무엇인가 패키지(Package)는 도트(.) 를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해줍니다. 예를들어 A.B 가 있다고 가정을 하면 A는 패키지이름이 되고, B는 A패키지의 모듈이 됩니다. 여러사람이 공동작업이나 유지보수 등 여러면에서 유리할 수 있습니다. 또한 패키지 구조로 모듈을 만들면 다른 모듈과 이름이 겹치더라도 안전하게 사용할 수 있습니다. 2. 패키지 만들기 패키지를 만들기 위해 서버 디렉터리를 만들어줍니다. C:\Python\__init__.py C:\Python\game\sound\__init__.py C:\Python\game\sound\echo.py C:\Python\game\graphic\__init.py C:\Python\game\graphic\render.py #echo.py def echo_test(): print("echo") #render.py def render_test(): print("render") 일

Naver Blog

Python - 내장함수, 외장함수

내장함수와 외장함수의 정보는 너무 많아 링크를 걸어놨습니다. https://docs.python.org/ko/3/library/functions.html 내장 함수 — Python 3.8.2 문서 내장 함수 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형이 내장되어 있습니다. 여기에서 알파벳 순으로 나열합니다. 내장 함수 abs() delattr() hash() memoryview() set() all() dict() help() min() setattr() any() dir() hex() next() slice() ascii() divmod() id() object() sorted() bin() enumerate() input() oct() staticmethod() bool() eval() int() open(... docs.python.org https://wikidocs.net/32 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net https

Naver Blog

Python - 예외처리(try,except)

파이썬으로 코딩을 하다보면 수 없이 많은 오류가 발생한다. 하지만 이를 무시하고 사용하고 싶을 때가 생긴다. 예를들어, 포트스캐너를 제작할 때 "포트가 닫혀 있다"는 것을 출력하고 싶지만 오류가 발생하여 출력이 발생이 생기지 않을 때가 있다. 이럴 때 try,except를 사용하여 오류메시지를 다른 메시지로 대체하거나, 무시할 수 있다. 1. 코딩을 하다보면 여러가지 오류메시지를 확인할 수 있지만 그중 대표적인 3가지를 확인해보았다. 첫번째는 파일이 없을때 생기는 오류메시지 "FileNotFoundError" 이다. // 예제 1-1 f = open("없는 파일", 'r') 예외가 발생했습니다. FileNotFoundError [Errno 2] No such file or directory: '없는 파일' File "C:\Python\PortScanner.py", line 1, in <module> f = open("없는 파일", 'r') 두 번째는 ZeroDivisionError

Naver Blog

[백준-python] 1157번 : 단어공부

문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. Alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" stack =0 ArrayNum = [] Guest = list(input().upper()) Guest.sort() for i in range(65,91): ArrayNum.append(Guest.count(chr(i))) maxNum = max(ArrayNum) for n in range(0,26): if maxNum == ArrayNum[n]: stack = stack + 1 if st

Naver Blog

[백준-python] 1929번 : 소수 구하기

문제 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. Number = list(map(int,input().split())) #입력값 stack = 0 for i in range(Number[0],Number[1]+1): for n in range(1,i+1): if i%n == 0: stack = stack + 1 if stack == 2: print(i) stack = 0 else : stack = 0 위 문제는 1부터 k까지 다 나눠봐도 되지만, 시간을 줄이기 위해 k의 제곱근까지 확인하면 된다. 2부터 k의 제곱근까지 확인한다. 만약 나누어떨어진다면 그 숫자는 소수가 아니다. 나누어 떨어진다는 것은 다른 약수를 가진다는 뜻. //수정 후 im

Naver Blog

[백준-python] 4948번 : 베르트랑 공준

문제 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다. 예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23) n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하며, 한 줄로 이루어져 있다. (n ≤ 123456) 입력의 마지막에는 0이 주어진다. 출력 각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다. import math def isPrime(num): if num == 1: return False n = int(

Naver Blog

[백준-python] 2798번 : 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오. 입력 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘

Naver Blog

[백준-python] 2231번 : 분해합

문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. N = int(input()) print_num = 0 for i in range(1, N+1): div_num = list(map(int, str(i))) sum_num = i + sum(div_num) if(sum_num == N): print_num = i break

Naver Blog

Kali Linux - Virus Total

Kali Linux에서 virustotal 기능을 사용해봤습니다. virustotal 이란? 무료로 파일 검사를 제공하는 웹사이트입니다. 보통 악성코드를 가지고 있는 파일들을 검사하여 이 파일이 악성파일인지 ,아닌지를 많은 백신들이 검사를 합니다. 1. msf-virustotal 을 치시면 다음과 같이 실행이되고 API key를 얻게 됩니다. [보기 1-1] 2. virustotal를 효과적으로 사용하기 위해 옵션 -h(help)를 사용하여 확인을 해보면 [보기 2-1] 을 확인할 수 있습니다. [보기 2-1] 3. 필자는 외계인 책에 있던 실습파일을 사용하여 사용해봤습니다. msf-virustotal -f <업로드할 파일> [보기 3-1] 4. 72개의 백신에서 54개의 백신이 악성코드를 탐지한 것을 확인할 수 있습니다. [보기 4-1]

Naver Blog

[백준-python] 7568번 : 덩치

문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x,y), (p,q)라고 할 때 x>p 그리고 y>q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56,177), (45,165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55,173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다. N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩치의 사람이 k명이라면 그

Naver Blog

[백준-python] 1436번 : 영화감독 숌

문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다. 따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서

Naver Blog

[백준-python] 2750번 : 수 정렬하기

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 5 5 2 3 4 1 예제 출력 1 1 2 3 4 5 number = int(input()) number_list=[] for i in range(number): cnt = int(input()) number_list.append(cnt) number_list.sort() for i in range(number): print(number_list[i]) number = int(input()) number_list=[] for i in range(number): number_list.append(int(input())

Naver Blog

[백준-python] 2751번 : 수 정렬하기 2

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 5 5 4 3 2 1 예제 출력 1 1 2 3 4 5 // 수정 전 number = int(input()) number_list=[] for i in range(number): number_list.append(abs(int(input())) number_list.sort() for i in range(number): print(number_list[i]) 해당 문제를 맞추기 전에 단순히 input과 output으로 풀 수 있을 줄 알았다. 디버깅했을 때는 알맞은 출력을 값을 출력하는 것을 확인할 수

Naver Blog

[Security Word] - 백도어(BackDoor)

백도어 ? · backdoor = 뒷 문 · 정상적인 인증과정을 거치지 않고 운영체제나 프로그램에 접근할 수 있게 해줍니다. · 해킹을 하고 다음에 침입하기 위한 비밀통로라고도 합니다. 개발자와 공격자 백도어가 무조건 악의적인 의도라고도 볼 수는 없습니다. 예를들어 개발자들이 이불러 백도어를 만들어 놓기도 합니다. -> 바로 개발 과정에서 테스트과정 및 인증과정에서의 시간을 단축하기 위함입니다. 이렇게 개발자들이 만들어 놓은 백도어는 개발을 완료하고 나서 백도어를 삭제를 해야 되지만, 깜빡해서 삭제를 안하거나, 결함이 생겨 삭제가 안 될수도, 또는 유지보수를 위해 남겨놓기도 합니다. 이는 사용자들에게는 치명적인취약점이 될 수 있겠지만, 공격자에게는 이보다 더 좋은 공격방법이 있을 수 없습니다. 개발자가 보안을 강화, 권한제한 등을 해도 이를 다 무시하고 백도어를 통해 침입할 수 있기 때문입니다. 백도어가 치명적인 이유로는 로그를 남기지 않아 들킬 위험도 적고, 백도어를 통해 침입한

Naver Blog

[백준-python] 2747번 : 피보나치 수2

문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 90보다 작거나 같은 자연수이다. 출력 첫째 줄에 n번째 피보나치 수를 출력한다. 예제 입력 1 10 예제 출력 1 55 N = int(input()) result =[] for F in range(N+1): if F == 0: result.append(0) elif F == 1: result.append(1) elif F >= 2 : result.append(res

Naver Blog

[백준-python] 1427번 : 소트인사이드

문제 배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 입력 첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다. 예제 입력 1 2143 예제 출력 1 4321 N = list(map(int,input())) N.sort() N.reverse() for i in N: print(i, end= '')

Naver Blog

[백준-python] 1181번 : 단어 정렬

문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 예제 입력 1 13 but i wont hesitate no more no more it cannot wait im yours 예제 출력 1 i im it no but more wait wont yours cannot hesitate N = int(input()) cnt_list = [] result_list = [] for i in range (N) : cnt_list.append(input()) cnt_list =

Naver Blog

[백준-python] 10814번 : 나이순 정렬

문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 출력 첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다. 예제 입력 1 3 21 Junkyu 21 Dohyun 20 Sunyoung 예제 출력 1 20 Sunyoung 21 Junkyu 21 Dohyun n = int(input()) cnt =

Naver Blog

[백준-python] 15649번 : N과 M(1)

문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 예제 입력 3 4 4 예제 출력 3 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2

Naver Blog

[백준-python] 15650번 : N과 M(2)

문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 고른 수열은 오름차순이어야 한다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 2 1 3 1 4 2 3 2 4 3 4 예제 입력 3 4 4 예제 출력 3 1 2 3 4 import itertools N,M = input().split() number = [] for i in range(1, int(N)+1): number.append(i) p = itertools.combinations(number,in

Naver Blog

[백준-python] 15651번 : N과 M(3)

문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 3 2 3 3 3 4 4 1 4 2 4 3 4 4 예제 입력 3 3 3 예제 출력 3 1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 2 2 1 3 2 2 1 2 2 2 2 2 3 2 3 1 2 3 2 2 3 3

Naver Blog

[백준-python] 15652번 : N과 M(4)

문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4 예제 입력 3 3 3 예제 출력 3 1 1 1 1 1 2 1 1 3 1 2 2 1 2 3 1 3 3 2 2 2 2 2 3 2 3

Naver Blog

Python - for와 딕셔너리

앞에서 딕셔너리를 공부했을 때 딕셔너리는 키-값 쌍을 저장하는 구조로서 데이터를 입력한 순서대로 저장하지 않는 것을 알수 있었습니다.. for 구문에 리스트와 튜플을 사용하면 원소 하나씩 변수에 바인등 되는 것을 확인할 수 있습니다. cnt = ["hello", "world", "blog"] for cnt_word in cnt : print(cnt_word) hello world blog 그렇다면, 딕셔너리는 한 원소에 키와 값을 두가지를 가지고 있기 때문에 어떻게 불러올지가 관건이겠습니다. 한 원소에 키와 값이 존재하기 때문에, 입력 받은 변수를 두개를 적으면 되겠습니다. 그리고 딕셔너리 이름을 적은 당므 .items()를 붙여야 합니다. cnt = {"hello":10, "world":20, "blog":30} for cnt_list, cnt_memo in cnt.items(): print(cnt_list,cnt_memo) hello 10 world 20 blog 30 이를 응용

Naver Blog

Python - 시간 모듈 time

개발이나 , 보안 프로그래밍을 하면서 시간 데이터를 사용할 일이 종종 있을 거라 생각이들어서 글을 적었다. time 모듈에서 사용할 수 있는 함수를 확인해보았다. print(dir(time)) ['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime','localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns','process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns','time', 'time_ns', 'timezon

Naver Blog

Python - OS 모듈

운영체제에서 제공되는 여러 기능을 파이썬에서 수행할 수 있게 해주는 모듈이 os모듈입니다. 예를들어, 파이썬을 통해 디렉터리 및 파일들을 읽거나, 생성, 리스트 확인 등 다양한 기능들을 제공합니다. os 모듈에서 사용할 수 있는 함수를 확인해보겠습니다. import os print(dir(os)) ['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED','O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO','P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_

Naver Blog

Python - COM(Component Object Model) 객체

참고 https://m.blog.naver.com/PostView.nhn?blogId=new27kr&logNo=221020428184&proxyReferer=https:%2F%2Fwww.google.com%2F https://wikidocs.net/2888 COM(Component Object Model) 객체를 사용하여 프로그램을 개발하는 모델을 의미합니다. 많은 API 들이 존재하겠지만 이 API들이 파이썬이 아닌 다른 언어로 구현되어 있다면 파이썬으로 구현할 수가 없을 것입니다. 그러나 COM을 이용하므로서 다른언어로 개발된 객체도 파이썬으로 사용할 수 있습니다. win32com.client win32com 모듈은 파이썬에서 윈도우 프로그램을 컨트롤 가능하게 해주는 모듈입니다. 다른 프로그래밍 언어로 작성된 것을 파이썬으로 이용하기 위해 COM 객체를 사용해야 합니다. 그래서 COM 객체를 생성하려면 win32com.client라는 모듈을 사용합니다. 그 중 Dispatch 메

Naver Blog

Python - 파이썬 크롤링

참고 https://blockdmask.tistory.com/385 파이썬에는 html을 파싱을 하기 위한 모듈 bs4 에 BeautifulSoup 이 존재합니다. bs4 모듈을 다운 안받았다면 아래의 명령어로 다운받으셔야 합니다 pip install bs4 어떤 데이터들을 크롤링 할 것인가 ? 이슈내용들을 간략하게 보여주는 사진의 빨간 박스 부분을 크롤링해 볼 것입니다. 우선 찾기 전에 제가 찾고자 하는 목적지를 찾아야 되는것이 순서중의 첫 번째입니다. 사진의 빨간 부분의 목적지를 찾기위해 관리자도구(F12)를 하고, 아래 사진의 마우스 클릭 표시와 비슷한 도구를 클릭한 후 원하는 목적지에 커서를 가져다 둡니다. 그러면 아래와 같이 내가 원하는 타겟이 어떤 태그를 사용하고 있는지를 알 수 있습니다. 태그를 통해 소스를 작성하면 아래와 같습니다. import requests from bs4 import BeautifulSoup requests, bs4,BeauitfulSoup을 im

Naver Blog

Python - 간단한 포트스캐너 제작

참고 https://limjunyoung.tistory.com/29 https://babysunmoon.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-ftp-%EC%9C%88%EB%8F%84%EC%9A%B0-ftp-%EC%84%A4%EC%A0%95 실습환경 Python 3.7.3 스캔할 포트 번호 범위를 range를 사용하여 20번부터 30번까지 지정해줬습니다. 그리고 connect(IP주소,포트번호)를 지정해줬습니다. ip 주소는 반드시 로컬로 해야합니다. import socket for port in range(20, 30): try: s = socket.socket() print("[+] Attempting to connect to 127.0.0.1 : " +str(port)) s.connect(('127.0.0.1',port)) banner = s.recv(1024) if banner: print("[+] Port " + str(port)

Naver Blog

Python - pefile

Download https://github.com/erocarrera/pefile import pefile pe = pefile.PE('exe파일, DLL, object 코드 등 ') print(pe.dump_info()) pefile을 import 한 후, exe파일 또는 DLL , object 코드 FON 폰트파일등을 선언해줍니다. pe.dump_info() 를 통해 선언한 파일을 덤프해서 출력합니다. ----------DOS_HEADER---------- [IMAGE_DOS_HEADER] 0x0 0x0 e_magic: 0x5A4D 0x2 0x2 e_cblp: 0x90 0x4 0x4 e_cp: 0x3 0x6 0x6 e_crlc: 0x0 0x8 0x8 e_cparhdr: 0x4 ----------NT_HEADERS---------- [IMAGE_NT_HEADERS] 0xF0 0x0 Signature: 0x4550 ----------FILE_HEADER---------- [IMAGE

Naver Blog

VMWARE WORKSTATION PRO 15.5 설치하는 방법, 설치법

가상화 프로그램 중 유명한 Vmware와 Virtualbox가 존재한다. 그 중 오늘은 VMWARE WORKSTATION PRO 15.5 버전의 설치하는 방법을 알아볼 것이다. 유료버전인 Vmware Workstation pro는 스냅샷, 복제, 가상머신 공유 등의 기능을 제공하므로 많은 유저들이 이용한다. 유료이지만 키값이 구글검색을 하면 검색이 되니 참고하도록 합니다. 1. Vmware 홈페이지 접속 https://www.vmware.com/kr/products/workstation-pro/workstation-pro-evaluation.html VMware Workstation Pro 다운로드 | KR 대한민국 커뮤니티 스토어 로그인 Menu VMware Workstation Pro 사용해 보기 VMware Workstation Pro 사용해 보기 VMware Workstation 15.5 Pro VMware Workstation Pro 는 단일 Linux 또는 Windows

Naver Blog

[백준-python] 11047번 : 동전 0

문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 예제 입력 1 10 4200 1 5 10 50 100 500 1000 5000 10000 50000 예제 출력 1 6 예제 입력 2 10 4790 1 5 10 50 100 500 1000 5000 10000 50000 예제 출력 2 12 N, M = input().split() money = [] number = 0 total = 0 for i

Naver Blog

텔레그램이 왜 인기가 많아졌는가 ?

참고 http://news.bizwatch.co.kr/article/mobile/2014/10/02/0017 http://www.inews24.com/view/945086 https://www.boannews.com/media/view.asp?idx=87177 2014년 카카오톡 검열에 대한 논란이 많이 있었다고 합니다. 이 사건은 경찰이 노동당 부대표를 수사하면서 카톡 대화록을 검열했다는 소식이 전해졌습니다. 이 때문에 사정 기관이 개인의 카톡을 쉽게 들여다 볼 수 있는 것 아니냐는 우려가 나오는데요. 지난번 세월호 참사 때에도 수사 기관이 당시 사고 상황을 재구성하기 위해 승무원들의 카톡 대화 내용을 가져갔는데요. 수사 기관이 요청하면 업체 입장에선 협조할 수 밖에 없습니다. 다만 사법 기관인 법원의 영장을 들이 밀어야 가능한데요. 이는 다음카카오 뿐만 아니라 SK컴즈의 '네이트온'이나 네이버의 '라인' 등 다른 메신저 업체들도 마찬가지 입니다. 2016년에는 일본 유명배우가 불

Naver Blog

Kali Linux - 한글 깨짐 해결하기

설치환경 kali 2020.1b *입력해야 할 명령어 ~$sudo apt-get update ~$sudo apt-get install fcitx-hangul ~$sudo apt-get install fcitx-lib* ~$sudo apt-get install fonts-nanum* sudo init 6 1. 터미널 창을 연다(Ctrt+Alt+t) 2. sudo ~$apt-get update 3. sudo apt-get install fcitx-hangul 설치를 진행할 것인지 [y/n] 이 뜨면 y 4.~$sudo apt-get install fcitx-lib* 라이브러리 설치 5. sudo apt-get install fonts-nanum* 나눔 폰트 설치 6. 입력기 검색 후 클릭 7. '확인' 8. 예(y) 9. fcitx 사용 클릭 후 확인 10. '확인' 11. fcitx 검색 후 fcitx 설정 클릭 12.Hangul 설정 확인 후 '+' 버튼 클릭 13. 키보드 영어로

Naver Blog

공부 계획

1. 프로그래밍 언어 : Python, C/C++, Java Python : 많은 해킹 도구들이 Python이 사용되고 있다. 기본적인 사용법, 문법을 익힌 후, ctypes, pydbg 모듈 공부, 및 Win32 API 다뤄보기, MSDN에서 제공하는 문법 참고 하면서 공부할 예정 전역 훅을 설정하여, 사용자 키보드 입력을 콘솔에 출력하는 프로그램 만들어 볼 예정 C/C++ : 어셈블리어, 운영프로그램이 C/C++로 되어 있다. 2. 웹 해킹 : HTML, JS, PHP 언어 공부 언어 공부 후 OWASP TOP10, 행안부 시큐어코딩 가이드라인 참고하면서 공부할 예정 3. 네트워크 해킹 : Socket 프로그래밍(python), OSI 7계층 4. 시스템 해킹 : 컴퓨터 구조 운영체제 시스템 해킹 pwable.kr 를 통한 학습 그 후, BOF, Fuzzing, 메모리 해킹 5, CTF ( 열리는 대로 참가 해보면서 경험 쌓을 것)

Naver Blog

운영체제,API,SDK

참고 https://blog.naver.com/tipsware/220918842965 운영체제(Operating Sytem, O/S) - 각 장치들을 제어(사용) 할 수 있도록 도와주고, 장치의 한계치를 관리하고 보호하는 소프트웨어를 운영체제라고 말한다. 응용 프로그램과 API - 개발자들이 해당 운영체제에서 동작하게 만든 프로그램을 응용프로그램이라고 한다. - 운영체제가 개발자들이 응용프로그램을 만들 수 있도록 제공하는 함수의 집합체를 API라고 한다. SDK - 응용프로그램을 개발하기 위한 환경을 SDK 라고 한다. 흔히, Visual Stdio 와 같은 개발의 통합환경을 말할 수 있지만, Visiual Studio는 유지보수, 사용자에게 편리하게 배포하는 기능 등을 포함하고 있기 때문에 SDK보다 더 넓은 의미를 지닌다.

Naver Blog

Windows 데스크톱 응용프로그램(Win32)

참고 https://blog.naver.com/tipsware/221207948862 응용프로그램이란 ? Windows 운영체제에서 실행되는 전통적인 Window 기반의 프로그램을 'Windows 데스크톱 응용프로그램' 이라고 한다. 흔히 우리가 아는 '메모장' , '그림판' , '탐색기' 같은 프로그램을 말한다. 이러한 프로그램들은 Win32 계열의 API 함수를 사용했기 때문에 'Win32 API 응용 프로그램' 또는 Win32 프로그램'이라고도 불린다. 응용 프로그램은 어떻게 만드는가 ? Windows 운영체제가 C언어를 기반으로 만들어졌기 때문에 C언어와 운영체제가 제공하는 API 함수를 가지고 응용 프로그램을 개발하는 것이 기본이다.

Naver Blog

Windows 운영체제의 핸들(Handle)이란

참고 https://blog.naver.com/tipsware/221065382244 Windows 운영체제는 운영체제가 제공하는 자원 즉, 커널 객체에 대해서 응용프로그램이 포인터를 접근 못하도록 되어 있다. 하지만 간접적으로 접근할 수 있도록 포인터는 아니지만 이와 유사한 '핸들'을 제공한다. 리소스 - 운영체제에 의해서 관리되는 장치나 해당 장치를 사용하기 위해 필요한 정보들을 운영체제의 리소스라고 부른다. 리소스는 장치를 사용할 수 있게 도와주는 장치에 설정되어 있는 상태 값을 의미하는 경우가 많다. 핸들(Handle) - 응용프로그램이 포인터를 사용하여 운영체제의 리소스에 직접 접근하게 되면, 나쁜목적을 가진 프로그램에게 정보를 빼앗기거나 운영체제가 동작이 불가능한 상태가 될수 도 있다. 그래서 사용자 공간에서 실행되는 응용 프로그램은 포인터를 사용하여 운영체제 수행부에 접근이 불가능하다. 그래서 이러한 문제점들로 부터 관리하기 위해 포인터 대신 핸들(Handle) 을 사용

Naver Blog

프로그램 구별하는 ID인 HINSTANCE

참고 https://blog.naver.com/tipsware/221065845049 프로그램에 포함된 각종 리소스에서 비트맵, 아이콘 같은 정보를 사용하려고 하면 HISATNCE 값이 반드시 필요하다. 1. HISTANCE - HISTANCE = H(Handle) + Instance - instance handle을 저장할 때 사용한다. - Instance Handle 은 윈도우즈 운영체제에서 실행되는 프로그램들을 구별하기 위한 ID - 값은 정수이며 ,프로그램을 구별하기 위한 값이기 때문에 같은 프로그램을 실행할 경우 같은 값을 가지게 된다. 2. Process ID - 디스크에 저장된 프로그램(실행파일)을 실행시키면 운영체제는 CPU가 사용할 수 있도록 메모리에 재구성하게 된다. - 메모리에 실행 가능한 상태로 재배열된 실행코드를 '프로세스(Process)라고 한다. 그리고 이것을 구별하기 위한 값이 Process ID이다. 3. Process ID와 Instance Handl

Naver Blog

Windows 응용프로그램 Event 객체

참고 https://blog.naver.com/tipsware/221208853645 1. 동기화 - A 값을 구한 사람이 다음 작업을 위해 B 값을 구하는 작업이 완료되기를 기다려주는 행위가 '동기화'이다 - 만약 하나의 처리에서 실행이 된다며 동기화를 할 필요가 없다. 2. Event 객체 - 두 개 이상의 스레드가 협력해서 작업을 하는 경우에는 상황에 따라 동기화가 필요하기 때문에 동기화를 처리하는 기술을 사용해야 한다. 3. 프로세스(Process) - 디스크에 있는 프로그램을 읽어와서 CPU가 사용할 수 있도록 재구성한 메모리를 '프로세스' 라고 한다. - 컴퓨터에서 실행 중인 프로그램을 '프로세스' 라고도 한다. - 작업을 진행하기 위한 명령어 목록을 가지고 있는 메모리를 의미하는 용어이다. 4. 스레드(Thread) - '프로그램'이 실행되어 메모리에 재배치된 것을 '프로세스' 라고 한다. - 작업을 진행하기 위한 명령어 목록에서 실행 흐름에 따라 하나씩 명령어를 수행하

Naver Blog

Window Class 란

참고 https://blog.naver.com/tipsware/221004018862 Window Class - Windows 운영체제에서 Window를 관리하는 기본 개념으로 사용된다. - Windows 운영체제는 멀티태스킹을 지원하기 때문에 동시에 여러 개의 프로그램을 실행할 수 있다. - 여러 개의 프로그램에서 '서로 다른 프로그램'을 뜻하기도 하지만, '같은 프로그램' 으로도 실행될 수도 있다는 뜻이다. - 예를 들어, 위 사진처럼 'Window 탐색기' 프로그램은 파일을 복사 이동하기 위해 여러개를 동시에 실행해서 사용하기 한다. - 동일한 프로그램이 여러 개 실행해서 사용하는 경우 중복된 데이터가 많아 줄여야 한다. - 동일 한 프로그램이 여러개 실행된 된 경우 '명령어 코드'는 완전한 동일한 형태이기 때문에 줄일 수 있는 대상이다. - Window 운영체제는 중복의 단위를 프로그램이 아닌 Window로 줄여서 중복을 해결하는 방법이 있다. - Window 운영체제는 Wi

Naver Blog

5.13 C언어 공부

공부 계획을 실천하기 위해 우선적으로 C언어를 다시 복습했다. C언어를 공부했던게 3년전이라서 ,, 다시 공부할려고 하니 막막했다. 그래도 자료형, 배열, 연산자 등 익숙해서 쉽게 넘어 갈 수 있었지만, 그때도 그랬지만 포인트, 주소 쪽에서 많은 어려움이 있었다. 그리고 오랜만에 케이쉴드 주니어 3기의 과정을 블로그에 포스팅 해 볼 생각을 가지게 되었다. 공부하는 시간을 제외한 쉬는시간에 포스팅을 해봐야겠다고 다짐을 했다.

Naver Blog

[C/C++] scanf, scanf_s, scanf를 사용하는 방법, sdl 정책, scanf 오류 해결방법

C언어를 공부하거나, C언어를 통해 개발을 하는 도중에 scanf 함수를 많이 사용할 것이다. 그런데 scanf 함수를 사용하게 되면 [보기 1-1] 처럼 오류가 발생하는 것을 확인해 본적이 있을 것이다. 오류메시지를 간략하게 해석해보면 scanf는 안전하지 않다라고 말하고 있으며, _CRT_SECURE_NO_WARNINGS 사용하라고 적혀있다. 이는 SDL 정책으로 인하여 발생한 것이다. scanf 함수가 위험한 함수는 아니지만 개발자들이 메모리를 다룰 때 부주의하게 다루거나 초보자들이 메모리를 잘못사용하여 버그가 되는 것을 막을려고 만든 것이 scanf_s 이다 숙련된 개발자라면 scanf함수를 사용하는 것이 더 좋다. 왜냐하면, scanf_s 를 사용하게 되면 내부적으로 더 많이 검사하므로 속도 저하가 일어날 수 있기 때문이다. 그렇다면 위에서 말한 것처럼 scanf함수를 사용한채로 사용하는 방법을 알아보았다. 1. 디버그(D) -> (프로젝트명)속성 클릭 2. C/C++ ->

Naver Blog

[C/C++] void main(), int main(), return 0

4~5년전에 C/C++ 에서 int main(), void main(), main(void)등은 땔래야 땔 수없는 관계이다. 하지만, 교육을 들으면서 void가 무엇인지, 왜 int main(), void main()등을 명확히 설명해주지는 않았다. 다른 곳에서도 명확히 설명해주는 곳은 없을 것이다. 그래서 이 부분에 대해 알아봤다. C언어의 표준안으로 더 이상 void main()은 점점 사라진다 void main과 int main에서의 main이 반환하는 값은 해당 프로그램의 종료 상태를 의미하는 값으로 사용되기 때문에 종료 상태가 없다는 의미의 void main의 형식은 사실 잘못된 표현이다. 하지만, 실제로 void main를 사용하여 소스를 작성해보면 정상적으로 허용이 되는 것을 확인할 수 있다. 왜냐하면 개발자들이 main에서 반환 값을 실제로 활용하지를 않아 return문을 사용하는 것은 불필요한 행동이라고 판단하여, void main를 제공한 것이다. 많은 컴파일러 회

Naver Blog

[C/C++] 메모리 단위, 64비트,32비트란?

여기서 다룰 내용은 C/C++ 뿐만 아니라, 프로그래밍 전체적인 부분에서 중요한 부분이라서 공부했다. Windows 32bit 와 64bit 차이가 궁금해하시는 분들이 많을 것이다. 차이점을 크게 본다면 연산처리 속도의 차이를 말할 수 있다. 즉, CPU에서 정보를 처리되는 방법을 뜻한다. 컴퓨터는 메모리에 데이터를 저장할 때 사용하는 최소 단위는 비트(bit)이다. 그리고 컴퓨터의 기억 장치는 모든 신호를 2진수로 변환 저장한다. 그래서 만약 30 과 50을 연산을 하게된다면 , 1비트에 저장 가능한 값이 아니므로 2진수로 변환이되어 0001 1110 과 0011 0010 으로 변경하고 값들을 비트단위로 연산해야 한다. 이렇게 일일이 변경하여 연산하는 불편함때문에 바이트(Byte)단위로 동작한다. 1byte는 8bit로 구성이 되어있다.2byte 같은경우는 16bit로 구성되어 있고, 3byte는 24bit로 구성되어 있다. 1byte가 저장한 가능한 값의 범위 : 0 ~ 255

Naver Blog

[일기] 20200515 - C언어 공부, &quot;실무자가 말하는 모의해킹' 책 리뷰예정

오늘은 int main과 void main 등 main에대해 알아봤다. 3~4년전 C를 공부할 때는 아무렇지 않게 그냥 사용하면 되겠구나...이런 마인드였지만,, 지금은 다르다..하나하나 다 이해를 해야 공부를 하면서 막힘없이 할수 있을거라 생각이 들었다. 그리고 머리를 아프게 했던 것이 메모리 부분이였다. 케이쉴드 주니어를 하면서 FTZ를 풀었었는데, 그때는 메모리에 대해 얕게 아는 상태에서 문제를 풀어나갔었다. 하지만 오늘 공부한 내용들을 보니, 그때 공부했던 내용들이 하나하나씩 문제가 이해를 할수 있었다. 그리고 한번읽어보고 싶었던 책이 도착해서 쉬는시간마다 읽어봤다. 기술적으로 작성된 책이 아니라, 진로에 대한 고민, 실제 실무자가 어떤 일을 하는지 등에 대한 정보를 얻고자 이 책을 샀다. 사실 2주 동안 책을 많이 사긴했는데 이 책을 포함한 그외 책들에 대한 리뷰또한 포스팅 해봐야겠다.

Naver Blog

[C/C++] 포인터 변수와 주소

포인터 변수는 자료형을 선언하지 않아도 무조건 크기가 4Byte이다. '포인터' : 자신이 사용하고 싶은 메모리의 '주소'를 저장하고 있는 메모리가 포인터이다. short cnt; /* short형 변수 cnt 선언"/ short *ptr /* 포인터 변수 선언 */ ptr = &cnt /* cnt 변수의 주소를 ptr 변수에 대입 */ *ptr = 1004; /* 포인터변수 ptr이 가리키는 주소에 1004를 대입 */ *ptr 여기서 포인터는 무조건 크기가 4byte이다. 그리고 가리키는 대상의 크기는 short(2byte) 이다. 위 소스를 정리해보며 아래와 같다. 1. short cht; 2. short *ptr 3. ptr = &cnt; 4. *ptr = 1004;

Naver Blog

[공유] C언어 main( ) 함수의 명령 인수 (argc, argv)

C/C++ [공유] C언어 main( ) 함수의 명령 인수 (argc, argv) 보안하는오리 2020. 5. 16. 16:08 이웃추가 본문 기타 기능 출처 C언어 main( ) 함수의 명령 인수 (argc, argv) by SLL C언어 main 함수의 명령 인수 argc, argv * main 함수의 매개변수는 보통 아무것도 사용하지 않지만int main 경우에 따라서는 int main int ... blog.naver.com 스크랩된 글은 재스크랩이 불가능합니다.

Naver Blog

[백준- C] 10818번 : 최소, 최대

문제 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. 출력 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다. 예제 입력 1 5 20 10 35 30 7 예제 출력 1 7 35 #include <stdio.h> int main() { int a, b, i; int min = 1000001; int max = -1000001; scanf("%d\n", &a); for (i = 0; i < a; i++) { scanf("%d", &b); if (b < min) { min = b; } if (b > max) { max = b; } } printf("%d %d", min, max); return 0; } 처음

Naver Blog

[Security Word] - 스니핑(Sniffing)

환경 공격자 : Kali Linux 192.168.115.130 사용자A : Metasploitable 192.168.115.131 사용자B : Ubuntu 192.168.115.129 시나리오 사용자 A와 사용자B 가 FTP 접속을 통해 통신을 하는 것을 공격자가 도청하고 있다. 스니핑이란? 스니핑(Sniffing) 은 스니퍼(Sniffer)를 이용하여 네트워크상의 데이터를 도청하는 행위를 말한다. 스니퍼란 컴퓨터 네트워크상에 흘러 다니는 트래픽을 엿듣는 도청장치라고 할 수 있다. 목적 · 상대방의 들어오는 패킷정보를 가져와서 거기서 중요한 정보를 탈취하기 위함이다. 주요 특징 · 스니핑은 막기가 매우 힘들며 탐지도 어려움 · 수동적 (Passive) 공격 · 스위치 환경에서 스니핑을 하기 위해서는 선행 공격이 필수 이더넷 로컬 네트워크 내의 모든 호스트는 동일한 선을 공유하도록 설계되어있다. 이는 호스트를 식별하기 위해 MAC 주소를 사용한다. 그리고 자신의 MAC주소와 수신 주

Naver Blog

[Win32 API] Windows의 변수 명명법과 데이터형

참고 http://www.soen.kr/ Windows에는 많은 변수들이 사용되어 접두어로 보기 좋게한 정해진 변수들이 존재한다. Win32 API를 공부하면서 많이 나오는 접두어이므로 외워야 한다. 접두어 의미 cb Count of Bytes 바이트 수 dw double word 부호없는 long형 정수 h handle 윈도우, 비트맵, 파일 등의 핸들 sz Null Terminated NULL 종료 문자열 w Word 부호없는 정수형 i Integer 정수형 b Bool 논리형 예를 들면, dbstring이라고 하면 문자열의 바이트를 나타내는 정수형 인수라는 것을 쉽게 알 수 또한 Windows에서는 새로운 데이터형을 만들어서 사용한다. 이 데이터형은 windwos.h 라는 헤더 파일에서 typedef로 선언되어 있으며 모든 프로그램에서 표준 데이터형처럼 사용된다. 데이터형 의미 BYTE unsigned char형 WORD unsigned short형 DWORD unsigned

Naver Blog

[C/C++] 'C' 와 'C++' 키워드 차이

C를 배우면서 많은 키워드를 배워 왔다. C에서의 키워드가 있듯이 C++ 에서도 키워드가 있는데 이를 비교하기 위해서 알아봤다. 키워드 C C++ 데이터형 char, int, short, long, unsigned, float, double, struct, union, typedof (C언어 키워드) + bool 반복문 for, while, do ~ while 분기문 if, else, switch, case, default, break, continue, goto 기억장소 auto, extern, register, static (C언어 키워드) + new, delete, this 기타 return, sizeof, enum, const (C언어 키워드) + catch, try, false, true, namespace 객체관련 class, private, protected, public, operator, template, virtual, friend 총 개수 30개 (30개) + 1

Naver Blog

[Security Word] - APT

APT(Advanced Persistence Threat)? 표적공격은 APT와 동일한 의미를 지닌다. · Advanced 고도화된,고급의 · Persistence 지속되는 · Threat 위협 APT 특징 · 표적에게 들키지 않기 위한 은밀성 · 긴 시간동안 대상에게 지속적으로 공격수행 인터넷에 알려진 표적공격의 절차나 체계들은 표적공격 주체인 해커그룹이 만들어낸 것이 아니다. 이러한 절차 , 체계들은 표적공격주체에 대한 전략과 전술을 분석하고 선지적 대응하기 위해 만들어진 것이다. 표적공격에 대해 Fireeye는 일반적인 절차를 정의하고 있으며, 7단계로 구분하고 있다. 해커 그룹을은 표적 네트워크에 침투한 후 거점시스템을 이용하여 다른 시스템 제어 권한을 탈취하며 지속적인 제어가 가능하도록 백도어를 설치한다. 또한, 제어권한을 탈취한 시스템이나 네트워크상에서 크리덴셜 정보를 확보하여 관리자에 준하는 권한을 얻어야 이 후 안정적인 공격을 수행할 수 있다. 이러한 일은 침투가 발생

Naver Blog

[Network] - 사회공학기반 네트워크 침투

사회공학 기반 공격? · 사회공학 기반 공격은 사용자로 하여금 기밀 정보를 누설하도록 유도하는 심리적 트릭을 말한다. 예) 스피어피싱(Spear pishing) 공격예시 · "Email"을 이용한 악성파일 실행 유도 · "Email" => 사회공학기반 표적 공격의 수단 ( 다른 수단이 될 수도 있음) · 핵심요소 => 안심하고 메일을 열어서 파일을 실행하게 만드는 방법(제목, 내용, 작성자 등을 이용하여 안심하게 만든다) 원격 쉘 개요 · 원격 쉘 : 다른 시스템과 채널을 구성하여 파일을 공유하거나 시스템문제를 원격으로 해결한다. · 두 시스템 간에 원격 쉘을 설정한 경우 한 시스템에서 다른 시스템에 명령어나 코드를 실행하고 그 결과값을 반환할 수 있다. · 원격 쉘: 바인드 원격 쉘, 리버스 원격 쉘 · APT의 경우 공격자는 초기 침투 단계에서 원격 쉘을 사용하여 최초 목표한 시스템에 접속 Initial Compromise (침투시작)에서 수행할 수 있는 대표적인 사회적 공격기법

Naver Blog

[Network] - 사회공학 기반 네트워크 침투

스피어 피싱 공격 ※이메일 · 타겟 수신자는 위험해 보이지 않는 첨부 파일을 다운로드하거나 악성 코드 또는 위험한 웹사이트 링크를 클릭하도록 유인한다. · 그 파일은(소프트웨어 취약점을 이용하여 익스플로잇) 손상된 시스템에 악성코드 · 악성코드는 악의적인 command-and-control(C&C) 서버에 액세스하여 사용자로부터 명령을 기다린다. ※첨부파일 · 스피어 피싱 이메일은 다양한 종류의 파일을 첨부한다. · 실행 파일(exe)은 일반적으로 스피어 피싱 이메일에 첨부 파일로 사용되지 않는다 · 보안 솔루션에서 일반적으로 .exe파일이 첨부 파일인 경우 이메일을 탐지하고 차단하기 때문이다 스피어 피싱 작동원리 · 공격자는 스피어 피싱 공격을 사용하여 희생자를 익스플로잇 공격 · 공격자는 위장한 이메일을 희생자에게 보냄 시나리오 1) 공격자가 악성첨부파일 이메일을 보낸다. 2) 희생자는 zip파일을 열고 안에 들어있는 문서 파일을 실행한다. (하지만, exe파일이 실행된다) 3)

Naver Blog

[Network] - 침투에 사용할 네트워크 침투

SSH 터널링을 이용한 패킷 포워딩 ※터널링 터널링 프로토콜을 이용하여 데이터를 다른 네트워크로 안전하게 이동시키는 기술을 말한다. 데이터가 전송될 때 거쳐가는 네트워크가 인터넷과 같은 신뢰성이 낮은 네트워크일 경우 터널링 기술을 사용될 수 있다. ( 스니핑과 같은 위협으로 부터 보호 할 수 있다) http ftp smtp 기본적으로 암호화 기능을 가지고 있지 않아 인터넷과 같은 신뢰성이 낮은 네트워크 상에서 스니핑위협에 노출 될 수 있다. 터널링은 이러한 문제에 대해 터널링은 문제를 해결해 줄 수 있다. · 접근할 수 없는 네트워크에서 패킷 통신이 가능하도록 하는 기술 · 외부 시스템에서 내부 시스템으로 막혀있기 때문에 정상적인 경로로 패킷을 전송하는 경우 · 외부 시스템에서 내부 시스템 자원으로 패킷을 전송할 수 없음 · 패킷 전송 시 터널을 사용한다면, 외부 시스템에서 내부 시스템으로 접근 · 이전에는 패킷을 전송하여 내부 시스템에 접근이 불가능 했지만 터널을 이용하여 접근이

Naver Blog

[Network] - 라이브 호스트 스캐닝

호스트 스캐닝 개요 · 원격 시스템의 라이브 호스트를 검색하여 통신 할 수 있다 · 스캐닝은 로컬 네트워크 및 외부 네트워크 내에서 수행할 수 있다 · ping, nmap,arping과 같은 도구 사용 ※공격자 입장에서 생각하기 · 라이브 호스트 스캔은 API 라이프 사이클 중 내부 정찰에 포함 · 내부정찰이 전 단계에서 공격자는 타겟 네트워크에 침투하여 첫 번째 호스트를 장악 · 공격자는 첫 번째 희생자 시스템이 속한 네트워크를 스캔 · 다른 라이브 호스트를 파악하여 더 중요한 정보를 얻을 수 있음. · 라이브 호스트 스캐닝을 통해 공격자는 HR 서버 (임원 및 직원 관련 정보를 포함하는 서버)나 중요 · 데이터를 가지고 있을 시스템과 같은 대상을 인프라 구조에서 찾을 수 있음 · 그런 다음 공격자는 스캔한 핵심 시스템에 침투 할수 있음 네트워크를 스캔하여 라이브 호스트 파악하는 방법 · 라이브 호스트스캔은 APT공격 라이프사이클 중 내부정찰에 포함 1. ping · 두 시스템 간

1 2 3 4 5 6