no image
해커스쿨 FTZ level14
level14 힌트를 확인해보면 buf는 20 byte인데 45 byte를 입력받고 있다. 또한 check의 값을 확인해 그 값이 "\xdeadbeef"가 되면 level15의 권한으로 쉘을 실행할 수 있다. cmp 명령을 살펴보면 [ebp-16]과 비교하고 있다. 또한 그 위를 살펴보면 [ebp-56]에 fgets 함수로 값을 대입받는 것을 확인할 수 있다. 따라서 56-16인 40만큼 값을 채우고, 그 뒤에"\xdeadbeef"가 들어가게 되면 문제가 해결된다. gdb로 임의의 40 byte와 "\xed\xbe\xad\xbe"를 넣어주니 정상적으로 "\xdeadbeef"가 들어간 것을 확인할 수 있다. 위에서 입력한 값 그대로 입력하고 cat 명령으로 잡아준 뒤 my-pass 명령어를 입력하니 패스워..
2020.09.22
no image
해커스쿨 FTZ level13
level13 먼저 힌트를 확인했다. 여태까지 풀었던 버퍼오버플로우 문제들과 비슷했는데, 한 가지 다른 점은 변수 i를 두어서 그 값이 변하면 버퍼오버플로우 경고를 띄우며 프로그램이 종료되도록 설계되었다. gdb로 프로그램을 살펴보면 총 418 byte(10진수로 1048)만큼 할당하고 마지막 12 byte는 0x1234567로 채운다. 프로그램을 먼저 실행해 어느 부분에서 경고가 발생하는지 확인했는데, 1048에서 12를 뺀 1036 byte의 인자를 넣었을 때는 경고가 발생하고 그보다 작은 1035 byte의 인자를 넣었을 때는 경고가 발생하지 않았다. 다음으로는 gdb에서 1035 byte의 인자를 대입한 후 값이 어떻게 변하는지 확인해보았다. 41으로 값이 채워지며, 마지막에 i의 값인 0x012..
2020.09.22
no image
해커스쿨 FTZ level12
level12 힌트를 확인해보면 11번과 비슷하게 overflow 문제인 것을 확인할 수 있다. gdb로 프로그램을 확인해보면 마찬가지로 272byte인 것을 확인할 수 있다. export GS=`python -c 'print "\x90"*50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` 11번과 동일하게 환경변수와 프로그램을 작성하여 환경변수의 주소값을 확인해줬다. (python ~)|./attackme 형식으로 입력하면 파이썬 코드로 입력할 수 있다. 하지만 실행되지 않아서 방법을 찾아보니 cat 명령을 사용하여 프로그램을 잡아두라고 하였다. 그렇게 하여 my..
2020.09.17
no image
해커스쿨 FTZ level11
level11 문제 화면이다. uid를 설정하고 strcpy를 실행한다. strcpy buffer overflow 문제라 구글링하여 방법을 찾아 진행하였다. gdb로 살펴보면 str의 크기를 확인할 수 있다. sub $0x108, %esp에 해당되며 str의 크기는 0x108, 264byte이다. 또한 바로 아래에서 sub $0x8, %esp를 한 번 더 해주는데 이는 주소 값을 저장하기 위한 공간이다. 따라서 str 배열 256byte와 dummy 값 8byte, sfp 4byte, ret 주소 4byte로 총 272byte로 이루어져 있다. * 원래 파일에서 gdb를 실행하면 에러가 나서 tmp 폴더에 복사해서 gdb를 실행했다. \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2..
2020.09.17
Google CTF 2020
보호되어 있는 글입니다.
2020.09.08
no image
해커스쿨 FTZ level10
level10 힌트를 확인하면 공유 메모리를 이용하여 대화를 하고 있다고 한다. 공유 메모리에서 메시지를 획득하는 코드는 구글링을 통해서 쉽게 찾을 수 있다. 키 값을 7530으로 바꿔준 후 진행했다. 프로그램을 실행하게 되면 대화 내용이 출력된다. 대화 내용을 보면 패스워드를 확인할 수 있다. what!@#$?
2020.08.27
no image
해커스쿨 FTZ level9
level9 힌트를 보면 /usr/bin/bof의 소스 코드가 존재한다. buf와 buf2가 존재하고, buf를 40글자 입력받는다. 그리고 buf2가 "go"일 경우, uid를 3010으로 설정한 후 쉘을 실행한다. 이때 주의해야 할 것은 buf가 10글자라는 것이다. 이를 통해 overflow 공격이 가능하다. /usr/bin/bof를 gdb로 분석한 내용이다. 여기서 주의해서 볼 내용은 다음과 같다. 0x0804844b : lea eax,[ebp-40] 0x08048457 : lea eax,[ebp-24] 이는 각각 buf와 buf2를 나타낸다. 이 둘 사이에는 16의 간격이 존재한다. 즉 buf에 16글자를 채우고 나면 그 다음부터는 buf2에 대입이 된다. /usr/bin/bof를 실행한 후 앞..
2020.08.27
no image
해커스쿨 FTZ level8
level8 힌트를 확인해보면 shadow 파일이 존재하는데, 파일의 이름은 알 수 없고, 파일의 용량이 2700이라는 것만 알 수 있다. b: 512-byte blocks c: bytes k: kilobytes (1024 bytes) w: 2-byte words find 명령의 size 옵션을 확인해보면 용량과 단위 [bckw]를 같이 표기해줘야 한다. 각 단위가 나타내는 바는 다음과 같다. 용량이 2700이니 바이트 단위일 것이라 생각하고 c를 사용해 파일을 찾았다. 여러 파일이 출력되었는데, shadow 파일은 txt 파일일 확률이 높다고 생각해 열어보았다. 그러니 level9의 shadow 파일을 확인할 수 있었다. level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:110..
2020.08.22

