전체 글

blucat문제를 풀어보도록 하겠습니다. 우선 ls -l로 목록을 보도록 하죠 blukat.c파일을 열어서 코드를 봅시다. 간단하게 요약을 해보면 fgets 함수를 통해서 password를 읽고 입력을 받네요. 그리고 if문에서 password와 buf가 가다면 flag를 줍니다. cat password를 입력해보겠습니다. 이렇게 나오네요. blukat을 실행시키고 아까 cat password를 입력해서 나온 문자들을 입력해주면 flag가 나옵니다. 왜 그런지 볼까요?? id를 쳐보면 blukat_pwn이네요. 아까 ls -l에서 본 권한과 같네요. 기본을 확인하는 문제 같습니다. 이상으로 blukat 풀이를 마치도록 하겠습니다.
cmd1에 이어서 cmd2도 풀어보겠습니다. 먼저 로그인 할때 guest가 아닌 cmd1 password로 풀어야합니다. (꼭 cmd1을 풀어야겠죠??) 항상 그래왔던것처럼 코드를 먼저 봅시다. cmd1과 비슷한것 같지만 filter에 조건이 더 많아졌네요. 우선 main함수부터 해석을 해보겠습니다. delete_env라는 함수를 통해서 환경변수를 다 지우네요. putenv라는 함수를 통해서 "PATH=/no_command_execution_until_you_become_a_hacker" 환경변수를 추가합니다. filter함수를 봅시다. “=”, ”PATH”, ”export”, ”/”, ”`”, ”flag” 를 모두 필터링하네요. (뭘 써서 문제를 풀라는건지 모르겠네요)
힌트를 보면 "엄마! 리눅스의 PATH 환경은 어때?" 라고하네요. 이제 코드를 보러 가볼까요? 코드가 짧네요 main함수부터 해석해보도록 하겠습니다. putenv를 통해서 PATH=/thankyouverymuch라는 환경변수를 추가하네요. 그 다음 filter함수를 통해서 argv[1]을 검사합니다. filter함수를 봅시다. strstr이라는 함수가 있는데 이 함수는 앞에 있는 문자열에 뒤에 있는 문자열을 검색하는 함수입니다. flag와 sh와 tmp가 발견되면 r이 증가하고 r을 반환시킵니다. 하지만 if문에서 이 문자들을 사용하면 종료시킵니다. 문제를 어떻게 풀어야할까요.... 방법을 찾던도중 리눅스에는 와일드카드라는 기능이 있었습니다. *이라는 문자열을 모두 출력해주는 와일드 카드를 통해 ./c..
문제이름이 lotto네요. 계속 도박에 관련된 문제를 풀고 있습니다. 우선 코드를 볼까요? 코드가 길기때문에 play함수부터 확인해봅시다. 6바이트의 로또를 입력하라고 출력하고 fflush함수로 바이트를 지웁니다. read를 통해서 submit을 입력하고 lotto가 실행이 되면 lotto 번호를 생성하고 open함수로 "/dev/urandom"을 읽기 전용으로 엽니다. if문으로 fd가 1이라면 error를 출력하고 양수형 문자 lotto 6바이트를 선언하고 lotto와 6바이트와 6이 다르다면 error를 출력합니다. for문을 통해서 숫자를 1 ~ 45로 제한합니다. 밑에 이중for문에서는 lotto와 submit이 같아면 match를 증가시키도 match가 6이되면 flag를 얻을수 있는 문제입니..
coin문제와 비슷한 게임 문제인것 같네요 nc포트로 접속해봅시다. 1번을 누르면 게임이 시작하네요. 막 눌렀더니 flag가 떠버렸네요?? 이렇게 풀면 허무하니까 다시 한번 풀어봅시다. https://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 이 사이트에 들어가서 코드를 확인해보러 가도록 해보죠 이상한 부분을 찾으셨나요? 유저에게 배팅금액을 입력받는 함수인데 유저가 가진 현금보다 많은 금액을 배팅하려고 하면 다시 배팅을 하라고 하는데 다시 배팅할때는 돈 검사를 하지 않습니다. 그래서 아까 제가 문제를 풀수 있었던거네요. 하하하
문제에서 준 nc포트로 접속해봅시다. 번역기를 돌려보니 동전을 찾는 게임이네요. 해석을 해보자면 가짜동전을 찾는 문제인데 60초안에 100번을 찾아야합니다. 가짜동전의 무게는 9이고 진짜동전의 무게는 10입니다. 일일이 찾아서 문제를 풀수는 없으니까 pwntools을 이용해서 문제를 풀어야겠네요.
젖병문제를 끝내기까지 얼마남지 않았네요. 빨리 문제를 풀어봅시다.
· CTF
binary를 다운받고 우분투에 옮긴후 checksec를 통해서 보호기법을 확인해보았어요. Nx bit만 켜져있네요. NX bit는읽고 쓰는 권한 외에 실행 권한에 대해서 체크하여 메모리 공격으로부터 시스템을 보호하는 방법. nx는 rop기법을 이용해서 많이 우회합니다. 그리고 ida를 통해서 분석을 해보았다. main 부분을 보니 read를 통한 bof취약점을 발견할 수 있었는데요 이제 정보는 다 얻었으니 system("/bin/sh")를 만들기 위해서 총6개의 인자를 찾아야 하기 때문에 찾아봅시다. 1. read_plt의 주소값은 0x0804832 2. read_got의 주소값은 0x0804961c 3. write의 주소값은 0x0804830c 4. bss의 주소값은 0x08049628 5. pppr..
애기건듀
건듀의 블로그