본문 바로가기

전체 글157

pwnable.kr blukat 소스코드는 아래와 같다. password 파일과 같은 값을 입력하면 된다. 그런데 id를 입력해보면, group에 blukat_pwn이 있는 것을 볼 수 있다.즉, password 파일의 읽기 권한이 주어졌다. vi를 통해 들어가면 아래와 같은 패스워드를 볼 수 있다.cat password를 통해서 보면, 마치 권한이 없어서 읽을 수 없는 것처럼 속을 수 있다......! 만약 이 것을 눈치채지 못하였더라도, gdb를 통해 입력받은 값을 볼 수 있다. password에 들어 있던 값이 담긴 것을 볼 수 있다. 따라서 다음과 같이 입력하면 플래그를 얻을 수 있다. 2019. 2. 11.
pwnable.kr leg pwnable.kr leg 문제이다. 문제를 보면 파일을 두개 다운받을 수 있다. 먼저, leg.c 파일의 main()을 보면, ( key1() + key2() + key3() )의 값을 입력하면 플래그를 얻을 수 있을 것으로 보인다. [key1]첨부된 asm 파일에서 먼저 key1 부분은 아래와 같다. 필요한 값은 key1()의 리턴 값이기 때문에, r0에 담기는 값을 보면 된다. mov r3, pcmov r0, r3이기 때문에 mov r3, pc에서 pc 값을 알아오면 된다. 이 때, pipeline(fetch, decode, execute) 으로 인해 0x00008cdc 가 fetch 될 때의 pc는 0x00008ce4 이다. [key2] key2에서도 r0에 담기는 값을 보면 된다. r0와 관련된.. 2019. 2. 11.
화이트햇 2016 malloc 우선 malloc을 실행해보면, 아래와 같은 메뉴를 볼 수 있다. 이 때 free한 뒤에도 modify가 가능하다. 그 이유는 malloc시 chunk_list에 넣고, modify 시에도 chunk_list에서 수정할 주소를 얻어오는데free할 때 chunk_list에서 삭제하지 않기 때문이다. 따라서 이번 문제는 malloc한 뒤 free하여 fastbin에 들어가게 한 뒤, fd에 스택 값을 넣고 ret를 덮으면 풀 수 있다.더 자세히 쓰면 아래와 같다. malloc 32, 'a'*31malloc 32, 'b'*31 free 1free 2 modify 2, stack_addr malloc 32, 'c'*31malloc 49, 'd'*24 + RET malloc 하는 size는 32로 같게 하였다.먼.. 2019. 2. 10.
무선랜 해킹 [Requirements]Ubuntu 16.04모니터모드를 지원하는 어댑터 interface 이름 변경 sudo ifconfig wlx000000000000 downsudo ip link set wlx000000000000 name mon0 iwconfig- 무선에 관한 configuration- managed mode / monitor mode 확인 가능 모니터 모드로 변경 ifconfig mon0 downiwconfig mon0 mode monitorifconfig mon0 up aircrack airodump-ng mon0 # 제대로 작동하지 않는경우, 모니터 모드를 방해하는 프로세스 kill # 프로세스 확인# sudo airmon-ng check# 프로세스 종료# sudo airmon-ng ch.. 2019. 2. 2.
pwnable.kr shellshock ssh shellshock@pwnable.kr -p2222 먼저 아래와 같은 파일을 볼 수 있다. 코드는 아래와 같다. 문제 이름에서도 알 수 있듯 이번 문제는 shellshock 취약점을 이용하여 풀 수 있다. shellshock와 관련해서는 검색해보면 자세한 설명과 관련 CVE 등을 볼 수 있다. ​env x='() { :;}; echo hello' bash -c "echo world"여기서 다시 shellshock.c를 보면 system("/home/shellshock/bash -c 'echo shock_me'")가 있다. 따라서 env x='() { :;}; echo hello' ./shellshock를 해준다. 여기서 echo hello 부분을 cat flag로 바꾸면 플래그를 얻을 수 있다. 2019. 2. 1.
2018 회고 보호되어 있는 글 입니다. 2019. 2. 1.
pwnable.kr mistake [Toddller's Bottle] mistake 먼저 문제는 아래와 같다. 힌트가 연산자 우선순위임을 알 수 있다.아래와 같은 파일을 볼 수 있다. 아래 코드는 main()의 일부이다. 이 때,fd = open() < 0이라는 코드를 볼 수 있는데, 여기서 연산자 우선순위에 의해 fd에는 (open() < 0)의 결과가 들어간다.따라서 fd에는 0이 들어간다. 즉 pw_buf를 stdin으로 입력 받게 되므로pw_buf에 0000000000 을 넣고, pw_buf2에 xor한 값인 1111111111 을 넣어주면 아래와 같이 플래그를 얻을 수 있다. 2019. 2. 1.
pwnable.kr lotto [Toddller's Bottle] lotto ssh lotto@pwnable.kr -p2222 먼저 아래와 같은 파일들을 볼 수 있다. 소스코드에서 play() 함수를 보면 아래와 같이 score를 계산한 뒤 match가 6일 경우 플래그를 얻을 수 있음을 알 수 있다. 이 때, for 문을 보면 lotto와 submit이 일치하는지 확인하는 부분이 이상한 것을 알 수 있다.각 index별로 일치하는지를 확인하여야 하는데, 위의 코드를 보면 모든 index들을 다 확인하는 것을 볼 수 있다. 즉, lotto[0]은 submit[0]과만 비교하여 하는데, lotto[0]을 submit[0], submit[1], submit[2], submit[3], submit[4], submit[5] 모두와 비교한다... 2019. 2. 1.
pwnable.kr blackjack [Toddler's Bottle] blackjack 문제를 보면 'I like to give my flags to millionaires.' 이라는 문장을 볼 수 있다.Cash가 100만 이상이 되면 플래그가 나올 것으로 보인다. 먼저 nc pwnable.kr 9009 을 실행하면 아래와 같은 화면을 볼 수 있다. Y를 누르고, 1을 입력하면 플레이 할 수 있다. 플레이하면 아래와 같이 베팅할 금액을 쓰고 게임을 하게 된다. 이 때, 소스코드를 보면 int로 받는 것을 알 수 있다. 그 뒤, 게임에서 지면 cash = cash - bet;이기면 cash = cash + bet; 을 수행한다. 여기서 bet이 음수임을 확인하는 코드가 없기 때문에 -1000000을 입력한 뒤 게임에서 지면 클리어할 수 있다. 2019. 2. 1.