일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kangsecu
- xcz
- 정보보호
- 포너블
- 버그바운티
- 블록체인
- 네퓨즈
- 워게임
- CTF
- 선린인터넷고등학교
- webhacking
- WarGame
- 자료구조
- 해킹
- webhacking.kr
- 문제풀이
- 프로그래밍
- nefus
- 정보보안
- 코드게이트
- C언어
- 포렌식
- 시스템
- 웹해킹
- Pwnable
- DVP
- wargame.kr
- 보안
- hacking
- 버그헌팅
- Today
- Total
목록분류 전체보기 (110)
kangsecu's B1og
이번에는 libc가 같이 제공이 안될경우 libc를 찾아서 문제를 해결하는 방법에 대하여 알아보자. libc-database 다운 : $git clone https://github.com/niklasb/libc-database.git libc data 다운 : library download / pwd : libc-database > $./get 사용법 : 1. 함수로 libc 파일 찾기 : ./libc-database/find/ [함수이름] [함수주소] 2. 함수 offset 찾기 : ./libc-databse/dump [id] [함수 이름] 3. ./libc-database/find/ [함수이름] [offset 3 bytes] function_addr = libc-base_addr + offset인데 ..
One_gadget이란 하나의 가젯만을 이용해서 쉘을 딸 수 있는 가젯이다.got overwrite를 할 경우 많이 사용되며 /bin/sh을 립시 파일 내에서 실행하는 가젯이다. one_gadget install : > apt install ruby > gem install one_gadget 사용법 : one_gadget "libc file" ex) one_gadget /lib/x86_64-linux-gnu/libc.so.6
BFS - 인접 리스트 #include #include #define TRUE 1 #define FALSE 0 #define MAX_VERTICES 50 typedef struct GraphNode { int vertex; struct GraphNode *link; } GraphNode; typedef struct GraphType { int n;// 정점의 개수 GraphNode *adj_list[MAX_VERTICES]; } GraphType; // 그래프 초기화 void graph_init(GraphType *g) { int v; g->n = 0; for (v = 0; vadj_list[v] = NULL; } // 정점 삽입 연산 void insert_vertex(GraphType *g, int v..
bubble sorting #include #include #define MAX_SIZE 10000 #define SWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t)) int i; int list[MAX_SIZE]; void buble_sort(int list[],int n){ int cntA, cntB, temp; for(cntA = n-1;cntA >0; cntA--){ for (cntB=0;cntBlist[cntB+1]) SWAP(list[cntB],list[cntB+1],temp); } } } void main(){ int i; int list[MAX_SIZE]; int n =MAX_SIZE; for(i=0;i
이번에는 조금 팁? 같은 거다. 뭐 plt나 got를 주소를 알 수 있지만, 우리가 보는 여러 가지 함수들의 이름도 메모리 내에 적재되어 있기 때문에 이를 이용해서 공격을 진행하는 것이다. 그중 .dynstr 섹션의 함수들의 네이밍을 보면 여러 가지 문자열로 이용할만한 것들이 있다. 예를 들어서 가장 많이 사용하는 것은 /bin/sh 같은 걸 사용할 수 없을 때 fflush함수 등에서 sh를 가져다 사용하는 것이다. 이걸 system인자로 넘겨서 sh을 사용할 수 있게 된다.
드디어 rop를 정리한다. 공부해가면서 계속해서 내용을 추가할 예정이다. 이전 내용 복습 - 간단하게 RTL Chaining을 훑고 가보자. RTL Chaining은 RTL을 pop ret을 이용해서 여러 함수의 호출을 연계하는 것이다. 예를들어 read함수를 이용하여 bss영역에 /bin/sh을 입력하고 이를 system함수의 인자로 넘겨주기 위해서는 dummy + sfp + read@plt + pop pop pop ret Gadget + 0x0 + &bss + 0x8 + system@plt + pop ret Gadget + &bss 이렇게 페이로드를 구성하고 read는 0일때 표준입력이니까 이를 이용해서 bss에 /bin/sh을 넘겨주면 된다. - bss영역을 조회할때는 아이다로 보거나 readelf..
1. Poet binary : get_poem.c : rate_poem.c : reward.c : 대충 보면 그냥 poem을 입력받아서 1000000점을 넘기면 플래그를 준다. 위에 rate_poem.c 에 있는 문자들을 입력하면 100점을 주는데 저걸로 1000000점을 채울 수 없다. 근데 점수를 저장하는 변수인 dword_6024E0이 bss영역에 있다. gdb로 rate_poem를 보면 100점을 늘려주는 부분이 strcmp를 하고 나서 rip + 0x201bae에 존재하는걸 알 수 있다. 즉 rip + 0x201bae == dword_6024E0이다. 그리고 get_author를 보면 unk_6024A0과 dword_6024E0의 거리를 구해서 만족할 점수를 넣어주면 된다는것을 알 수 있다. 그..
이번에는 폰툴을 이용하여 페이로드를 작성하면서 뭔가 굉장히 유용한데 가아끔 효율적인걸 까먹어서 그냥 정리하는 글을 작성하려한다.연결nc를 통해서 연결 : p = remote("접속주소", port)ssh로 연결 : s = ssh(“사용자이름”, “접속주소”, port=포트번호 , password=”비밀번호”)local에서 실행 : p = process("파일경로")받기1. recv(int) 그냥 int값 만큼 받아온다. ex) int(p.recv(10),16) > 10바이트를 16진수로 읽어오기 주로 주소가 변할 때 출력해주는 주소를 이용하기 위하여 사용한다.2. recvuntil(str)이건 뭔가 문자열이 출력된 후에 무언가를 전송해야할 때 해당 문자열을 받을때 사용한다. 무슨 말이냐,,,what is..