일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 호이스팅
- 포너블
- 개인정보보호
- 개인정보보호위원회
- package-lock.json
- 개인정보안전성
- 국가인적자원개발컨소시엄
- package.json
- 무료교육
- 백엔드
- 곱셈 암호
- 동적타이핑
- 덧셈 암호
- 개인정보보호교육
- 디오판투스 알고리즘
- 유클리드_알고리즘
- function scope
- arrow function
- pwnable.tw
- 한국산업인력공단
- 가명정보처리
- node.js
- 한국정보보호산업협회기자단
- 웹 프레임워크
- 확장 유클리드 알고리즘
- 마감임박
- 백엔드입문
- 한국정보보호산업협회
- 모듈러 연산
- Writeup
- Today
- Total
짱짱해커가 되고 싶은 나

readme를 보니까 1분 밖에 재생이 안 되고 1분 이상 들으면 flag가 나온다고 한다. 일단 실행시키려고 mp3 파일을 넣었는데 다음과 같은 에러 창이 떴다. 그래서 mp3파일의 확장자를 wav 파일로 변환시켰다. 그랬더니 잘 작동했다. 1분이 되니 다음과 같은 메시지 창이 떴다. IDA로 분석하려 했는데 디컴파일러가 안 됐다. 이유를 찾아보니 이 파일은 비주얼 베이직 프로그램이기 때문에 안된다고 한다. 그래서 올리디버거로 분석했다. call하는 함수 목록을 보는데 MsgBox가 보인다. MsgBox를 호출하는 부분이 4군데 있어서 모두 bp를 걸었다. 그리고 실행을 시키는데 파일을 불러오려고 open을 누르면 계속 렛 나고 실행이 안되서 찾아보니까 경로를 바로 넣으라고 해서 그랬더니 잘 돌아갔다...
sequelize: 노드에서 MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리, ORM(object-relational mapping)으로 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다. 시퀄라이즈는 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문에 SQL언어를 직접 사용하지 않고 js만으로 MySQL을 조작할 수 있기 때문에 편리하다. sequelize와 mysql2를 설치하고 sequelize init을 하면 config, models, migrations, seeders 폴더가 생성된다. 1. MySQL 연결하기 - app.js sequelize를 통해 express 앱과 MySQL을 연결해야 한다. 따라서 다음과 같이 app.js를 수정한다. var sequelize =..

프로그램을 실행 시켰더니 그냥 꺼졌다. 띠용 readme 파일을 확인해보니 OEP를 찾으라고 한다. OEP란? unpacking을 할 때 packing되기 전으로 돌아가는 곳이라고 한다. 그래서 OEP를 알면 원본 파일의 분석이 가능하다고 한다. 일반적인 packer는 처음에 모든 레지스터들을 스택에 push한 뒤 unpack 작업을 위한 루틴을 시작한다고 한다. (백업용) unpack루틴이 끝난 후에 원래 프로그램의 entry point를 시작하기 전에 처음에 스택에 저장한 레지스터들을 pop하는 형식이다. (pushad와 popad가 한쌍이 된다) 처음 push로 스택에 레지스터들을 올려놓은 후 EDI 레지스터에 bp를 걸면(F2) unpack루틴이 끝난 후에 프로그램을 시작하기 위해 레지스터드를 p..

파일을 실행시켜보니 이름 입력받고 시리얼을 입력받고 종료된다. readme 텍스트에는 시리얼 번호가 5B134977135E7D13일 때의 이름을 찾으면 된다고 한다. IDA로 분석해보자. 보니까 v9에다가 이름을 입력하고 이걸 가지고 v13에 시리얼 번호를 만들어서 저장한다. 그리고 시리얼 번호를 v9에 입력하고 이름으로 만들어진 시리얼 번호랑 같은지 확인하고 같으면 정답을 출력한다. xor은 역연산이 같으니까 시리얼 넘버를 넣어서 하면 될 것 같다. v6에는 16이 들어가 있다. 16 == 0x10 그리고 i=3이후부터는 i=0이 되니까 3의 배수일 때는 그냥 v6. 그러면 v6+i가 될 수 있는 값은 v6+0 v6+1 v6+2의 반복일 것으로 추측된다. 아! 노우!!! &v6!! v6+1은 v7인데 ..

