일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gcp cloud build
- docker
- 웹해킹
- 백준
- 회고
- gcp ci/cd
- 네트워크
- pwnable.xyz
- sequelize
- webhacking.kr
- 포너블
- spring Batch
- kotest
- Baekjoon
- 스프링 배치
- 시스템 해킹
- programmers
- node.js
- 웹보안
- 사이버보안
- 프로그래머스
- hackctf
- Batch
- nodejs
- 보안
- cloud run
- Python
- gcp
- 파이썬
- 리버싱
목록Programming/C 언어 이모저모 (6)
uju's Tech
소켓 통신을 할 때 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하여 동작함을 볼 수 있다. 그..
Stack(스택) Last In First Out :가장 마지막에 들어온 값이 가장 먼저 제거된다. 한 쪽에서만 자료를 넣고 제거할수 있다. 스택을 배열로 구현할 수도 있고 연결 리스트를 이용하여 구현할 수 있다. #include typedef struct Stack Node; //Stack을 Node 라고 정의 typedef int element; struct Stack{ element data; struct Stack *link; //자기참조 구조체로 노드를 정의해준다 }; Node *top=NULL; //top을 널값으로 초기화 void push(element data){ //stack에 data집어 넣기 Node *ptr=(Node*)malloc(sizeof(Node)); //노드 동적 할당 p..