level14

 

 힌트를 확인해보면 buf는 20 byte인데 45 byte를 입력받고 있다. 또한 check의 값을 확인해 그 값이 "\xdeadbeef"가 되면 level15의 권한으로 쉘을 실행할 수 있다. 

 

 cmp 명령을 살펴보면 [ebp-16]과 비교하고 있다. 또한 그 위를 살펴보면 [ebp-56]에 fgets 함수로 값을 대입받는 것을 확인할 수 있다. 따라서 56-16인 40만큼 값을 채우고, 그 뒤에"\xdeadbeef"가 들어가게 되면 문제가 해결된다.  

 

 gdb로 임의의 40 byte와 "\xed\xbe\xad\xbe"를 넣어주니 정상적으로 "\xdeadbeef"가 들어간 것을 확인할 수 있다. 

 

 위에서 입력한 값 그대로 입력하고 cat 명령으로 잡아준 뒤 my-pass 명령어를 입력하니 패스워드가 출력됐다. 

 

 

 guess what

 

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level16  (0) 2020.09.24
해커스쿨 FTZ level15  (0) 2020.09.24
해커스쿨 FTZ level13  (0) 2020.09.22
해커스쿨 FTZ level12  (0) 2020.09.17
해커스쿨 FTZ level11  (0) 2020.09.17

level13

 

 먼저 힌트를 확인했다. 여태까지 풀었던 버퍼오버플로우 문제들과 비슷했는데, 한 가지 다른 점은 변수 i를 두어서 그 값이 변하면 버퍼오버플로우 경고를 띄우며 프로그램이 종료되도록 설계되었다. 

 

 gdb로 프로그램을 살펴보면 총 418 byte(10진수로 1048)만큼 할당하고 마지막 12 byte는 0x1234567로 채운다. 

 

 프로그램을 먼저 실행해 어느 부분에서 경고가 발생하는지 확인했는데, 1048에서 12를 뺀 1036 byte의 인자를 넣었을 때는 경고가 발생하고 그보다 작은 1035 byte의 인자를 넣었을 때는 경고가 발생하지 않았다. 

 

 다음으로는 gdb에서 1035 byte의 인자를 대입한 후 값이 어떻게 변하는지 확인해보았다. 

 

 41으로 값이 채워지며, 마지막에 i의 값인 0x01234567이 들어있는 것을 확인할 수 있었다. 

 

 그리고 i 값이 변조되는 것을 막기 위해 "0x01234567"을 대입해주었다. 리틀 앤디안 방식으로 정리해서 대입했는데, 67이 원래 자리가 아니라 그 앞에 붙었다. 

 

 "A"를 1035 byte에서 1036 byte로 늘려주니 정상적으로 값이 들어갔다. 

 

 메모리를 확인했으니 쉘을 실행하기 위해 지난 번과 같이 환경변수를 만들고 그 주소를 찾았다.

 

 

