alloca 풀다 빡쳐서 기분전환으로 쉬운문제 하나 잡아왔따.
보면 Stage 1,2,3 으로 나뉘어 있는데 요약하자면
1. Base64 collision
2. Base64 length collision
3. filtered command injection
이 되시겠다.
처음보는 Base64 collision 인데, 이거덕에 Base64에 대해 더 잘 알게 되었다!
먼저 Base64 인코딩 할때 뒤에 = 이나 == 이 붙는 경우를 볼 수 있다. 이것이 붙는 이유가 일종의 패딩이라 보면 되는데,
8진수 -> 6진수 하는 과정에서 0의 갯수를 맞춰주기 위해 아무 의미 없는것을 붙이는 것이다.
하지만 이것덕분에 0의 갯수를 맞춰주기 위한 아무것들을 조작함으로써
다른 base64 인코딩 결과지만 디코딩시 같은 문자열이 나오게 할 수 있다.
고로 이것을 이용하여 Stage 1 을 클리어 하는것이다.
collision 을 찾는 과정은
이런 코드를 통해서 하였다.
이렇게 나온 base64 string 중에서 암거나 하나 고르고 넣어주면 stage 1이 클리어 된다.
이런식으로 collision 이 일어나는것을 볼 수 있다.
이런식으로 Clear 하고 Stage2 같은 영우는 그냥 길이가 다르고 디코딩된게 같으면 되니 그냥 = 하나 더 붙이면 된당.
마지막인데 필터링이 어렵지 않다. wall fl* 을 base64 인코딩 해서 넣어주면 된다.
는 지금 내 서버 환경인데 wall 이 안먹힌다 ㅠㅠ 스샷은 추후 추가하는걸로
'Pwnable' 카테고리의 다른 글
[DIMI] scan (0) | 2017.09.26 |
---|---|
[Protostar] heap2 (1) | 2017.09.20 |
[Protostar] heap1 (1) | 2017.09.13 |
<asis ctf> mary_morton (0) | 2017.09.11 |
Pwnable.kr -dragon (1) | 2017.09.09 |