전체 글 156

[pwnable.xyz] GrownUp ( write - up )

나이가 18세 이상인지? 아닌지?를 검사한다.만약 나이가 18살 이상이 아니면 return 0으로 프로그램을 종료시킨다.그리고 Y를 입력하여 나이가 18살 이상임이 확인되면 read로 src에 0x80만큼 입력을 받는다.그리고 여기서 흥미로운점이 하나 있다.그것은 바로 0x6010e0에 위치한 sur에서 0x80만큼 떨어진 0x601160이 있다!! 이 부분은 바로..이부분이다. printf 부분에서 포맷스트링을 설정해주는 부분이다. 취약점은 이부분에서 터진다. 1. read함수 : read함수는 입력이 끝나면 문자열에 끝에 null문자를 삽입해주지 않는다.2. strcpy함수 : strcpy함수는 문자열을 복사하고, 문자열 마지막에 null문자를 삽입해준다. 띠용! 그럼 read함수로 0x80만큼 입력..

[pwnable.xyz] misalignment ( write - up )

add문제랑 거의 비슷하다!v5+7에 있는 0xDEADBEEF 문자열을 0xB000000B5 문자열로 바꾸면 성공!리눅스에서는 리틀엔디안으로 값이 들어가므로 v5[0]에 0xb500000000000000 를 넣어주고!!0x b500 0000 0000 0000=> 0000 0000 0000 00b5=> -5,404,319,552,844,595,200 v5[1]에 0x0b000000를 넣어주자!0x 0000 0000 0b00 0000 => 0000 000b 0000 0000=> 184549376 16진수를 10진수로 변환시키는건 윈도우 계산기를 이용했다. 성공!

[pwnable.xyz] add ( write - up )

일단 분석을 해보면, 10진수 정수 3개를 입력받는다. scanf의 반환값이 3이 아니라면, break 한다.즉, 입력을 3개받지않으면 break하겠다 라는 의미이다.그리고 v7[v6] = v4 + v5; 을 해주는데, 여기서 취약점이 터진다.Out Of bound 취약점이다. v6에 음수가 들어가거나 너무 큰 값이 들어갈 수 있다.이것을 이용해 ret을 변조시켜서 win함수를 실행시킬수있다.따라서 우리는 v4 + v5을 win의 주소로 만들면 되고, v6을 ret으로 조절하면 된다.v7의 위치가 rbp-0x60이라고 친절하게 알려주고있으므로, 우리는 rbp-0x60을 rbp+8 ( ret ) 으로 만들기 위해서 0x68만큼 더해야한다.하지만 여기서 v7을 __int64 ( 8byte ) 로 선언하였으므..

[pwnable.xyz] sub ( write - up )

IDA로 까보자마자 깜짝놀랐다.이건 진짜 오랜만에보는 pwnable.kr toddler 수준 문제이다.구글링 한번을 안하고 바로풀었다.일단 여기서는 음수를 입력할때 예외처리를 하나도 해두지않았다. 여러분도 알듯이, -(-1234) = +1234이다. 이걸 이용해서 문제를 풀었다. v4에 1을 입력하고, v5에 -4918을 입력해주면, 플래그를 볼수있다.

[pwnable.xyz] welcome ( write - up )

분석을 시작해보면!일단 v3이라는 문자열에 malloc으로 메모리를 할당해준 후에, v3문자열 첫번째 원소에 1 이라는 값을 대입시킨다. 여러분은 배열의 이름이 시작주소를 의미한다는 것을 알고있기때문에, 이해할 수있을 것이다.그럼 v3을 0으로 만들어주면 되는데, 이미 v3에는 1이라는 값이 들어가있다. 그 후에, v3의 주소를 leak해서 출력해주고, 보낼 메시지의 길이를 입력하라고 나온다.그리고 그만큼 size를 할당시켜주고, 입력받은 메시지의 마지막 원소를 0으로 만들고, write함수로 메시지를 출력하고 if문으로 간다.if문에서는 v3이 0일때 플래그를 출력해준다.그러면 우리는 여기서 v3을 0으로 만들 방법만 생각해보면 된다. 근데 시작할때 v3의 주소를 leak해주므로, v5[size-1] ..