해커스쿨 FTZ level11

level11  문제 화면이다. uid를 설정하고 strcpy를 실행한다. strcpy buffer overflow 문제라 구글링하여 방법을 찾아 진행하였다.  gdb로 살펴보면 str의 크기를 확인할 수 있다. sub $0x108, %esp에 해당되..

assb.tistory.com

 

 i의 값이 변조되지 않도록 1056 byte를 채우고 쉘 주소를 붙여주니 쉘이 실행되어 패스워드를 구할 수 있었다. 

 

 what that nigga want?

 

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level15  (0) 2020.09.24
해커스쿨 FTZ level14  (0) 2020.09.22
해커스쿨 FTZ level12  (0) 2020.09.17
해커스쿨 FTZ level11  (0) 2020.09.17
해커스쿨 FTZ level10  (0) 2020.08.27

level12

 

 힌트를 확인해보면 11번과 비슷하게 overflow 문제인 것을 확인할 수 있다. 

 

 

 gdb로 프로그램을 확인해보면 마찬가지로 272byte인 것을 확인할 수 있다.

 

export GS=`python -c 'print "\x90"*50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 11번과 동일하게 환경변수와 프로그램을 작성하여 환경변수의 주소값을 확인해줬다. 

 

 (python ~)|./attackme 형식으로 입력하면 파이썬 코드로 입력할 수 있다. 하지만 실행되지 않아서 방법을 찾아보니 cat 명령을 사용하여 프로그램을 잡아두라고 하였다. 

 

 그렇게 하여 my-pass 명령을 사용하니 패스워드를 획득할 수 있었다.

 

 

 have no clue

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level14  (0) 2020.09.22
해커스쿨 FTZ level13  (0) 2020.09.22
해커스쿨 FTZ level11  (0) 2020.09.17
해커스쿨 FTZ level10  (0) 2020.08.27
해커스쿨 FTZ level9  (0) 2020.08.27

level11

 

 문제 화면이다. uid를 설정하고 strcpy를 실행한다. strcpy buffer overflow 문제라 구글링하여 방법을 찾아 진행하였다.

 

 

 gdb로 살펴보면 str의 크기를 확인할 수 있다. sub $0x108, %esp에 해당되며 str의 크기는 0x108, 264byte이다. 또한 바로 아래에서 sub $0x8, %esp를 한 번 더 해주는데 이는 주소 값을 저장하기 위한 공간이다. 따라서 str 배열 256byte와 dummy 값 8byte, sfp 4byte, ret 주소 4byte로 총 272byte로 이루어져 있다.

* 원래 파일에서 gdb를 실행하면 에러가 나서 tmp 폴더에 복사해서 gdb를 실행했다. 

 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

 main+53에 bp를 걸고 프로그램을 실행시켰다. shell 코드는 25byte이므로 ret 4byte와 shell 코드 25byte를 포함해 272byte를 채우기 위해 NOP(\x90)으로 243byte를 채워줬다. 

 

 그리고 값을 확인해보면 위와 같이 채워진 것을 확인할 수 있다. 

 

 따라서 "\x90"*243+(shell 코드)+(ret 주소) 형식으로 값을 넘겨주면 쉘을 실행하여 문제를 해결할 수 있다. 하지만 ret 코드를 구하는데 어려움이 있어서 다른 사람의 라업을 보고 진행하였다. 

 

./attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x60\xd9\xff\xbf"'`

 

 쉘을 실행하여 my-pass 명령어를 입력하면 패스워드를 구할 수 있다. 

 

 it is like this

 

 

+

 

참고 사이트: https://choraengyi.tistory.com/51

 

