COMPUTER435 rop2-ROP+SROP rop+srop- ROP2문제는 작년에도 풀었다.작년에는 가젯을 이용해서 got에 담긴 실제함수값의 주소를 바꿨다면, 이번에는 SROP를 이용했다. gadget2와 gadget1을 이용해서 bss영역에 /bin/sh 를 박아줄 수 있다.bss영역은 처음부터 null로 채워져 있으니까, add에다가 (0x6e69622f)와 (0x68732f2f)을 해줘서 /bin//sh를 만들어줄 수 있다. 그 다음, eax에 119를 넣어줘서->sigreturn sigreturn이 실행될 때, 스택에 있는 값들이 레지스터에 pop되는데,여기서 eax는 11이 되도록, eip는 int 80이 되도록, 그리고, CS와 SS를 맞춰줘야 한다. CS와 SS에 값 때문에 계속 Segmentation Fault가 떴다. 64비트에.. 2018. 1. 5. JAVA 겨울방학 8일차 Stream을 가지고 동작Java program에서 데이터를 외부로 내보내거나 외부에서 데이터를 읽어들이기위해 사용하는 데이터 연결 통로 1. Stream은 단방향입력을 하기 위한 Stream( InputStream class )출력을 하기 위한 Stream (OutputStream class )위의 두마리는 기본 Stream이기 때문에 사용이 상당히 불편하다.조금 편하게 사용하기 위해서 추가적인 Stream을 제공InputStreamReader classPrintWriter class 파일처리를 하려면 어떻게 해야 할까?FileInputStram classFileOutputStream Class 2. FIFO구조먼저보낸 데이터가 먼저 도착하는 구조 3.Stram을 편하게 사용하기 위해서 Stream을 .. 2018. 1. 4. JAVA 겨울방학 7일차 Thread Scheduler: 공정한 형태로 Thread를 실행 ex)Round Robin 공정하지 않으면 특정 thread가 starvation에 빠짐 Java10(Stream 기반)-Stream은 데이터의 연결통로-입력통로와 출력통로가 따로 존재(입력스트릠과 출력스트림) (InputStream, OuyputSream)데이터가 한쪽 방향으로만 흐른다.하나의 통로를 이용해서 데이터를 보내고 받을 수 없다 package JavaThread; //이 클래스로부터는 instance를 우리가 원하는 만큼 외부에서 생성할 수 있다.//프로그램적으로 해당 클래스로부터 instance를 딱 1개만 생성하도록 제한을 걸 수 있다.->싱글톤 class Exam06_Shared{private static Exam06_S.. 2018. 1. 4. JAVA 겨울방학 6일차 1. Multi ProcessingCPU안에 Core라는게 있는데 실제 프로그램은 core가 실행해준다.Single Core=>cpu안에 core가 1개 있다. 따라서 single core에서는 멀티프로세싱이 일어날 수가 없다.multi processing은 core가 두개 이상일 때 의미를 가지는 용어 2. Multi Tasking Core의 개수와는 상관이 없다.시분할(Time Slicing)을 통해 시간을 쪼개서 짧은 시간동안 여러 프로그앰을 번갈아 실행시켜 마치 동시에 실행시키는 효과를 얻는 것 3. Multi Threading하나의 프로그램이 여러 단위 Thread로 구성되어 있고이 Thread가 마치 동시에 실행이 되는 것처럼 동작시킬 수 있다4. 프로세스 OS에서 실행중인 하나의 Applic.. 2018. 1. 3. rop1-ROP+SROP 작년에는 이 문제가 그냥 hello world를 출력하는게 문제였는데,이번에는 쉘까지 땄다. 바로, SROP를 이용하면 된다! SROP를 이용하기 위해서는 일단 /bin/sh의 문자열이 필요하다.이는 작년에 풀었던 것처럼 주어진 가젯을 이용했다. popa와 rep stosd를 이용했는데 popa로 레지스터값을 조정하고, rep stods로 원하는 곳에 /bin/sh를 적었다. rep - ecx stosd - eax, edi 이런식으로 연결된다고 보면 된다. rep -> ecx값 만큼 반복적으로 명령을 수행 stosd -> eax에 담긴 값을 edi에 복사함 출처: http://msparkms.tistory.com/entry/4Byte-Memset-구현 [MSPark's Blog] 그 다음, SROP를 이.. 2018. 1. 2. 2015410212-64비트 쉘코드, 간단한 xor 64비트 쉘코드, 간단한 xor- 취약점은 main함수에 있는 call rdx 여기서 rdx는 addr에 담긴 값(0x616267307264)이다 init함수에서 이 부분은 rwxp의 권한을 갖게 된다. 따라서, 이 곳에 쉘코드를 넣어주면 된다! Enter your code: 해서 이 곳에 원하는 만큼 입력을 받는다. 하지만 문제는 mapping부분에서 xor로 이 부분을 망쳐놓는다는 점이다. 따라서, 어떻게 xor이 이루어지는지를 분석해서 코드를 짜서 쉘을 따는 데에 성공했다. 이 부분은 간단한 xor연산 과정이다! from pwn import *payload=""shellcode="\x50\x48\x31\xd2\x48\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x6.. 2018. 1. 2. rain_dROP-카나리 릭, 메모리 릭 rain_dROP문제는 main함수와 WriteName함수, ReadName함수로 이루어져 있다. WriteName함수에서 입력을 받는다. 그리고 *MK_FP(__GS__, 20)부분이 있는데, 마지막에 특정 메모리 영역이 조작되어 있는지 아니면 기존의 값을 잘 유지하고 있는지 확인해준다. ReadName함수에서는 Name을 출력해주는데, 이때, 뒤에 나오는 메모리도 같이 딸려 나올 수 있도록 메모리 릭을 해준다. 128자를 채워주면 바로 뒤에 나오는 4바이트가 카나리 영역이다. 이 부분을 건드리지 않은 채로 ReadName함수로 넘어가는데, 이렇게 ReadName에서 카나리 영역을 알아내고, 그 다음 4바이트가 나오고 그 바로 다음 4바이트는 f7~로 시작하는 libc기반 주소가 나온다. 이렇게 카나리.. 2018. 1. 2. derby-카나리 릭 derby문제에서 아이다로 확인을 하면, 큰 입력을 받는 부분(read(0,s,0x134u)이 game()&&(unsigned int)score > 0x1D979의 if문을 통과해야 도달할 수 있다. game()이 참이 되려면, game함수에서 return값이 1이 되어야 하고, 이는 7번 메뉴를 선택해야 한다. 7번 메뉴는 숨겨진 메뉴라고 볼 수 있다. score또한 조건을 만족해야 하므로, 100%의 확률로 도달할 수 있는 것은 아니다. 이때 read함수로 입력을 크게 받으므로 return address까지 덮을 수 있다. 하지만 문제는 이 부분을 통과해야 조작한 리턴 어드레스에 도달할 수 있다는 점이다. 우리는 random_bak에 적힌 값을 알아야 한다. read(0,s,0x134u)부분에서 s는.. 2018. 1. 2. 2015410208-got overwrite 취약점은 v2*v2>1600만 확인하는 부분이다!그렇다면 음수나 0이어도 상관이 없다는 것이다! v2+40*v1+0x804a0a0=count를 이용하자v1에 0을 넣고 v2에는 원하는 음수 값을 넣으면 got overwrite이 가능하다(count는 v0, v1,에 0을 넣는 것을 반복하여 원하는 count를 만들어줄 수 있다.) system이 주어졌으므로, fgets의 got 2018. 1. 2. 이전 1 ··· 28 29 30 31 32 33 34 ··· 49 다음