2진수에서 10진수로의 변환 알고리즘

2진수를 10진수로 변환하는 알고리즘

- 변환할 2진수는 크기가 8인 배열 T에 제공되어 제공

- 첫번째 비트는 T(1)은 2진수의 부호 나타냄, 0이면 양수, 1이면 음수

- 첫번째 비트 T(1)의 값이 1인 음수 경우 2의 보수에 의해 크기가 표현된다

- 함수 ABS(X)는 절대값을 계산해주는 함수다

- 함수 POWER(X,Y)는 X의 Y제곱, 즉 X의 Y제곱을 계산해주는 함수

 

10진수 2진수로 바꾸기

-10을 바꿀때 

1. 음수 부호 생략 10

2. 2진수로 변형 00001010

3. 1의 보수화 11110101

4. 1 더하기 11110110

 

2진수 10진수로 바꾸기

1. 1을 빼기 11110110

2. 1의 보수화 00001001

3. 10진수로 변형 10

4. 음수 부호 추가 -10

 

+ 2의 보수로 표현된 2진수 음수에서 1을 빼려면 최하위 비트 T(8)에서부터 적용

T(8) = 1 이면 T(8) - 1 = 0

 

T(8) = 0 이면 T(8) - 1 = -1

+ 앞에 있는 T(7)의 감수 1 발생-> T(8)은 2진수이므로 음수 부호 뺀 절댓값 1로 조정하여 저장

T(7)도 안되면 앞으로 Borrow빼는 작업 반복된다.

 

2진수 10진수로 바꾸는 순서도

 


10진수에서 16진수로 변환 알고리즘

10진수를 16진수로 변환하는 알고리즘

- 입력으로 주어지는 10진수는 변수 D에 저장하여 처리

- 16진수를 나타내는 각 숫자에 해당하는 문자는 문자형 배열 변수 H(16)에 저장

H(0)=0 , H(1)=1, .... H(14)=E, H(15)=F

16진수는 최대 20자리까지 보관가능

 

16진수 = 0~15까지. 10~15는 A,B,C,D,E,F로 나타냄

 

16진수를 10진수로 변환하는 알고리즘

주어진 10진수를 16으로 나누었을때 생긴 몫을 다시 나누기 반복 몫 생기지 않을때까지 반복

- 10진수 D를 16으로 나누어 몫 나머지 구하기

- 배열 원소 H(나머지)DP 10진수 D를 16진수로 변환하였을때 가장 오른쪽 자리 16의 0게곱에 나타나는 게 16진수가 된다. 나머지가 15이면 H(15)=F이다.

 

순서도

+ 10진수 8진수로 변환


코드변환과 패리티 비트 점검 알고리즘

BCD코드와 3초과 코드 변환

10진수 0~9를 BCD로 표현하면 4자리 필요 10개만 사용

EX) 10진수 127을 BCD코드로 표현시 0001 0010 0111

 

3초과 코드는 10진수로 3, 2진수로 0011을 더한 코드

-> 0개수가 많아서

 

순서도


패리티 비트 검증

- 입력으로 총 9비트 받음

- 첫번째 비트는 패리티 검사 방식으로 함, 그 값이 1이면 홀수 패리티 0이면 짝수 패리티

- 나머지 8개 비트는 0 또는 1의 값을 갖는 데이터 영역

- 홀수 패리티는 8비트 데이터 영역에 저장된 1의 개수가 홀수 개인 경우에 오류가 없음

- 짝수 패리티는 8비트 데이터 영역에 저장된 1의 개수가 짝수 개인 경우 오류 없음

- 패리티 검사를 오류 없으면 오류 미발견으로 출력, 오류 있음녀 오류 발견 출력

 

순서도

+ 그레이 코드 특징 : 이웃한 숫자끼리 한자리만 바뀜.  Exclusive OR연산으로 그레이 코드를 2진수로 2진수를 그레이코드로 바꿈

 

2진수=BCD


열 우선 - 삼각형 배열 채우기 알고리즘

행 우선/ 열 우선 채우기

2차원 배열 A(5,5)원소에 값을 저장해주는 알고리즘 제시

 

 

순서도


삼각형 모양으로 배열 채우기

2차원 배열 A(5,5)의 원소 밑에 그림과 같은 모습으로 저장하는 알고리즘

1 ~ 15로 증가

1열

2열

3열

4열

5열

따라서 R행은 R열부터 시작 -> 삼각형 모양

- 채워야 할 배열 A는 5행 5열 총 15개 원소값

R은 1~5로 바뀌고 시작하는 위치도 1~5

 