export GS=`python -c 'print "\x90"*50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 환경 변수로 쉘 실행 코드를 작성한다. export|grep (환경변수 이름)으로 확인할 수 있다. 

 

 생성한 환경 변수의 주소 값을 찾는 프로그램을 작성하여 주소 값을 확인한다. 

 

 임의의 값 268byte+확인한 환경변수 주소값을 입력하면 쉘이 실행된다. 위의 방식으로 하면 ret 주소가 계속 변경되어서 계속 시도해야 한다고 했는데, 이 방법으로는 정상적으로 해결되었다. 

 

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level13  (0) 2020.09.22
해커스쿨 FTZ level12  (0) 2020.09.17
해커스쿨 FTZ level10  (0) 2020.08.27
해커스쿨 FTZ level9  (0) 2020.08.27
해커스쿨 FTZ level8  (0) 2020.08.22

Google CTF 2020

2020. 9. 8. 13:26

This is a protected article. Please enter the password.

level10

 

 힌트를 확인하면 공유 메모리를 이용하여 대화를 하고 있다고 한다.

 

 공유 메모리에서 메시지를 획득하는 코드는 구글링을 통해서 쉽게 찾을 수 있다. 키 값을 7530으로 바꿔준 후 진행했다. 

 

 프로그램을 실행하게 되면 대화 내용이 출력된다. 대화 내용을 보면 패스워드를 확인할 수 있다.

 

 

 what!@#$?

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level12  (0) 2020.09.17
해커스쿨 FTZ level11  (0) 2020.09.17
해커스쿨 FTZ level9  (0) 2020.08.27
해커스쿨 FTZ level8  (0) 2020.08.22
해커스쿨 FTZ level7  (0) 2020.08.22

level9

 

 힌트를 보면 /usr/bin/bof의 소스 코드가 존재한다. buf와 buf2가 존재하고, buf를 40글자 입력받는다. 그리고 buf2가 "go"일 경우, uid를 3010으로 설정한 후 쉘을 실행한다. 이때 주의해야 할 것은 buf가 10글자라는 것이다. 이를 통해 overflow 공격이 가능하다.

 

 /usr/bin/bof를 gdb로 분석한 내용이다. 여기서 주의해서 볼 내용은 다음과 같다. 

 

0x0804844b <main+43>:   lea    eax,[ebp-40]
0x08048457 <main+55>:   lea    eax,[ebp-24]

 

 이는 각각 buf와 buf2를 나타낸다. 이 둘 사이에는 16의 간격이 존재한다. 즉 buf에 16글자를 채우고 나면 그 다음부터는 buf2에 대입이 된다. 

 

 /usr/bin/bof를 실행한 후 앞에 임의의 16글자를 채우고 "go"를 17, 18번째 글자로 입력하게 되면 buf2가"go"가 된다. 그러면 level10 권한으로 쉘이 실행된다. 그 상태에서 my-pass 명령어를 사용하면 level10의 password가 출력된다. 

 

 

 interesting to hack!

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level11  (0) 2020.09.17
해커스쿨 FTZ level10  (0) 2020.08.27
해커스쿨 FTZ level8  (0) 2020.08.22
해커스쿨 FTZ level7  (0) 2020.08.22
해커스쿨 FTZ level16  (0) 2020.08.20

level8

 

 힌트를 확인해보면 shadow 파일이 존재하는데, 파일의 이름은 알 수 없고, 파일의 용량이 2700이라는 것만 알 수 있다. 

 

b: 512-byte blocks
c: bytes
k: kilobytes (1024 bytes)
w: 2-byte words

 find 명령의 size 옵션을 확인해보면 용량과 단위 [bckw]를 같이 표기해줘야 한다. 각 단위가 나타내는 바는 다음과 같다. 용량이 2700이니 바이트 단위일 것이라 생각하고 c를 사용해 파일을 찾았다. 

 

 여러 파일이 출력되었는데, shadow 파일은 txt 파일일 확률이 높다고 생각해 열어보았다. 그러니 level9의 shadow 파일을 확인할 수 있었다. 

 

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

 

 shadow 파일 복호화는 john the ripper를 사용한다. kali에 기본적으로 깔려있기 때문에 그를 사용해 복호화했다. 

 

 pass 파일에 위에서 찾은 shadow의 내용을 넣은 뒤 john을 통해 복호화 했다. 

 

 

 apple

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level10  (0) 2020.08.27
해커스쿨 FTZ level9  (0) 2020.08.27
해커스쿨 FTZ level7  (0) 2020.08.22
해커스쿨 FTZ level16  (0) 2020.08.20
해커스쿨 FTZ level5  (0) 2020.08.15