목록분류 전체보기 (66)
ghkdtlwns987
smallbin smallbin -> 이중 연결리스트, FIFO 구조 사용 smallbin 의 크기는 512 바이트 미만 ( smallbin bk; if (__glibc_unlikely (bck->fd != victim)) { errstr = ..
unsorted bin unsorted bin 은 다음에 정리할 small bin 과 large bin 크기의 힙 chunk 가 해제되면 이후 재할당을 위해 사용되는 bin이다. -> unsorted bin 의 개수는 1개이다. -> unsorted bin 은 FIFO 구조를 사용한다. 다음은 unsorted bin 코드를 분석해 보도록 하겠다. /* Take now instead of binning if exact fit */ INTERNAL_SIZE_T nb; /* normalized request size */ checked_request2size (bytes, nb); size = chunksize (victim); if (size == nb) { set_inuse_bit_at_offset (vi..
워게임 푸는데 뭔가 제데로 알고있다고 생각되지 않아서 다시 정리하고자 한다. Fastbin : 작은 크기의 heap chunk를 할당하고 해제할 때 사용하는 bin이다. Fastbin 의 특징 -> 단일 연결 리스트 사용 -> 할당 및 해제 속도가 빠름 -> 할당, 해제시 LIFO (후입 선출) 방식으로 처리 -> 두 개의 청크가 인접해 있어도 하나의 청그로 병합되지 않음. 다음은 free 소소코드의 일부다. if ((unsigned long)(size)
대충 이런 페이지를 하나 만들고 DNS 스푸핑으로 이 사이트로 유도 해보고자 한다. 방법이 여럿 있는데, 난 ettercap 을 이용해 보겠다. /etc/ettercap/etter.dns 파일을 열고 www.naver.com '공격자 ip'를 적어주자. sudo ettercap -G 이런 창이 뜬다. 여기서 빨간 네모 친 부분을 클릭하면 시작된다. 시작하면 plugins 를 클릭하면 Manage 어쩌고가 있는데, Manage 클릭 dns_spoof 더블클릭 빨간색 네모는 피해자 Gateway, 노란색 네모는 피해자 IP 이다. 각각 Target 1, Target2 에 넣어주면 된다. 그리고 피해자 PC 에서 naver.com 에 들어가 확인해 보자. 페이지가 연결되지 않는다. naver.com 으로 pi..
main 함수에 이거밖에 없다. 심지어 puts() 함수나, write, printf() 같은 함수도 존재하지 않는다. 대충 rtc + syscall 로 풀어야 한다. 우선 __libc_csu_init 을 살펴보자. 빨간, 노란색을 사용하면 될거다. from pwn import* import argparse context.arch='amd64' context.log_level = 'debug' context.terminal = ['tmux','splitw','-h'] parser = argparse.ArgumentParser() parser.add_argument('-r','--remote', action = 'store_true',help='-r -> remote') args = parser.parse..
모의해킹 실습을 해 보자. 먼저 피해자 컴퓨터는 원도우 7이고, 방화벽 적용X, 웹 서버 X 인 상태로 진행할 것이다. 실습을 진행하기 앞서, Vmware 에서 NAT 설정을 꼭 해주어야 한다. 또한, 피해자 컴퓨터(윈도우) 에서 방화벽 해제를 하도록 하자. (윈도우 방화벽은 ping-icmp 를 차단하기 때문) 만약 방화벽을 해제하지 않으면 피해자 PC(윈도우) -> 공격자(Kali) 까지 ping 은 나가는데, 공격자 PC(Kali) -> 피해자(윈도우) 의 핑은 나가지 않게 된다. (왜그런지 모르겠으면 방화벽에 대해 공부하고 오자.) 쨋든 위와 같은 환경을 구축했으면 서로 ping 이 나가는지 확인해 보자. 서로 ping 이 나가는지 확인했으면 이제 arp_spoofing, ip_spoofing, ..
VM 끼리 ARP 스푸핑같은 네트워크 부분을 공부해보고는 있는데, 라우팅은 되는데, 이상하게도 패킷 전송이 안됬었다. 이럴때 리눅스 패킷 포워딩을 해주어야 한다. echo 1 > /proc/sys/net/ipv4/ip_forward 위 방법은 재부팅되면 초기화 된다. 그래서 /etc/sysctl.conf 파일에서 net.ipv4.ip_forward=1 라고 되어있는 주석을 해제해 주어야 한다. 이후 sysctl -p 를 입력해 주면 된다. sysctl -a | grep forward 이렇게 확인할 수 있다.
glibc 가 2.23 이다. main 더보기 int __cdecl main(int argc, const char **argv, const char **envp) { char nptr; // [esp+Ch] [ebp-2Ch] unsigned int v4; // [esp+2Ch] [ebp-Ch] v4 = __readgsdword(0x14u); init(); welcome(); while ( 1 ) { menu(); __isoc99_scanf("%s", &nptr); switch ( atoi(&nptr) ) { case 0: puts("Invaild choice"); exit(0); return; case 1: openfile(); break; case 2: readfile(); break; case 3: ..
ARM 은 IDA 에서도 알아서 해주는데, gdb에서는 잘 안된다. (보기에도 불편하고...) 그래서 gdb에서도 분석할 수 있도록 글을 적고자 한다. (Ubuntu18.04) 1. gcc 설치 sudo apt-get install gcc-7-multilib-arm-linux-gnueabi -y sudo apt-get install gcc-7-multilib-arm-linux-gnueabihf -y 2.qemu 설치 sudo apt-get install qemu-user-static sudo apt-get install gdb-multiarch 보통 여기까지 설치하고 나면 기존에 실행안되던 ARM 프로그램들이 작동 될 것이다. 혹시 안된다면 qemu-arm-static -L /usr/arm-linux-g..
int __cdecl main(int argc, const char **argv, const char **envp) { signal(14, timeout); alarm(60u); memset(&myCart, 0, 0x10u); menu(); return handler(); // main 함수 종룧 후 실행 } main 함수는 다음과 같다. memset 함수를 보면 &myCart 를 초기화해 주는데, myCart 가 뭐하는 건지 한번 보도록 하자. 음... 그냥 .bss 영역에 존재하는 전역변수라는 정도만 알아두도록 하자. (구조체일 수도 있다. 분석해보면서 뭐하는 변수인지 알아보자.) handler() 더보기 unsigned int handler() { char nptr; // [esp+16h] [ebp..