순서도

 

+ 삼각형 모양으로 배열 채우기를 반복 기호를 이용하여 표현


마름모 모양 - ㄹ자 모양 배열 채우기 알고리즘

마름모 모양으로 배열 채우기

이런 모양 알고리즘

 

                A(1,3)

        A(2,2) A(2,3) A(2,4)

A(3,1) A(3,2) A(3,3) A(3,4) A(3,5)

        A(4,2) A(4,3) A(4,4)

                A(5,3)

 

 

 

 

각 행에서 열의 범위는 좌측 하한선부터 우측 상한선 까지


ㄹ자 모양으로 배열 채우기

ㄹ자 모양 저장해주는 알고리즘

행은 고정 열이 1~5증가

 

행은 고정 열이 5~1감소

 

행은 고정 열이 1~5증가

 

행은 고정 열이 5~1감소

 

행은 고정 열이 1~5증가

 

왔다갔다 ㄹ 자 모양

 

순서도


모래시계-달팽이 모양 배열 채우기

모래시계 모양으로 배열 채우기

A(5,5)원소 알고리즘

행은 1~5

열은 모래시계 모양으로

 

행 가운데까지 감소하다가

 

증가

 

 

 

 

 

 

 

순서도

+ 옆으로 누워있는 모래시계


달팽이 모양으로 배열 채우기

1~25까지 채우는 알고리즘

 

순서도


행렬의 곱셈과 덧셈 알고리즘

2차원 배열 3개 주어진 A(2,4) B(4,3) S(2,3)존재시

(2 * 4) * (4*3) = 2 * 3

 

 

순서도

 

 

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Welcome.html

 

Amazon S3이란 무엇인가요? - Amazon Simple Storage Service

HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

docs.aws.amazon.com

 

Amazon Simple Storage Servise = Amazon S3

Amazon S3은 인터넷 스토리지 서비스 이다. 웹 규모 컴퓨팅 작업을 쉽게 설계되었다.

쉽게 말하면 파일 저장소

 

* AWS 프리티어에서는 S3 용량 5GB를 무료로 사용할 수 있으며, GET 요청 2만개와 

PUT요청 2천개를 무료로 1년동안 사용이 가능합니다.

 

 

Amazon S3에서 제공하는 단순한 웹 서비스 인터페이스를 이용하여 웹상에서 원하는 양의 데이터를 저장하고 검색할 수 있다.

 

- 버킷만들기

데이터를 저장하는 버킷을 만들고 해당 버킷의 이름 지정. 버킷은 데이터 스토리지를 위한 Amazon S3 기본 컨테이너

 

- 데이터 저장

버킷에 데이터를 무한정 저장. Amazon S3 버킷에 객체 원하는 만큼 업로드 할 수 있음. 각 객체는 고유한 개발자 할 당 키를 사용하여 저장, 검색 함.

 

- 데이터 다운로드

데이터 직접 다운로드하거나 다른사람이 다운로드 할 수 있음

 

-권한

데이터를 Amazon S3 버킷으로 업로드,다운로드 하려는 사용자에게 액세스 권한을 부여하거나 해다ㅏㅇ 권한을 거부한다.

인증메커니즘 사용하여 데이터가 무단으로 액세스 되지 않도록 보호하는데 도움이 될 수 있다.

 


용어

 

Buckets

버킷은 Amazon S3에 저장된 객체에 대한 컨테이너

모든 객체는 어떤 버킷에 포함이 됨.

예를들어 photos/puppy.jpg 로 명명된 객체는 미국 서부 리전의 awsexamplebucket1버킷에 저장되고 URL은 

https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg 사용하여 주소 지정 가능

 

버킷의 여러가지 용도

-  Amazon S3 네임스페이스를 최상위 수준으로 구성합니다.

- 스토리지 및 데이터 전송 요금을 담당하는 계정을 식별

- 액세스 제어에 사용

- 사용량 보고를 위한 집계단위로 사용

 

Objects

객체는  Amazon S3에 저장되는 기본 개체이다. 객체는 객체 데이터와 메타 데이터로 구성된다.

이 데이터 부분은  Amazon S3에서 볼수 없다.

메타데이터는 객체를 설명하는 이름-값 페어의 집합이다. 마지막 수정한 날짜 와 같은 기본데이터. content-type같은 표준 http메타 데이터를 포함한다. 객체 저장할때 사용자 정의 메타데이터를 지정할 수 있다.

 

Key

키는 버킷 내 객체의 고유한 식별자. 버킷 내 모든 객체는 정확히 하나의 키 갖음