우리가 로그인을 하고 f5로 새로고침을 한다고 해서 로그아웃이 되지 않는다. 그 이유는 client가 server에게 지속적으로 우리가 누구인지 알려주기 때문이다. 이때 사용하는 것이 쿠키 또는 세션이다. 쿠키는 key-value의 쌍으로 이루어져 있다. 먼저 server는 미리 client의 요청에 요청자를 추정할만 정보를 쿠키로 만들어 보내고 client는 그 쿠키를 받아서 다음부터 그 쿠키와 함께 server에게 request를 한다. 그러면 server는 그 쿠키로 요청자를 확인할 수 있다. (+브라우저는 쿠키가 있다면 자동으로 동봉해서 보내준다.) 쿠키는 req.headers.cookie에 저장되어 있다. 간단하게 쿠키를 만들어서 삽입하고, 쿠키를 확인하는 코드를 보자. const http = ..

파일을 실행시켜보니 입력을 받고 WIN을 출력한다. checksec로 보호기법을 확인해봤는데 NX가 걸려있다. 쉘코드로 공격은 불가능하다. (aslr걸려 있는 문제) objudmp로 함수가 무엇이 있는지 확인해보니 등이 있었다. IDA로 main함수를 확인해봤다. 어떤 함수를 출력하고 WIN을 표준출력으로 write한다. 아마 저 함수는 scanf 또는 read와 같은 입력함수 일것이다. 저 함수에 들어가보니 read함수임을 확인할 수 있다. buf에 0x100만큼 입력받는 것을 확인할 수 있다. buf가 0x100보다 작은 크기라면 bof가 가능할 것이다. 그런데 IDA에서 buf는 ebp-0x88이라고 하니 bof가 가능하다. (0x88+4만큼 덮으면 RET 덮기 가능) read plt의 주소는 0x..

Routing : URI 및 특정한 HTTP 요청 메소드(get, post, put, delete 등)인 특정 엔드포인트에 대한 클라이언트의 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 의미한다. 다음과 같이 express.Router 클래스를 사용하면 모듈식 마운팅이 가능한 핸들러를 작성할 수 있다. 여기서는 admin/이후의 get요청을 정의한다음 export해서 총 관리를 담당하는 app.js에서 해당 라우터 모듈을 마운트해서 use를 통해 간편하게 정리된 모습으로 사용할 수 있다. 응답 메소드 메소드 설명 res.download() 파일이 다운로드 되도록 프롬포트 res.end() 응답 프로세스 종료 res.json() JSON 응답 전송 res.jsonp() JSONP 지원을 통해 JSO..

Express : Node.js를 위한 웹 프레임워크의 일종이다. express를 사용하는 이유는 크게 다음과 같이 2가지가 있다. 1. 웹서비스 관점 2. 프레임워크 선정 시 고려 사항 웹서비스 관점에서 express를 사용하지 않는다면 http 내장 모듈을 받거나 url을 호출할 때 session처리가 귀찮다는 단점이 있는데 express를 사용하면 다른 사람들이 만들어 놓은 웹프레임워크를 가져다 사용할 수 있어서 편리하다. 또, 개발 방법에 일정한 규칙/제약이 있어 코드의 통일성을 갖출 수 있다. 많은 프레임워크 중에 express를 하는 이유는 가장 많이 사용하고 있는 웹프레임워크이기 때문이다. 그래서 다른 개발자들도 대부분 express를 사용할 수 있고, 취약점이나 버그에 관한 referenc..