본문 바로가기

Pwnable14

[Pwnable.kr] Toddler's Bottle_cmd1 문제는 cmd1 리눅스의 환경변수를 이용하는 것이었다. 접속한 후 ls 명령어를 통해 디렉토리 목록을 확인한다. 위의 사진과 같이 cmd1, cmd1.c, flag 파일이 있다. cat 명령어를 통해 읽어보면 다음과 같다. 사용자에게 입력받은 문자열을 시스템 함수에 넣고 실행하는 코드이다. 이때 strstr() 함수를 통해 몇가지 문자열이 필터링 된다. 필터링 되는 문자열은 flag, sh, tmp이다. strstr(string1, string2) string2가 string1에 나타는지를 검사하는 함수. 아니면 NULL. string2에서 끝나는 널문다를 무시한다. 이를 우회하기 위해서 문제의 힌트에 나와있듯이 리눅스의 환경변수를 이용한다. [ 리눅스의 환경변수 ] : 윈도우와 마찬가지로 리눅스에도 환.. 2021. 5. 19.
[Pwnable.kr] Toddler's Bottle_lotto 문제에 처음 들어가면 보이는 부분이다. ssh를 이용하여 접속한다. ssh를 이용하여 접속한다. 디렉토리에 어떤 파일이 있는지 확인한다. 우리가 공격해야 할 대상인 lotto와 lotto elf 파일을 만들었을 소스로 예상되는 lotto.c와 flag가 존재한다. 현재 flag는 id(lotto)의 권한으로 볼 수 없고, lotto elf 파일은 lotto_pwn의 권한으로 setuid가 설정되어있다. lotto elf를 실행함으로써, setuid를 얻고 flag를 볼 수 있을 것으로 예상된다. lotto.c 파일을 분석하자. main 함수는 사용자로부터 메뉴를 입력받아 play 함수, helo 함수, 종료. exception handlding을 진행한다. help(), 종료, exception hand.. 2021. 5. 11.
[Pwnable.kr] Toddler's Bottle_blackjack 문제를 들어가면 뜨는 창이다. 코드창에 들어갔다가 너무 길어서 서버부터 접속하는 것으로 하였다. nc 명령어를 통해 접속한다. 1을 누르면 게임 시작, 2는 도움말, 3은 게임 종료이다. 현재 잔고는 $500인데 넘는 금액을 입력했더니 아래 나오는 말이 반복된다. 입력한 금액과는 다르게 출력이 되었고 플래그가 반복된다. 코드를 살펴보니 위와 같은 함수가 보였다. 베팅에 관여하는 함수인데, if(bet>cash)에서 if문이 반복되지 않고 한 번만 쓰이는 것이 취약점인 것을 알 수 있다. 입력한 베팅금과 잔고 비교를 한 번밖에 안 하는게 취약점인 것이다. 잘못된 베팅값을 통해 다시 베팅 값을 받을 때 예외처리를 하지 않는다. 따라서, 두 번째 입력을 받을 때 임의의 betting 값 설정이 가능하다. fl.. 2021. 5. 11.
[Pwnable.kr] Toddler's Bottle_coin1 문제를 확인해보자. 이번에는 nc로 접속하는 문제이다. 문제에 접속하였더니 다음과 같이 나온다. 해석을 해보면 N개의 코인과 C번의 기회가 주어지고, 이 C번의 기회 동안에 N개의 동전 중 불량 동전을 골라내야 한다. 정상 동전은 무게가 10, 불량 동전은 무게가 9이다. 동전의 번호를 입력으로 줄 수 있는데 입력으로 준 동전들의 무게 합이 출력된다. 그리고 100번을 맞춰야 하는데 60초 안에 해결해야 한다. 코딩을 해야 하는 문제인 것 같다. 코드 2021. 5. 5.
[Pwnable.kr] Toddler's Bottle_shellshock shellshock 문제이다. bash의 shellshock 취약점 문제이다. 먼저, seedUbuntu로 로그인을 하였다. ls -al 명령어로 확인하니 shellshock.c 파일이 눈에 띈다. 확인해보도록 하겠다. 확실히 bash의 shellshock 취약점 문제라는 것을 알 수 있다. 더욱 확실하게 취약점이 있다는 것을 확인하였다. 그렇다면 shellshock의 권한을 이용해서 flag를 읽으면 될 것 같다. flag 값이 나왔다. FLAG: only if I knew CVE-2014-6271 ten years ago..!! 2021. 5. 5.
[Pwnable.kr] Toddler's Bottle_mistake mistake 문제를 보았다. 힌트를 보니 operator priority라고 적혀 있다. 즉, 우선순위 문제이다. 문제에 있는 ssh에 접속한 후, 코드를 보자. ls -l 명령어를 통해 어떤 파일이 있는지 확인하였다. mistake.c 파일을 먼저 확인해보자. [ 조건의 우선순위 ] 비교 연산자는 산술 연산자보다 우선순위가 높다. 결국, ' < '를 먼저 계산하고 ' = '를 그 다음에 계산하라는 의미이다. ' < '를 먼저 계산했을 때, password에 들어있는 것은 0보다 클 것이므로 false가 되고 이는 결국 ' = '로 인해 int fd 안에 들어간다. 결론적으로 fd는 0이 되고 위의 if는 실행되지 않는다. 1. open("/home/mistake/password", O_RDONLY, .. 2021. 4. 27.