버킷, 키, 버전 ID의 조합은 각 객체를 고유하게 식별함


버킷정책

 Amazon S3 작업, 요청자, 리소스, 요청의 여러측면을 비롯한 다양한 조건 기반으로 버킷 및 객체에 대한 중앙 집중식 액세스 제어 제공.

정책은 액세스 정책언어로 표현되고 중앙 집중식 권한 관리를 가능하게 한다. 버킷에 연결된 권한은 버킷 소유자 계정이 소유한 모든 버킷의 객체에 적용됨.

개인 기업 모두 버킷 정책 사용 가능.

기업이  Amazon S3에 등록하면 계정 만들고 계정은 자신과 직원이 만든 AWS리소스에 대해 재정적 책임을 진다. 계정은 버킷 정책 권한을 부여하고 다양한 조건을 기반으로 직원에게 권한을 할당할 수 있다. 예를 들어 계정은 사용자엑 권한을 부여하는데

한사용자에 제한된 읽기 쓰기 권한으 부여할 수 있지만 다른 사용자가 버킷을 만들고 삭제하도록 허용할 수 있다.

정책은 버킷 내에 모든 객체 또는 객체의 하위 세트에 대해 권한을 추가, 거부 할 수 있다.

 


Operations

- 버킷만들기 : 객체 저장할 고유 버킷 만들고 해당 버킷 이름 지정

- 객체 작성 : 객체를 만들거나 덮어써서 데이터를 저장. 객체를 쓸 때 버킷의 네임스페이스에 고유한키 지정. 여기서 객체에 대해 원하는 액세스 제어 지정

- 객체 읽기 : 데이터 다시 읽기. HTTP통해 데이터를 다운로드 할 수 있음

- 객체 삭제 : 일부 데이터를 삭제

- 키 나열 : 버킷 중에 하나에 포함된 키 나열

 


[책] AWS 침투 테스트 칼리 리눅스로 배우는 AWS

 

PDF기준 162~

7장에서 할꺼 

- 첫 S3 버킷 구성

- AWS S3권한과 접근 API 학습

- 취약한 S3 버킷에서의 읽기/쓰기

 

버킷 생성

1. 버킷 만들기

2. 버킷 이름 입력

* 이름 결정할때 가이드 라인 따라야함

