일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- gcp cloud build
- sequelize
- 백준
- Batch
- 웹보안
- Python
- 웹해킹
- 파이썬
- hackctf
- 시스템 해킹
- nodejs
- webhacking.kr
- gcp
- 스프링 배치
- 포너블
- pwnable.xyz
- node.js
- 프로그래머스
- kotest
- programmers
- Baekjoon
- spring Batch
- gcp ci/cd
- docker
- 보안
- 네트워크
- 리버싱
- 사이버보안
- cloud run
- 회고
목록Programming (14)
uju's Tech
반년 넘게 ... 미뤄오던 포스팅 주제.. 드디어 작성합니다..... :--( 우리는 요구사항을 구현하고 우리가 기대한 대로 동작하는지 확인하기 위해 테스트를 작성한다. 🤔 그런데 내가 테스트하고 싶은 코드가 테스트하기 어렵다면 어떻게 테스트할 것인가? 테스트하기 어려운 코드는 데이터베이스나 외부 API 등 외부의 무엇인가에 의존하고 있는 코드일 수도, 랜덤한 값에 의존하는 동작이 있는 등 동작 자체를 예측하기 어려운 코드일 수도 있다. 예제를 통해 알아보자 주사위를 굴려 나온 눈의 숫자가 3 이하면 한 칸을 이동하고, 4 이상이면 두 칸을 이동한다는 요구사항이 있는 게임을 구현한다고 하자. 이를 간단하게 구현한다면 아래와 같은 코드를 떠올릴 수 있을 것이다. 그러면 이 코드를 테스트하려면 어떻게 해야할..
Junit의 parameterize test가 kotest에서는 data driven testing 라는 이름을 갖는다. Data Driven Testing은 테스트를 작성할 때 직접 작성한 예제를 기반으로 테스트를 할 수 있다. 앞서 포스팅했던 Property Based Testing 인 광범위한 범위의 데이터를 무작위로 테스트하는 경우와 반대되는 경우에 사용할 수 있을 것 같다. 명확하게 해당 인자가 들어갈 경우 에러를 발생한 다거나 무조건 성공해야하는 예제를 직접 명시하여 테스트할 때 Data Driven Testing을 잘 사용할 수 있을 것 같다. Dependecy 추가 사용하는 버전은 알맞게 작성해주자. testImplementation("io.kotest", "kotest-framework-..
이번에 next step (https://edu.nextstep.camp/) 에서 이펙티브 코틀린~을 수강하게 되면서 kotest 로 테스트를 작성해보게 되었다. 강의가 Junit5 을 기본으로 설명하고있어서 kotest와 Junit5 중 어떤 프레임워크를 사용할지 고민을 했다. 결론은 kotest 를 도전해보기로했다. 일단 kotest를 선택한 이유는 kotlin을 위한 테스트프레임워크이기 때문에 kotlin dsl 을 완벽하게 지원하는점 (Junit5, kotest 둘 다 사용해보지 않는 사람의 시점에서) Junit5에 비해서 간결하고 보기 좋고 Kotlin스럽게 코드를 작성할 수 있는 점 등으로 kotest 를 선택해서 테스트를 진행했다. 그리고 kotest는 테스트 스타일을 지정할 수 있는데 나는..
소켓 통신을 할 때 ip, host, port 가 무엇인지 client가 접속하면 알려주고 싶었다. 처음에는 각각을 send함수를 통해 전달하였으나 문제점이 발생하였다. TCP Stream으로 send를 한 번에 여러개 받아들이지 못하여 가장 처음에 받은 데이터만 받는 상황이었다. 구체적으로 send를 3번 recv를 3번 사용해 주었으나 동일하게 첫 번째 send만 전달이 되었다. 그래서 구조체를 한 번에 통신을 진행하고자 한다. (구글링을 해도 구조체 전송이 나오지 않아 애 먹었다. ㅎ..) 먼저 구조체를 선언해 주자.. struct SendPacket{ char ip[1000]; char host[1000]; char port[256]; }; 구조체를 전송하자.(Server.c) if (send(n..
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..
특정한 파일이 보이지 않도록 (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하여 동작함을 볼 수 있다. 그..
개발 중에 서비스에 따라서 Path가 변하도록 확장해주어야 하는 상황이 발생했다. 본론을 말씀드리기 전에 말씀드리면 이 방법은 채택하지 않았으나 이러한 방법도 있다는 것을 공유하기 위해 작성하였습니다. 선택한 방법은 다음 주에 포스팅을 진행하도록 하겠습니다! 간략하게 enum에 대해 소개해보자면 enumeration의 약자로 프로그래밍 언어에서 상수의 그룹을 나타낼 때 사용합니다. Java에서의 enum은 변수, 메소드, 생성자를 추가할 수 있습니다. enum의 첫 번재 라인은 상수 리스트가 되어야하고 메소드, 변수나 생성자가 올 수 있습니다, 모든 enum은 내부적으로 public static final로 정의 됩니다. Step1 . 먼저 enum을 생성해 주자! public class Services..