본문 바로가기

CTF/Write-up

holyshield BrokenPiano

holyshield BrokenPiano

이문제는 대회 때 아쉽게 못풀었던거같다


피아노 모양에 C#으로 된 바이너리이다

그리고 사진 처럼 버튼마다 클릭시 값을 가지게 되는데

값을 다 누른 후 버튼 17을 누르면 된다


우선 버튼 17을 보면 this.code가 null과 같다면 return을 한다

그렇기 때문에 아무버튼이나 한번 눌러주고 버튼 17을 눌러준다

버튼 17은 오른쪽 맨 끝 검은 건반이다


지금은 접속이 안되는데

저 위에 사이트에서 base64로 인코딩된 값이 나온다

임시로 base64로 인코딩해서 값을 서버에 넣고 위에 부분에 아이피와 포트를 변경해서 풀도록 하겠다

이런식으로 기존 바이너리를 인코딩해서 서버에 넣었다

엄청긴데 저걸 풀어서 a.exe로 만든다


그리고 a.exe가 있다면

해당 소스처럼 내가 건반으로 입력한게 a.exe 전달된다

그리고 내가 입력한거의 길이를 2로 나눠서 나머지가 0과 다르면 리턴한다

2의 배수로 값을 넣어주면된다


a가 FAIL이면 밑에 메시지와 함께 리턴된다

그러므로 a.exe를 보자


a.exe에서는 일단 8글자를 입력받는다 

그리고 밑에 FAIL과 PASS가 있는데 위에 연산을 맞춰줘서 PASS를 띄워야한다

대회 때는 여기서 저걸 어떻게 맞춰야할지 몰라서 포기했었다

이 때부터 풀이를 기다리고있었는데 http://kblab.tistory.com/412

해당 풀이 글에서 보듯이 z3를 이용하면 쉽게 풀 수 있다

z3를 미리 알았더라면....

            

이런식으로 무슨값이 들어가는지 알 수 있다


이렇게 입력을 해주면 a.exe에서 PASS가 뜨게 된다


이제 알았으니 저 값을 피아노로 쳐준다

위에 사진을 보고 누르면 될거같다

값을 다 치고 마지막에 17번을 눌러주면된다


그렇게 하면 여기 부분에서 값을


이런식으로 split() 해주고


이 값을 가지고

a.exe에 입력하게 되고


a가 FAIL인지 판단하는데 a에는

이렇게 PASS가 들어간다

그 다음으로 입력한 값을 서버에 보내게 되는데

서버를 임시용이라 실제로 무슨 값을 받아오는지는 알 수 없다


받아온 값을 text에 넣고

메시지 박스로 보여주는데


이래 나온다 아마 실제로는 다른 HS{이런게 나올테지만..}

'CTF > Write-up' 카테고리의 다른 글

NEWSECU CTF Write-up  (0) 2017.01.01
holyshield ppc  (0) 2016.12.24
holyshield sound  (0) 2016.12.20
holyshield puzzle  (0) 2016.12.19
holyshield ransome  (0) 2016.12.19