- 고유 이름 사용 DNS준수 (https://docs.aws.amazon.com/ko_kr/awscloudtrail/latest/userguide/cloudtrail-s3-bucket-naming-requirements.html)

 

Amazon S3 버킷 이름 지정 요구 사항 - AWS CloudTrail

S3는 버킷이 공개적으로 액세스할 수 URL로 사용되는 것을 허용하기 때문에 선택하는 버킷 이름이 전세계적으로 고유해야 합니다. 다른 계정이 이미 선택한 이름을 가진 버킷을 생성한 경우 다른

docs.aws.amazon.com

BucketAlreadyExists 나타날시 ( https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-error-bucket-already-exists/ )

inco-kslj-2021

 

3. 리전 실습 환경에 맞게 선택/ 버킷이름은 kirit-bucket

4. 생성 클릭 해서 생성

 


버킷 만드는 과정 캡처 되어 있음 - https://zamezzz.tistory.com/298

 

[AWS] S3 bucket 생성하기

■ [AWS] S3 Bucket 생성하기 오늘은 AWS의 S3 생성에 대해서 정리해보겠습니다. S3란 Simple Storage Service의 약자로 쉽게말해 파일을 저장하는 저장소입니다. 단순히 데이터를 저장하는 것 부터 정적

zamezzz.tistory.com



버킷 생성 후 (pdf 기준 165)

1. 버킷 활성화돼 실행되고 있으면 버킷에 오브벡터 업로드 가능.

오브젝트 = 음악, 영상, 문서, 이미지

 

2. 오브젝트 업로드 하려면 버킷 클릭하고 업로드

 

3. 오브젝트 다운로드 하려면 해당 오브젝트 체크박스 선택하고 다운로드 누르면 끝

 


S3 권한과 접근 API (PDF 기준 166)

s3 버킷은 두종류 군한 시스템 갖고 있음

1. 접근 제어 정책 : 주로 웹 UI 사용. ACP는 또 다른 두번째 권한 시스템의 단순화된 추상화 계층..

2. IAM 접근 정책 : 각 권한의 상세 내용을 볼 수 있는 JSON 오브젝트로 저장 되 있음

 

권한은 버킷, 오브젝트에 적용 가능

버킷 권한은 마스터 키와 비슷 (다른 누군가가 오브젝트를 접근 권한을 부여하면 버킷 권한을 먼저 부여해야 하고 개별 오브젝트 권한은 추가로 제공해야 한다.)

 

S3 버킷오브젝트는 WebGUI를 통해 접근할 수 있다.

+ AWS S3 cmdlet사용하는 AWS 명령줄 인터페이스에서 접근할 수 있음

 


AWS CLI 사용해 오브젝트 업로드 하고 다운로드 하려면 따라하기

AWS CLI = AWS 명령줄 인터페이스 = AWS서비스 관리하는 통합 도구. 

AWS CLI 설명 - https://aws.amazon.com/ko/cli/

AWS Command Line Interface 설명 - https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-welcome.html

 

AWS 명령줄 인터페이스

aws-shell은 명령줄 셸 프로그램으로서, AWS 명령줄 인터페이스를 사용하는 새로운 사용자와 고급 사용자 모두에게 도움이 되는 편의 기능 및 생산성 기능을 제공합니다. 주요 기능은 다음과 같습

aws.amazon.com

 

PDF 기준 167 따라가기 여기는 책에 명령어 적혀있어서 책보는게 나을듯

AWS CLI 버전 1,2 있는데 책은 1인듯

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-linux-al2017.html

 

Amazon Linux에서 AWS CLI 버전 1 설치, 업데이트 및 제거 - AWS Command Line Interface

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

1. awscli 설치 시작

2. awscli 자격 증명 구성 - 책에 나오는데로 누르면 새 액세스 키 만들기 있음

 

이번 문제는 id를 입력받는것을 확인 할 수 있다.

이 문제 역시 id가 admin이면 troll을 출력하며 해결할 수 있다.

 

여기서는 preg match함수가 admin을 받으면 HeHe하며 해결할 수 없도록 만들었다.

admin을 필터링 해야된다.

문제를 만들게 되면 이런식으로 문제를 만드는 것도 좋을것 같다. 정답과 유사한걸 입력하면 hehe~

 

+ 찾아보니 /admin/i 처럼 뒤에 i가 붙으면 대소문자를 구분하지 않고 i 가 붙지 않으면 대소문자를 구분한다고 한다.

+ 대소문자를 구분하지 않는 점을 활용하는게 포인트라고 합니다.

https://tech-dailylife.tistory.com/entry/Lord-of-SQL-Injection-troll-8%EB%B2%88-%ED%92%80%EC%9D%B4

이번 문제도 id는 guest고 pw을 입력받는것을 볼 수 있다.

pw를 맞추는 문제인것 같다.. 이런문제가 어려운거 같다...

+쿼리의 결과에 따라 서버에서 서로 다른 반응을 보이는 Blind SQL Injection문제다.

https://croas.tistory.com/46

 

[Lord of SQL Injection] Orge

#About [그림 1] - 문제 화면 #Solution 위 문제는 이전 Darkelf(http://croas.tistory.com/45)문제와 동일하게 연산자 or 과 and 를 필터링 하고 있다 이전 문제와 다른 점이라면 DB에 저장되어있는 admin에 해..

croas.tistory.com

 

우선 코드를 보면 or와 and가 필터링 되어 대신 || 와 &을 써야 한다는 것을 알수 있다.

 

1. 비밀번호 길이를 알아내야 한다. mysql함수 length함수를 이용해서 알아보았다.

?pw=%27||id=%27admin%27%26length(pw)=8%23 8이 적힌 부분을 1부터 넣으줬는데 8을 넣었을때 길이를 맞았다는 Hello admin이 출력되었다.

 

8자리 숫자가 각각 무엇인지 대입해서 맞추는 방법이 있고 프로그램을 짜서 알아내는 방법이 있다.

 

한글자씩 알아내기에는 어려울꺼 같아 파이썬 코드를 참고하여 짜서 해결해 보았다.

파이썬 코드 참고 https://d1n0.tistory.com/8

 

 

4번의 org문제와 동일한 형식으로 blind sql문제이다. 두문제 모두 비밀번호의 길이를 알아내고 비밀번호를 찾는 문제이다.

비밀번호의 길이까지는 큰 어려움 없이 알아낼수 있었으나 비밀번호를 알아내는데는 어려움이 있었다.

한글자씩 찾는 받법이 있고 파이썬으로 코드를 짜서 해결하는 방법이 있다.

두 방법 모두 다시 해보고 파이썬 코드를 직접 짜보는 공부가 더 필요하다.

+ Recent posts