전체 글 81

[Chap3] 디지털 논리 회로

01 논리 게이트 [1] 논리 게이트의 개념과 종류 논리게이트 ; 입력 단자 1개 이상과 출력 단자 1개로 구성되는 전자 회로 동작 설명을 위해 진리표 사용 NOT 게이트 ; 1개의 입력과 1개의 출력을 갖는 게이트로 부정을 표현 버퍼 게이트 ; 입력 신호를 그대로 출력하여 단순 전송을 표현 3상태 버퍼 게이트 ; 출력이 Low High, 하이 임피던스 중 하나 제어 단자 E를 통해서 회로를 개폐함 E위에 바 붙으면 NOT을 의미. 즉 원래는 1일 때 열리는데, E'면 0일때 열림 AND 게이트 ; 입력이 모두 1인 경우에만 출력이 1이 됨 입력 중 하나라도 0이 있으면 출력이 0이 되는 논리곱 OR 게이트 ; 입력이 모두 0인 경우에만 출력이 0 입력 중 1이 하나라도 있으면 출력은 1이 되는 논리합 ..

[Chap2] 데이터의 표현(2)

05 에러 검출 코드 [1] 패리티 비트 ; 에러 검출 코드로 가장 간단하게 사용되고, 주로 컴퓨터 내부의 주기억 장치에서 사용함 메모리에 저장하거나 전달할 데이터에 패리티를 붙여서 전송 여러 비트에서 에러가 발생하면 검출이 되지 않음 에러가 난 곳이 어디인지 모름 짝수 패리티 ; 데이터에서 1의 개수를 짝수로 맞춰줌 홀수 패리티 ; 데이터에서 1의 개수를 홀수로 맞춰줌 [2] 해밍 코드 ; 패리티 비트를 응용하여 에러를 정정할 수 있도록 고안된 것으로 한 비트에 에러가 발생했을 때 위치를 찾을 수 있음 원본 데이터 외에 추가적으로 많은 비트가 필요 추가되는 패리티 비트의 수는 2^p ≥ d+p+1에 의해서 계산 가능 (p: 패리티 비트 수, d: 데이터 비트 수) 짝수 패리티를 사용 원본 데이터가 00..

[Chap2] 데이터의 표현

01 진법과 진법 변환 [1] 디지털 정보의 단위 bit ; 컴퓨터 정보를 나타내는 가장 기본 단위 (0과 1 두 가지 상태만 저장 가능) nibble == 4bit, byte == 8bit n 비트로 2^n 개의 상태 표현이 가능 byte 영어는 1바이트(52개 필요), 한글은 2바이트가 필요(11172개 필요) [2] 진법 기수 ; 진법을 나타내는 기본 수 기수가 10이면 10진법, 기수가 2면 2진법 10진법 ; 각 자릿수를 0-9 사이의 수로 나타냄. 소수점을 왼쪽은 10의 양의 거듭 제곱, 소수점 오른쪽 10의 음의 거듭 제곱 2진법 ; 0과 1 기호 2개를 사용 8진법 ; 0부터 7까지 기호 8개 사용 cf) 컴퓨터 구조나 어셈블리어에서는 16진수를 많이 사용 [3] 진법 변환 ; 정수 부분은..

[Chap1] 서론

01 컴퓨터 시스템의 구성 컴퓨터는 하드웨어와 소프트웨어로 구성됨 컴퓨터의 기본 구성도 [1] 하드웨어 ; 컴퓨터에서 각종 정보를 입력하여 처리하고 저장하는 동작이 실제 일어나게 해주는 물리적인 실체 컴퓨터의 성능은 하드웨어에 의해 결정됨 구성 중앙 처리 장치, 주기억 장치, 보조 기억 장치, 입력 장치, 출력 장치, 시스템 버스로 구성됨 (1) 중앙 처리 장치(CPU) ; 인간의 두뇌에 해당하는 부분으로, 프로그램 실행과 데이터 처리를 담당 프로세서 또는 마이크로프로세서라고도 부름cf) 마이크로프로세서 : CPU를 IC 칩 1개에 집적한 반도체 소자 산술 논리 연산 장치(ALU) : 산술 연산, 논리 연산, 보수 연산, shift 연산 수행 제어 장치(CU) : 1) 프로그램의 명령어 해독, 2) 명령..

Webhacking.kr old 58번 문제 풀이

58번을 누르면 위와 같은 문제가 나온다. 1을 보냈을 때는 command not found라는 메시지가 뜬다. 명령어를 입력하는 곳인 것 같아서 ls를 쳐보았다. 그랬더니 index.js와 temp.html 파일이 있음을 알 수 있었다. 안 되는 linux 명령어가 많아서 되는 명령어를 확인하기 위해 help를 입력하였다. help를 입력하니 ls, id, flag, help 총 4개의 명령어가 있는 것을 확인할 수 있고 id와 flag를 각각 입력해 보았다. 위는 id를 입력한 결과, 아래는 flag를 입력한 결과이다. 소스코드를 확인해 보았다. 각각의 문법을 간단히 살펴보자. socket = io()를 통해 새로운 소켓을 생성해주고, emit()을 통해 메시지를 보낸다. 그런 다음 on을 통해서 서..

