![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctfLFP%2FbtrF9gCudQM%2FliiPZhFS3867l00N0krPTk%2Fimg.png)
[JS] 불변성과 가변성
2022. 6. 30. 22:24
JS
📚 데이터 타입 두 가지 원시 타입 (Primitive) 참조 타입 (Reference) number array string object boolean function null RegExp undefined symbol 자바스크립트에선 두 가지의 데이터 타입이 존재한다. 원시 타입은 데이터의 가장 작은 단위로 더 이상 쪼개질 수 없고, 하나의 데이터만을 가진다. 참조 타입은 원시 타입을 모아둔 집합으로 원시 타입을 제외한 나머지는 모두 참조 타입이다. 그렇다면 불변성과 가변성은 무엇일까? 원시 타입은 불변성을 띠고, 참조 타입은 가변성을 띤다. 아래에서 알아보자. 📚 불변성 불변성을 얘기하기 전에 데이터의 저장 방식을 살펴보자. let a = 1; 변수 a를 선언하고 1을 할당했다. 이때 메모리에는 어떤..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccUbYE%2FbtrFUilShnK%2FtDaZ8z9S6VhQu2kWuz6vdk%2Fimg.png)
[JS] Shallow Copy
2022. 6. 27. 16:23
JS
📚 Shallow Capy - 얕은 복사 자바스크립트에서는 복사할 때 항상 얕은 복사가 일어난다. 객체를 복사할 때 객체 데이터 자체가 복사되는 것이 아니라 객체의 메모리 주소가 복사되는데 이것을 얕은 복사라 한다. 따라서 어떤 객체를 복사한 후 데이터를 변경하면, 두 개의 변수가 가리키는 객체는 동일하기 때문에 변경사항이 다른 복사본에도 똑같이 반영된다. 이는 함수에서도 마찬가지이다. 함수의 인자로 객체를 넘겨줄 경우, 객체의 메모리 주소를 받아오기 때문에 함수 내에서의 변경사항이 밖에서도 반영된다. 이때 객체가 원래의 의도와는 맞지 않는 데이터로 오염될 수 있기 때문에 함수의 인자로 객체를 전달하는 것은 좋은 방법이 아니다. 아래 코드로 얕은 복사를 직접 확인해보자. const haesa = { na..
[JS] Getter와 Setter
2022. 6. 23. 15:13
JS
class Student { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } fullName() { return `${this.lastName} ${this.firstName}`; } } 위처럼 firstName과 lastName을 생성자로 받고, fullName을 만들어주는 Student 클래스가 있다. Student 인스턴스를 생성하고, fullName을 console에 찍어보자. const student = new Student('길동', '홍'); console.log(student.fullName()); // 홍 길동 그럼 위와 같은 코드를 작성하게 될 것이다. full name은 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fewf313%2FbtrFaOMFZ6P%2FTf5BH4s9woTxGKYosSaSkk%2Fimg.png)
[JS] 함수와 메모리
2022. 6. 19. 13:01
JS
📚 함수와 메모리 자바스크립트에선 함수는 메모리상에 어떻게 저장되어 있을까? 아래 예제와 함께 살펴보자. function sum(a, b) { return a + b; } 두 개의 값을 받고 더한 후 반환하는 sum 함수가 있다. sum 함수는 메모리 공간 어딘가에 저장되어 있을 것이다. 이때 함수 이름 sum은 이 메모리 공간을 가리키게 된다. 더 정확하게 말하자면 변수 sum은 함수가 저장된 메모리 주소를 가지게 된다. 그렇다면 다음과 같이 함수 이름을 다른 변수에 할당하게 되면 어떻게 될까? function sum(a, b) { return a + b; } const add = sum; 변수 add는 sum에 저장된 메모리 주소를 갖게 될 것이다. 즉 add도 sum 함수를 가리키게 된다. 이제는 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqyGy7%2FbtrC2MqgErp%2FmwHZlbspzKyCeb0KNC7M50%2Fimg.png)
[suninatas] Game 22
2022. 5. 24. 21:30
Study/Web Hacking
문제: http://suninatas.com/challenge/web22/web22.asp Game 22는 Blind SQL Injection 문제다. form 아래에 필터링되고 있는 키워드를 보여주고 있다. 이 외에도 #, like, % 등등 아래 키워드에는 없지만 필터링되고 있는 것들도 있었다. 최종적으로 =, and, --, ' 정도가 필터링되지 않는 것을 확인했다. 해당 문제에 대한 힌트가 있지 않을까 싶어 개발자 도구를 열어봤는데 역시나 주석에 힌트가 숨겨져 있었다. admin의 pw를 구해야 한다고 한다. 이전에 비슷한 문제를 풀어봤었는데 그때랑 동일한 방법으로 해결해보겠다. 먼저 pw의 길이를 알아야 한다. 아래 코드로 pw의 길이를 알아낼 수 있다. import requests url = ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOAzcI%2FbtrDdmLUMzM%2FFhrCibeKkY4fU50vEBk5ZK%2Fimg.png)
[suninatas] Game 08
2022. 5. 24. 21:30
Study/Web Hacking
문제: http://suninatas.com/challenge/web08/web08.asp 로그인 폼이 하나있다. Password Incorrect!라고 되어 있는데 왠지 password를 구해야 하는 문제 같다. 개발자 도구를 열어보면 주석에 힌트가 숨겨져 있는 것을 볼 수 있다. 예상대로 admin의 password를 찾아서 로그인해야 하는 문제다. 주석에 친절하게도 비밀번호의 범위를 보여주고 있다. 여기서 브루트 포스로 해결할 수 있는 문제라는 것을 알 수 있다. 코드를 작성해서 password를 구했다. import requests url = "http://suninatas.com/challenge/web08/web08.asp" data = {"id": "admin"} for i in range(..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2s7j4%2FbtrCmfsr66E%2F2Rkyow6EkoXHpEG5oMBR91%2Fimg.png)
[suninatas] Game 07
2022. 5. 16. 22:55
Study/Web Hacking
문제: http://suninatas.com/challenge/web07/web07.asp Do U Like girls?라는 문구가 눈에 띈다. 문제 페이지에 아이유 사진과 아래에 있어 잘 보이진 않지만 윤아 사진, 그리고 그 사이에 YES버튼이 하나 있다. YES버튼을 눌러봤다. 내가 너무 느리다고 한다. 느리다는 게 무얼 말하는 걸까.... 개발자 도구를 열어봤다. 주석에 힌트가 숨겨져있었다. Faster and Faster가 힌트였다. 위에서 내가 너무 느리다는 경고창은 정말 내가 너무 느리다는 걸 뜻하는 거였다... 어떻게하면 form을 빨리 submit할 수 있을까? submit 버튼은 너무 아래쪽에 있기 때문에 버튼을 클릭하는 방법은 사용할 수 없다. 대신에 자바스크립트를 사용해서 form을 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHCDMn%2FbtrCkgS7wiT%2FFHO4AY8ivA0MieZvJ4TCG1%2Fimg.png)
[suninatas] Game 06
2022. 5. 16. 21:52
Study/Web Hacking
문제: http://suninatas.com/challenge/web06/web06.asp board에 5개의 글이 있다. 가장 먼저 Hint를 보자. suninatas의 글을 읽어보라고 되어 있다. Writer가 suninatas인 작성글을 확인해보자. password를 입력하는 input과 그 아래에 DB문법으로 작성된 쿼리가 있다. 이걸보니 Blind SQL Injection이 생각났다. Blind SQL Injection은 쿼리의 참과 거짓의 판별을 통해 원하는 결과를 도출해내는 공격 방법이다. 일반적으로 사용하는 여기서 우리가 입력하는 내용이 pwd에 들어가게 될 듯하다. 그 점을 고려해서 제일 흔하게 쓰이는 ' or 1=1#을 입력해봤다. 해당 쿼리는 못 쓰게 막혀있다. 아마 쿼리를 이루는 문..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKHNl%2FbtrCjF6UdMd%2FskEymF735H07ruRJJM3FF1%2Fimg.png)
[suninatas] Game 05
2022. 5. 16. 21:23
Study/Web Hacking
문제: http://suninatas.com/challenge/web05/web05.asp 어떤 form 하나가 있고 그 아래에 "Check Key Value"가 적혀있다. 어떤 key value를 확인하라는 걸까, 개발자 도구를 열어봤다. 가장 먼저 보이는 건 주석 처리된 힌트였다. 힌트는 12342046413275659 숫자열이었고, 이 값을 input에 입력해보았지만 아무일도 일어나지 않았다. 좀 더 도움이 될만한 걸 찾기 위해 소스를 살펴보다가 table에 숨겨진 script를 발견했다. 난독화가 되어 있는지 지금 상태론 무슨 코드인지 알아보기 힘들어보인다. 코드 난독화를 해제해보자. 아래 링크에서 코드 난독화를 해제할 수 있다. 더보기 https://beautifier.io/ 그 결과 위와 같은..