이번 문제는 pwnable.kr에서 제공하는 문제를 풀어보았습니다.
화질이 좋지 못하여 간단하게 봐주시길 바랍니다 :)
fd |
collision |
bof |
flag |
문제 1
해당 문제는 ssh로 서버에 접속하여 특정 실행파일을 실행할 때 인자 값을 주어 결과를 얻도록 하는 문제입니다.
ssh로 접속한 후 접속 디렉터리에 존재하는 파일을 확인하고 실행시켜 봅니다.
모든 파일을 확인하여 보았고 이용 가능한 것은 fd실행파일이라는 것을 알게 되었기에 fd소스파일을 살펴보겠습니다.
fd소스파일에는 argc가 2 미만이면 종료되게 돼있기에 인자 값을 주어 해당 조건문을 넘기도록 만듭니다. 그 후 인자에는 0x1234의 값을 넣어 fd가 0이 되어 buf값 자체가 LETMEWIN이라는 단어와 비교되도록 만들어 flag가 출력되도록 만들면 됩니다.
문제 2
이번 문제는 ssh로 접속하여 haschcode를 이용해 입력된 인자 값을 비교하는 문제입니다.
col이라는 파일이 있기에 실행과 소스코드를 살펴보겠습니다.
hashcode가 0x21dd09ec가 되어있고 check_password라는 함수가 인자 값을 실행하여 비교하는 문제입니다.
문제에서 20byte의 크기를 가지며 hashcode와 값이 같아야 system함수를 호출하게 됩니다.
그렇기에 hashcode의 값으로 입력될 인자를 5로 나누어 20바이트로 되도록 하여 만들면 됩니다.
5로 나누면 정확히 떨어지지 않는 수 이기에 마지막 수에는 나머지 값을 더하여 20바이트가 되도록 하여 입력하면 됩니다.
문제 3
이번 문제는 BoF문제로 실행파일과 소스코드를 서버에서 가져와 문제를 푸는 형태로 되어있기에 wget을 통해 파일을 받아와 문제를 확인하도록 하겠습니다.
위는 소스코드와 실행파일을 디스어셈블한 것으로 main스택 프레임 위에 arg_0이 쌓이고 8바이트 위에 func의 ebp가 있는 형태로 s변수는 ebp보다 0x2C만큼 더 위에 쌓여있는 것을 알 수 있습니다.
arg_0 값과 CAFEBABE를 비교하기에 값을 변조해야 한다는 것을 확인 가능합니다. 그렇기에 값을 변조하기 위해 arg_0 값에 접근해야 하며 func의 overflowme변수 기준으로 2C+8만큼 떨어져 있는 것을 알 수 있어 52만큼의 dummy값을 넣으면 됩니다.
문제 4
이번 문제도 wget을 통해 파일을 받아오는 것이며 이 파일을 분석하여 flag를 획득하는 것입니다.
파일을 다운로드하여 분석하였을 때 UPX 패킹이 돼있는 것을 확인하였고, 아래처럼 언패킹 하였습니다.
언패킹 한 후, 분석을 다시 하여 flag부분을 분석하면 해당 flag가 확인되는 것을 알 수 있습니다.
이상으로 pwnable 1번 문제부터 4번 문제까지 보았습니다.
감사합니다.
'TeamH4C_ProjectH4C > 워게임' 카테고리의 다른 글
[TeamH4C_PWNABLE] 시스템 해킹_연습문제9 (0) | 2021.04.11 |
---|---|
[TeamH4C_PWNABLE] 시스템 해킹_연습문제6 (2) | 2021.04.11 |
[TeamH4C_FTZ] Level1 ~ Level5 (0) | 2021.03.28 |
[TeamH4C_HackCTF] 시스템 해킹_기초문제 (0) | 2021.03.21 |
[TeamH4C_dreamhack] 시스템 해킹_기초문제 (0) | 2021.03.21 |