일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 웹해킹
- pwnable.xyz
- 리버싱
- 웹보안
- sequelize
- 네트워크
- Python
- 프로그래머스
- gcp ci/cd
- nodejs
- 사이버보안
- docker
- 백준
- gcp
- 스프링 배치
- kotest
- 시스템 해킹
- node.js
- cloud run
- gcp cloud build
- hackctf
- 보안
- 회고
- webhacking.kr
- 포너블
- Baekjoon
- spring Batch
- programmers
- 파이썬
- Batch
목록IT (112)
uju's Tech
풀이 혹은 코드를 올리기전(?) 많은 사람들이 작성하고 있는 write up을 올리는 이유를 스스로에게 다짐 할 겸 작성해보고자 한다. 원래는 백준 혹은 프로그래머스에서 문제를 풀고 작성한 코드를 github에 올렸었다. 이렇게 하고 나니 내가 어떠한 문제를 풀었는지 , 이 문제를 풀 때 어떠한 생각 및 사고로 풀었는지 알 수가 없었다. 또 그 문제를 풀 때 새로 알게된 내용도 있고 많은 고민을 하면서 푼 문제도 있다. 특히 예외처리의 문제의 경우 추후에 살펴볼 때 떠오르지 않을 때도 있었다. 이러한 여러가지 이유 때문에 앞으로 푸는 문제들은 블로그에 어떻게 생각하며 풀었는지 간단하게나마 작성해보려고 한다. ㅎㅎ 또.. 최근에 백준을 다시 풀기 시작하고 파이썬을 다루어 보는것이 생소한 만큼 작성하다보면..
table을 추가하고 칼럼을 추가하는 중 어떤 칼럼의 DataTyes를 json으로 지정해주어야 했다. 최신의 Mysql 버전은 DataTypes.json의 형태로 지원을 하고있다. 하지만 현재 개발하고 있는 Mysql 버전은 json 타입을 지원하지 않아 위와 같이 사용해 주지못한다. 그러면 어떻게 사용할 수 있을까? model에서 getter와 setter을 이용해주면 된다. 1.DataType에는 JSON 대신 TEXT를 사용해주자. 2.getter와 setter을 만들어주자. 아래와 같이 구현을 해줄 수 있다. value: { allowNull: true, type: DataTypes.TEXT, /** * @returns {null|any} */ get() { try { return JSON.pa..
이미 존재하는 테이블에 칼럼을 하나 추가해야하는 작업이 필요해졌다. 먼저 db 마이그레이션과 칼럼 추가를 위해 ./node_modules/.bin/sequelize migration:generate --name [파일명] 을 통해 작성해준다. 추가해야할 칼럼이 유니크 해야하기 때문에 unique : true로 설정해주었다. module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.addColumn('테이블 명', '추가할 칼럼 명', { allowNull: true, defaultValue: null, type: Sequelize.UUID, unique: true, }); }, down: async (queryIn..
개발 진행 중 1 to many의 관계를 갖는 두 db에서 동시에 데이터를 가져와야 하는 일이 발생하였다. 그냥 join을 사용하면 되지 않아? 라는 생각이 떠올라 sequelize의 include를 사용하여 개발을 진행하였으나 원하는 결과대로 출력되지 않았다. 현재 상황을 피드백해보면 creator 테이블에서 전체 데이터를 뽑아오고 emoticonPack 테이블에서 status 을 종류별 개수로 뽑아와야한다. status 칼럼은 3가지 enum으로 할당되어 있어 해당 creator가 어떠한 status를 가지고 있는지 각각 개수를 보여주어야한다. 처음에 시도했던 것은 join과 group by 를 이용하는 것이었다. creators = await Creator.findAll({ attributes: {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxCkOH/btqFBedigck/QFM7U4dtYFrQkXkyAmzPH0/img.png)
whoami 를 입력해보면 현재 사용자인 uju가 출력됨을 확인할 수 있다. ltrace whoami 를 이용하여 명령어가 실행되는 과정을 확인하자. 위의 사진과 같이 whoami 명령어가 puts 함수를 통해 uju를 출력해 주고 있음을 확인 할 수 있다. puts 함수의 원형은 int puts(const char *str) 이므로 원형 그대로를 이용한다. w_hok.c 파일에 puts 함수를 오버라이딩하여 작성해 준다. 해당 코드는 깃에서 확인할 수 있다. ~ 아래 링크로~ https://github.com/ujusy/C_Hooking ujusy/C_Hooking :bust_in_silhouette:l s, whoami hooking :bust_in_silhouette: - ujusy/C_Hookin..
리눅스 명령어 ls와 whoami를 인젝션을 해보고 싶었는데 구현한 코드를 로드 하려면 리눅스의 공유라이브러리가 어떻게 로드되는지 알아야한다. 나아가 이를 수행하기 위한 절차 또한 정리해보았다!! 먼저 리눅스는 프로그램 실행 시 공유 라이브러리가 프로세스 공간에 로딩이 된다. 동일한 라이브러리의 경우 가장 먼저 로드 되어진 것만 사용이 된다. 결과적으로 리눅스에서 공유 라이브러리의 로딩 순서는 아래와 같이 갖는다. Dynamic Section 중 need가 설정된 라이브러리 LD_LIBRARY_PATH /etc/ld.so.conf 표준 라이브러리 경로 만약 LD_PRELOAD로 라이브러리를 설정하면 가장 1순위의 라이브러리가 로드된다. 따라서 어떤 특정 라이브러리를 로드하는지 알고 이를 LD_PRELOA..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvR1sK/btqFvfRk0ye/pNxyeXYIAXd5S8b53VYdg0/img.png)
특정한 파일이 보이지 않도록 (ls) Injection을 진행해보았다. 앞서 원리를 알고싶다면 아래 포스팅을 참고! https://uju-tech.tistory.com/43 [Injection] 리눅스 공유라이브러리 로드 리눅스 명령어 ls와 whoami를 인젝션을 해보고 싶었는데 구현한 코드를 로드 uju-tech.tistory.com 정확히 말하면 Injection이지만 Hooking의 개념이라고 볼 수 있기에 Hooking이라고 제목을 지어보았다. ㅎㅎ 필자는 ls_hooking.c라는 파일을 해당 디렉토리에서 볼 수 없게 하고 싶었다. ltrace ls를 통해 ls 명령어가 어떠한 구조를 갖고 실행되는지 살펴보자. 살펴보니 memcpy가 동작하여 각 파일명을 copy하여 동작함을 볼 수 있다. 그..
원래 response 되는 형태를 살펴보자. { "id": 1, "name": "My1", "sales": 123, "tag": 1 } 이러한 형태로 반환되는 객체에 recommendation이라는 속성을 추가하여 반환하고 싶었다. 이를 위해서 먼저 recommendation이라는 배열을 만들어주고 push를 해주었다. 이 부분에 대해서는 따로 포스팅 하도록 하겠다. push를 해주어 recommendation 배열을 만들어 주었는데 원하는 형태로 추가되지않고 아래와 같이 출력되었다. data : { ... } recommendation : { ... } 요구된 응답 형태는 아래와 같다. { "id": 1, "name": "My1", "sales": 123, "tag": 1 "recommendation"..