Profile

머리정리하는곳

c2w2m2

Pwntools 기본적인 사용법 - 1

그냥 간단간단하게 정리해서 모르는사람들한테 뿌리기 위한 용도로 써봅니다. 설치는 생략합니다.. 이미 많이 정리 해놓은게 많아서 그거 보고 하시는게 훨배 좋아영 먼저 중요한 연결부분입니다 1. NC 가장 많이 사용하는 nc 같은 경우는 remote( IP , PORT ) 형식으로 연결합니다. 여기서 IP 는 string 이고 PORT 는 int 형임에 주의합시다ex) p = remote("localhost", 1234) 2. Local 그다음 nc 다음으로 많이 쓰는 local 같은 경우는 process( PATH ) 식으로 연결합니다. PATH 는 마찬가지로 string 입니다 ex) p = process("./test") 3. SSH 젤 많이 안쓰지만 pwnable.kr 쓸 경우 많이 나옵니다. ssh..

Analysis ·

SROP

SROP 는 매우매우매우 간지나는 ROP 로 Super ROP 의 약자다 이상 잡소리였고 Sigreturn Oriented Programming 의 약자고 int $0x80 과 eax 컨트롤 만으로 모든 레지스터를 컨트롤 가능하게 해주는 매우 갓ㅡ갓 기법인 거시다 SigReturn 는 커널모드 -> 유저모드 로 이동할때 호출되는것인데, 이때 유저모드의 레지스터를 세팅하게 된다. 세팅도중, 세팅하는 값에 대한 검증을 하지 않고 함으로써 우리는 SigReturn을 강제적으로 호출해 레지스터를 맘대로 바꿀수 있게 되는것이다. 사실 이 기법에 대해 알게된건 진짜루 진짜 오래 됬지만, SROP 중 /bin/sh 를 가젯으로 받지 않고 read 를 통해 bss 같은 영역에 쓰고 SigReturn 을 호출할 수 있는..

Analysis ·

Off By One

#include void func(char *arg){ char buf[1024]; strcpy(buf,arg); printf("%s\n",buf);}void shell(){system("/bin/sh");}int main(int argc,char *argv[]){ if(strlen(argv[1]) > 1024) { printf("ERROR!\n"); exit(0);} func(argv[1]); return 0;} 이런식으로 bof 가 나지 않는 코드가 있다. 이런 프로그램의 eip 를 바꾸는 방법이 있다~! ( gcc -o ObO ObO.c -fno-stack-protector -mpreferred-stack-boundary=2 -m32 ) 1024 만큼만 넣는데 segmentation fault 가 ..

Analysis ·

2차원 배열 분석

친구놈이 2차원배열가지고 bof 문제를 냈길래 갑자기 구조가 궁금해져서 한번 분석해 보았당 #include int main(int argc, char *argv[]){ char arr[3][10];strcpy(arr[0],"0123456789");strcpy(arr[1],"abcdefghij");strcpy(arr[2],"ABCDEFGHUJ"); printf("0 : %p\n1 : %p\n 2 : %p", arr[0], arr[1], arr[2]); return 0;} 코드는 이상태로 gcc 옵션은 gcc -o source source.c -m32 -fno-stack-protector -z execstack -fno-builtin -mpreferred-stack-boundary=2 로 보호기법 싹다 껏고..

Analysis ·