일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 블록체인
- kangsecu
- 코드게이트
- 시스템
- 포렌식
- 버그헌팅
- 문제풀이
- 보안
- 포너블
- 웹해킹
- wargame.kr
- 프로그래밍
- 정보보호
- hacking
- 해킹
- webhacking
- 버그바운티
- CTF
- 네퓨즈
- 선린인터넷고등학교
- xcz
- WarGame
- 자료구조
- 워게임
- nefus
- webhacking.kr
- C언어
- Pwnable
- 정보보안
- DVP
- Today
- Total
목록System (12)
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
이번에는 조금 팁? 같은 거다. 뭐 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..
포너블을 공부해봐야겠다고 생각한 이후로 처음으로 CTF에서 문제를 푼 것 같지만... 너무 쉬운 문제라 별로 감흥이 없다. 이전 워게임들이 더 어려운 것 같다. 아무튼.. 그래도 기념삼아,, binay : 여기서부터 RTL의 느낌이 강하다고 생각했다. main.c : get_flag : a1값이 죽은소고기가 되면 해결인데 main이랑 호출관계가 없다. -> RTL exploit : 0x4005ea는 get_flag의 주소이고, 0x400693은 pop_rdi; ret 로 rop가젯이다. 그리고 그 뒤에 인자로 죽은소고기를 넣고 get_flag를 실행 main에서 바로 get_flag를 호출할 수 없고, get_flag를 호출하기 전에 a1값에 인자로 죽은소고기를 넣어줘야하기 때문에 ropgadget이 사..
1. bof_pie binary : main은 볼게 없다. 들어가자마자 welcome이 실행됨 welcome : j0n9hyun : 대충 페이로드가 생각이났다. 근데 PIE가 걸려있어서 base주소로 할 수가없다. 그러므로 welcome_addr에서 welcome_offset을 빼서 base_addr을 구하고 거기에 j0n9hynun_offset을 더해서 j0n9hyun을 실행시킬 것이다. exploit : 2. yes or no binary : 3. RTL_world binary : NX가 있으니가,, RTL 을 하자 > 그냥 문제 이름도 RTL이다. main : 이 부분에서 bof가 발생하고 우린 여기서 rtl을 해주면 된다. exploit : 바이너리를 확인해서 dummy(144) + sys_add..