분류 전체보기 94

pwnable.kr fd write-up

ssh로 접속을 해보면 fd, fd.c와 flag가 있다. flag는 읽어보면 권한이 부족해서 읽을 수 없다. fd 바이너리에 fd_pwn으로 setUID가 걸려있다. fd.c를 읽어보면 command line argument 받아서 그 fd에서 0x1234를 빼서 읽고, LETMEWIN\n이면 flag를 읽어준다. proc 먼저 확인해보려고 들어갔는데 거부됐다. 그래서 ps도 안 먹힌다. /dev/fd를 들어가면 현재 프로세스의 fd를 확인할 수 있다. /dev/fd는 /proc/self/fd의 심볼릭 링크가 걸려있다. stdin, stdout, stderr인 0, 1, 2가 보이고, 다른 fd가 보인다. 여기서 이 프로세스의 fd를 확인할 수 있다. 파일에 LETMEWIN\n을 쓰고, ~/fd한테 그..

WARGAME/pwnable.kr 2022.08.14

리버싱 8차시 과제

rev-basic-6 sub_140001000에 들어가서 디컴파일한 거 보면 이렇게 되어있다. byte_140003020[a1[i]]와 byte_140003000[i]가 같으면 된다. byte_140003000[i]가 byte_140003020[] 배열 안에 있으면 된다. 위와 같이 코드를 짜서 byte_140003000[i]가 byte_140003020[] 배열 안에 있는지 확인하는 코드를 짜면 flag를 구할 수 있다. rev-basic-7 sub_140001000 들어가서 디컴파일 해보면 위와 같이 나온다. __ROL1__이 뭔지 몰라서 어셈블리어를 봤더니 rol 명령이 있는 것을 확인할 수 있다. 검색해보니 일반 쉬프트 연산이랑 비슷한데 쉬프트 하다가 비트가 넘어가면 반대편으로 다시 넣어주는 그런..

리버싱 7차시 과제

rev-basic-2 Correct와 Wrong을 판별해주는 함수가 있다. 그거 클릭하고 확인해보면 벌써 어셈부터 수상하다. aC 옆에 "C"가 있다. cmp 부분을 보면 4 * rax 만큼 더해서 비교한다. 비교하는 aC 눌러보면 4 bytes씩 align 되어있으니 아까 cmp에서 비교하는 거 생각해보면 이게 flag라는 것을 알 수 있다. rev-basic-3 함수 리턴값으로 correct와 wrong이 갈린다. 저 함수 들어가보면 var_18이 count 변수인 거 같고, byte_140003000에 var_18 더해서 1바이트를 eax에 넣고 var_18 + arg_0 1바이트랑 var_18 xor 해서 ecx에 넣고 rcx+var_18*2랑 eax랑 비교한다. 디컴파일한 거 보면 아까 거랑 다..

Kern Koh Kernel of Linux Interrupt 정리

Hardware Issues 기본적으로 CPU는 instruction fetch, decode, execute, write back 네가지 상태? 로 처리함 PC 증가시키면서 처리 보통 명령 4바이트라서 PC+4로 표현했음 interrupt request bit이 set 되면 register save 하고 PC에 interrupt handler를 집어넣음 즉 지금하던거 중단하고 interrupt 먼저 처리해주는것 IO devices가 많을때 Interrupt Controller를 사용하면 교통정리를 해줄 수 있음 시도때도 없이 막 interrupt request를 보내면 CPU가 효율적인 동작을 해줄 수 없음 프로그래밍 가능한 인터럽트 컨트롤러 대충 IMR에서 걸러진 IRQ들이 우선순위대로 잘 맞춰져서 ..

OS, Kernel 2022.08.06

리버싱 6차시 과제

ELF ELF? ELF는 Executable and Linkable Format의 약자로 말 그대로 Linkable과 Executable의 포맷이다. 간단하게 말하면 Linux/UNIX 실행파일이다. Linking View, Execution View linking전에 object file들이 relocatable file일때가 linking view이다. linking 끝나고 executable이 되면 execution view다. 그냥 말그대로 executable(실행가능)이되서 executable file이라고 부른다. 둘 다 ELF다. Executable header, Program header, Section, Section header ELF Header(Executable Header) 이 ..

리버싱 5차시 과제

imul - imul은 Signed Multiply다. - 여기선 IMUL r/m32에 해당되니 그것만 보면, - register/memory 32비트, 즉 4바이트짜리끼리 연산할 때 EAX * r/m doubleword(4바이트)를 EDX:EAX로 넣는다. - EDX:EAX notation은 상위 4바이트를 EDX에, EAX에 하위 4바이트를 저장한다는 의미다. sar, sal, shr, shl - sar은 shift arithmetic right이다. - sal은 shift arithmetic left이다. - shr은 shift right이다. logical shift를 말한다. - shl은 shift left이다. logical shift를 말한다. - arithmetic shift는 기본적으로 ..

EFLAGS OF(Overflow Flag) VS CF(Carry Flag)

CF는 Carry가 일어나면 set되고 OF는 Overflow가 일어나면 set된다고만 알고 있었는데 헷갈려서 찾아보았다. unsigned expression에서의 4-bit 연산을 보자. 1000 + 1000 = 10000은 최상단 비트가 carry된거라서 CF에 해당된다. unsigned expression은 부호 개념이 없어서 Overflow가 의미가 없다. signed expression에서의 4-bit 연산을 보자. 0111 + 0001 = 1000의 경우엔 MSB, 즉 Sign bit가 0에서 1이 되었으니 Overflow를 검출할 수 있고 OF에 해당한다. CPU는 signed인지 unsigned인지 구분이 불가능하니 CF와 OF는 독립적으로 set된다. 1000 + 1000 = 10000 ..

SYSTEM HACKING 2022.07.31