목록전체 글 (243)
CIDY
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bDTZxT/btrGari8sky/NiqVVEoBoeTI5fETLKLhJk/img.png)
쉘코드 짜다가 빡쳐서 결국 shellcraft씀 ㅎㅎㅎ pwntools너무좋아 // Compile: gcc -o shell_basic shell_basic.c -lseccomp // apt install seccomp libseccomp-dev // 64-bit, nx, pie, full relro #include #include #include #include #include #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void init() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bN0091/btrGb6SPstv/EJsjsx0ut7lDJpNV4s9L9K/img.png)
마침 alphanumeric쉘코드 만들고 왔는데 드림핵에서 쉘코드를 만들어 보라길래... 그냥 인자 세팅 후 syscall만 해주면 되는거라 즐겁게 했다ㅎㅎㅎ *open /tmp/flag를 읽는 쉘코드를 만드는게 조건이었다. char buf[0x30] int fd = open("/tmp/flag", RD_ONLY, NULL); read(fd, buf, 0x30); write(1, buf, 0x30); open 호출 -> read 호출 -> write호출 global _start _start: ;open push 0x67 mov rax, 0x616c662f706d742f push rax mov rdi, rsp xor rsi, rsi xor rdx, rdx mov rax, 0x2 syscall ;read m..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VePcn/btrF9GHrb5A/2eFpUOcX2WME3uS4q71nPK/img.png)
내가볼거니까 대충적고갈거임. peda고 python3 씀 인자 전달 : gdb-peda$ r $(python3 -c 'print(b"\xff"*100)') 입력값 주기 : r $(python3 -c 'print(b"\xff"*100)')
*어셈블리 문법 구조(intel기준) 어셈블리는 기본적으로 구조임 EX) mov eax, 3 에서 mov == opcode, eax == operand 1, 3 == operand 2 *어셈블리 명령어 ;--------------------------------------------------------- mov, lea -> 데이터 옮기기 and, or, xor, not -> 논리연산자 cmp, test -> 비교연산자 call, ret, leave -> 프로시져 push, pop -> 스택에 넣고빼는거 jmp, je, jg -> 분기문 inc, dec, add, sub -> 산술연산자 syscall -> 시스템콜(32비트에서는 int 0x80) ;-------------..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/n8HEA/btrF7djT1hK/KwpfT5s8CXkuNEh8KO8vV1/img.jpg)
일단, recv(n) -> 최대 n바이트 받아옴 recvn(n) -> 정확히 n바이트 받아옴 (덜받으면 대기) recvline() -> 한줄 받아옴 recvuntil('x') -> 딱 x까지 받아옴 (못받으면 대기) recvall() -> 모두 받아옴 이건 다들 알고 쓰는 것일 것이다. 내가 이 글을 쓰는 이유는 recv로 받아온 것을 [ : ]로 자를 수 있는데, 스스로 헷갈려서 정리하려고 쓰는 것임.. ABCDEFGHIJKLMNO recvline()[3 : ] -> DEFGHIJKLMNO -> 앞쪽 3바이트 뗌 recvline()[ : 3] -> ABC -> 앞쪽 3바이트만 가져옴 recvline()[-3: ] -> NO\n -> 뒤쪽 3바이트만 가져옴 recvline()[ : -3] -> ABCDE..
일단 이렇게 하면 file이라는 이름의 파일을 만들겠다는 뜻. (또는 file이라는 파일을 vi편집기 상에서 편집하겠다는 뜻) vi file 이렇게 명령어를 입력하면 vi편집기 창이 뜨는데, 처음 열면 command mode이다. -> a 나 i를 누르면 insert mode로 전환됨 insert mode에서 파일 내용을 잘 적어준 뒤, 저장하려면 다시 명령 모드로 돌아와야 한다. -> esc키 명령 모드에서 last line mode로 전환하려면 -> : (콜론) 입력하면 되고, 작성 내용을 저장 후 종료하려면 wq, 그냥 종료하려면 q 또는 q! 를 입력하면 된다.
이것저것 공부하다보니 어셈블리어 코드를 직접 짜서 컴파일할 일이 생겼다. sudo apt-get install nasm 이렇게 설치하면 된다. 64비트: nasm -f elf64 file.asm -o file.o ld file.o -o file 32비트: nasm -f elf file.asm ld -m elf_i386 -s -o file file.o 설치 확인: nasm --version