일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 ci/cd
- Python
- webhacking.kr
- 프로그래머스
- docker
- 회고
- 시스템 해킹
- pwnable.xyz
- programmers
- 네트워크
- nodejs
- 포너블
- 웹보안
- Baekjoon
- sequelize
- 파이썬
- 웹해킹
- gcp cloud build
- kotest
- 사이버보안
- 백준
- 스프링 배치
- Batch
- cloud run
- gcp
- 보안
- hackctf
- 리버싱
- spring Batch
- node.js
목록전체 글 (112)
uju's Tech
https://uju-tech.tistory.com/25 위 링크에 대한 쉽게 푸는 풀이이다.. 정공법(???) 으로 푼 풀이..?이고 이번에는 약간 쉽게가자!풀이입니다! main함수 main함수를 확인해보면 이 부분에서 1이어서 0과 비교했을 때 같지 않아서 flag를 뛰어넘었습니다!! 라는 문구가 띄워진다.. 그렇다면 저 1을 0으로 바꾸면?? 바로 flag가 출력될것이다!! 그럼 ida에서 바꿔서 flag를 바로 띄워보잣!! ida에서 값을 바꾸고 fetch한다음 실행할 것이다. 바꿀 값에서 오른쪽 마우스를 눌러 synchronise with hex view를 누르자. hexview클릭! 그리고 hexview로 이동! 이동하면 해당 변수의 부분이 초록색으로 나타내준다. 수정 후 모습 수정을 하려면 ..
먼저 실행 파일을 다운 받자..! 우분투에서 먼저 파일 포맷을 확인해보자! 파일 확인 elf 64bit 실행파일임을 확인했다. 실행을 위해 777권한 부여!! 이제 실행해 보자 실행! 근데 ... flag를 뛰어넘었습니다 라는 문구가 나오면서 끝난다.. 그렇다면 ida로 파일을 살펴보자..!! ida 음 flag is %s 를 보면 string값을 가져와서 출력하는 것을 알 수있다. 그 string을 받아오는 곳이 loc_400544이다. 이 부분을 중심으로 살펴보자..! 함수를 보면 string과 array라는 2개의 배열이 있고 2개의 배열에 값을 더해준다,,string과 arryay를 더블 클릭해보니 data영역 뿅 하고 데이터 저장되어 있는 부분이 나온다,, 위의 사진은 array! 위의 사진은 ..
SELECT 역순 정렬하기 문제 답안 SELECT NAME,DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC 풀이 NAME과 DATETIME 뽑아야하므로 SELECT NAME,DATETIME FROM ANIMAL_INS (ANIMAL_INS테이블로 부터) ORDER BY ANIMAL_ID 로 정렬 DESC:역순으로
SELECT 모든 레코드 조회하기 문제 답안 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID FROM ANIMAL_INS 테이블에서 전체를 가져온다(*) ORDER BY: ANIMAL_ID 정렬
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..
ida로 main함수를 띄워보았다. vtable의 주소에서 v3만큼 더해준 주소를 호출한다는 것인데 flag를 보여주는 함수를 가져와주면 될 것 같다. 메뉴에서 1.malloc을 들어가면 size를 입력받는데 이 size에 flag를 보여주는 함수 주소를 입력해주자. 그리고 vtable에서 -2를 하게되면 size를 가리키게 된다는 점을 ida를 통해서 확인했다. (0x6020c0-0x6020b0=16/8=2byte) flag를 보여주는 함수를 찾아보자. flag가 있는 함수의 주소는 0x400a31이다. 0x400a31을 10진수로 나타내면 4196913이다. size에 4196913을 입력해주고 메뉴2번인 free로 들어가서 size를 가리키게 만들어주자. 그럼 문제를 풀어보자! 끝!
위에서 memset함수는 어떤 메모리의 시작점 부터 연속된 범위를 어떤 값으로 모두 지정하고 싶을 때 사용하는 함수이다. 따라서 1바이트마다 0으로 초기화하고 98바이트를 반환한다는 뜻이다. V5+7을 0xdeadbeef--->0xb000000b5 로 바꾸어주면 win함수 실행 7바이트를 더했고 리틀엔디안 방식으로 저장되었으므로 스택에 저장되는 구조를 생각해보면 이런식으로 쌓이는 것을 알 수 있다. 먼저 위에 진한 초록색 부분인 0xb500000000000000의 msb가 1이여서 음수라는 것을 알수있다. 이 경우 10진수는 0xb500000000000000의 보수+lsb에 1을 더해준 값이다. 보수표현으로 바꾸어주면 위의 사진과 같이 표현할 수 있다. 위의 사진에서 lsb에 1을 더해주면 0x4b000..
"Menu:\n 1. Change name.\n 2. Change nationality.\n 3. Change age.\n 4. Get shell. 스택 카나리로 인해서 ret함수를 덮지 못한다. 2.nationality에서 받는 v7을 오버플로우시켜 v8을 덮도록하자 V7=0x40 V8=0x10 0x40-0x10=16(dec) 16bytes를 dummy 값으로 채우고 v8에 got의 strncmp함수의 주소를 적어준다. Win함수=0x40099c=4196764 D =0x401d6e Got함수=0x603018 익스플로잇을 짜보자! 끝! 역연산으로도 풀수 있다고 하는데 잘 모르겠다 ㅋㅋㅋㅋㅋ.....ㅜㅜ