Webhacking.kr old 32번 문제 풀이

32번 문제를 클릭하면 위와 같은 화면이 나온다. 아무 생각없이 inpereal을 클릭했더니 투표가 되었다 . . . .이를 어째 다른 사람들을 더 눌러보니 you already voted라는 메시지 창이 뜬다. 쿠키를 살펴보니 vote_check라는 쿠키값이 있는 것을 알 수 있다. ok로 되어 있는 값을 없애주었더니 투표가 추가적으로 가능했다. 찾아보니 내 닉네임도 존재하는 것을 알 수 있었고, 내 닉네임에 해당하는 값을 100으로 올려주면 문제가 풀리지 않을까? 하고 생각했다. 한 번 누를 때마다 쿠키값에 들어가는 ok를 삭제하는 게 번거로워서 사진에 보이는 금지 모양을 눌러(형광펜 칠해진 기호) 쿠키를 아예 작동하지 않게 해주었다. (값으로 차단 추가 설정) 클릭을 한 20번 정도 하다보니까 귀찮..

Webhacking.kr old 31번 문제 풀이

31번 문제를 클릭하면 위와 같은 화면이 나온다. 서버에 연결하는 것이 거절되었다는 에러 메시지가 출력되고 있다. 코드에서 fsockopen() 함수를 사용하고 있어서, 이게 무엇인지 알아보았다. fsockopen() ; PHP에서 사용되는 함수로, 소켓 통신에 사용된다. fsockopen("IP주소", "포트번호", "에러", "에러메시지", "연결시도시간")이 문법이고, 반환되는 값은 파일 포인터이다. 사진에서는 IP를 가려두었지만, 내 IP로 연결되는 것을 알 수 있는데, 연결이 될 수 있도록 10000번부터 10100의 포트를 열어주어야 한다. (포트포워딩) KT 공유기를 사용하는 경우에는 http://172.30.1.254를 입력하여 공유기 설정 페이지로 접속하면 된다. cmd에서 ipconfi..

Webhacking.kr old 27번 문제 풀이

27번은 SQL Injection 문제이다. view-source를 통해 소스코드를 보자. 위의 소스코드를 보면, 1) /#|select|\(| |limit|=|0x/i 가 필터링 되고, 2) no 값에 입력값이 들어가고, 3) no=2가 되면 admin으로 인식되면서 문제가 풀리는 것을 알 수 있다. SQL 문장을 좀 더 자세히 보자. select id from chall27 where id='guest' and no=({$_GET['no']})") $_GET['no']가 입력값이고, no에 들어가는 값이 ()로 묶이는 것을 볼 수 있다. 우리는 no에 2라는 값을 넣어야 하기 때문에 where문에서 기존에 적혀 있던 값은 무효화 하고 no=2를 넣어주어야 한다. 즉, 아래와 같은 값을 넣는 것이다. ..

Webhacking.kr old 25번 문제 풀이

25번을 클릭하니 linux 체제의 파일 목록과 함께 입력창에 hello world가 입력된 것을 볼 수 있다. url을 보니 ?file=hello가 보내지는 걸 볼 수 있고, 파일 이름인 것 같아서 flag와 index를 추가로 입력해보았다. index 파일에는 별다른 내용이 없었고 flag 파일의 내용을 보았더니 FLAG is in the code이라고 출력되었다. 그래서 코드를 보았더니 코드에서 알아낼 수 있는 게 없었다. 이후 code 파일을 찾아보려고 했으나, 찾지 못했고 구글에 찾아보니 LFI 취약점을 통해 푸는 문제임을 알 수 있었다. cf) LIF(Local File Inclusion) 취약점 : 대상이 되는 파일이 공격 대상의 서버에 존재하고, 서버에 존재하는 파일에 접근하여 원하는 값을..

Webhacking.kr old 19번 문제 풀이

19번 문제를 클릭하면 위와 같은 화면이 뜬다. form 태그가 있는 것으로 보아 SQL Injection 문제임을 유추할 수 있다. 코드를 보자. 코드에서는 최대 입력 값이 5라는 것을 제외하고는 별 다른 내용을 찾을 수 없었다. 입력되어 있던 admin을 보내면 'you are not admin'이라는 메시지와 함께 url에서 id 변수로 admin 값을 넘기는 것을 볼 수 있다. id 값에 1을 넣어서 보내니 hello 1이 뜨는 것을 확인할 수 있었다. 그런 다음 logout을 위해 logout 버튼을 눌렀는데도 logout이 되지 않았다. 그래서 그냥 url만 이용해야겠다고 생각했고, sql 문법일 테니까 id에 admin을 넣고 뒤에 문법은 주석처리 하는 admin'--을 입력하였다. 이때 a..