컴퓨터를 정리하던 중 예전에 다운로드 받았던 리버싱 문제들을 발견했다. 폴더명은 디미고 본선 리버싱50이었는데 정확히 무슨 ctf였는지 모르겠다.디미ctf 2017 본선 문제였다고한다.그당시에는 풀지못해서 다운로드만 해놓고 손절했던것같은데 지금보니 쉬운 문제였다. srand에 seed값으로 0x3FD1CC7을 주기 때문에 고정된 값이 나온다.즉 그 값들을 테이블로 이용해서 브루트포스를 돌릴 수 있다.1234567891011121314151617181920import stringflag=""table=[0x4D,0x0CB,0x0C3,0x0BB,0x19,0x0A,0x1A,0x7F,0x50,0xF8,0x18,0x08,0x89,0x0C1,0x0A8,0x0CF,0x0BA,0x0BE,0x0EC,0x75,0x90,0..
2주동안 열렸었던 picoCTF 2018 에 참여한 뒤 write-up을 쓴다. 나는 리버싱분야의 문제를 혼자서 풀었다. Reversing Warmup 1 - Points: 50 - (Solves: 6075) ida로 열면 바로 플래그가 보인다. flag:picoCTF{welc0m3_t0_r3VeRs1nG} Reversing Warmup 2 dGg0dF93NHNfczFtcEwz를 base64로 decode하면 th4t_w4s_s1mpL3 이다. flag:th4t_w4s_s1mpL3 be-quick-or-be-dead-1 2가지 방법으로 풀었는데 1.ida remote debugging을 이용해서 시간을 비교하는 분기문에 break point를 걸고 f9로 한번에 실행하는 방법과 2.table을 분석해서 ..
이번에도 리버싱 1문제만 잡았지만 2%부족한 플래그로 인해서 정답을 인증하지 못했다.그래서 풀이가 공개되기 전에 플래그가 무엇인지만 알아내고 내가 먼저 write-up을 쓴다. 그래도 이번에는 ctf가 끝날즈음에 단 1명밖에 풀지못한 문제여서 시간이 조금만 더 있었다면 나도 풀 수 있었을거라고 생각한다. main함수에 들어가면 이런게 보인다!! 16진수 배열을 내가 입력한 문자열과 xor해서 나온값이 내가입력한 문자열의 다음인덱스가 아니면 v5를 0으로 만들어서 플래그가 아닌 NOPE을 출력하고 맞으면 내가 입력한 그 값이 플래그이다. 1 2 3 4 5 6 7 8 9 10 11 #include int main() { int encoded[30 ] = { 0x43 ,0x5F ,0x30 ,0x2B ,0x1C..
이문제는 내가 순천향대 정보보호 페스티벌에 나가서 몇시간을 투자했지만 풀지 못했었던 문제이다.하지만 오늘 다른 사람의 wrtie up의 한 부분을 보고 내가 연산실수를 해서 풀지 못하였다는 사실이 아쉬워서 이해한 내용들을 바탕으로 write up을 쓴다. 주의사항: 내가 이해한 방식으로 write up을 작성하였으므로 객관적으로 봤을 때 틀린 부분이 있을 수 있음 함수 401970이 이 프로그램의 main 격인 부분이다. 10번동안 가위 바위 보를 실행하면서 입력을 받은 후에 11번째가 되면 아래 함수들을 실행한다. 함수 4013D0을 보면 이전에 입력했던 4045A4의 값이 해당 문자에 해당하지 않으면 ++v4를 하는것을 볼수 있는데 아래쪽에 v4>0이면 exit하는 것을 볼 수 있다. 나는 v4를 0..
level 10 풀이를 시작합니다.아이디 / 비밀번호 : level 10 / interesting to hack! 힌트를 보니 key_t 7530 위치에 접근하는 소스코드를 작성하면 되겠군요. i = shmget(7530, 1028, IPC_CREAT|0666)); // 공유 메모리를 위한 ID 7530 - key 값 // 10 - size(byte 단위) // IPC_CREAT - shared memory가 없으면 새로 생성(생성 시 권한 설정 필요) 위 소스코드를 gcc로 컴파일한후에 실행하면 level11의 비밀번호가 나옵니다.level11 비밀번호:what!@#$?
level9 풀이입니다.아이디 / 비밀번호 : level9 / apple 드디어 본격적인 BOF 문제가 나옵니다. /usr/bin/bof 파일을 보니 lelvel10의 setuid가 걸려있고 level9에겐 실행권한만 걸려있어서 gdb로 분석할수 없습니다. 그러니 /usr/bin/bof 파일 대신 hint를 /tmp에 level9.c라는 이름으로 복사한 뒤 다음과 같이 한글을 지워줍니다. 그후 gcc로 컴파일해서 level9라는 실행파을을 만들어주고 gdb로 분석해 줍니다.gdb에 관해서는 아래 블로그의 내용을 읽어 보는 것을 추천합니다. https://blackperl-security.gitlab.io/blog/2016/03/09/2016-03-09-gdbmemory-01/ 여기서 gdb -q 는 gd..
level 8 풀이입니다.아이디 / 비밀번호는 level8 / break the wall 입니다. 힌트를 보니 용량이 2700인 level9의 shadow 파일을 찾아야 합니다.보통 용량은 byte를 나타내므로 용량에 c를 써서 find / - size 2700c를 써야합니다. /etc/rc.d/found.txt 라는 파일을 찾았습니다. 확인해보니 이 파일이 맞군요. 실행해 보니 이런 내용들이 들어있군요. 암호화 되어 있으니 해독해야합니다.저는 예전에 윈도우에 jon179라는 존 더리퍼 툴을 깔았으므로 그걸 이용해서 복호화해보겠습니다. john179의 run 폴더에 ftz.txt 라는 폴더를 만들고 위의 내용을 넣습니다. 그리고 cmd.exe를 run 폴더에 넣고 cmd.exe를 실행해서 john ftz..
level7 풀이입니다.아이디 / 비밀번호는 level7 / come together 입니다. 힌트를 보니 /bin/level7 파일의 암호를 알아야 할 것 같습니다. /bin/level7 파일은 level8의 setuid가 걸려있고 /bin/level7 파일을 실행해서 아무 암호를 입력해 봐도 정답이 아닙니다. 구글링 결과 가상머신 오류로 wrong.txt 파일이 없다고 하는군요.wrong.txt 파일에는 --_--_- --____- ---_-__ --__-_- 이게 들어있습니다.이걸 - 를 1로 _를 0으로 생각해보면 1101101 1100001 1110100 1100101 입니다 4부분으로 나눠서 10진수로 바꿔 보면 109 97 116 101입니다. 합치면 109 97 116 101 입니다. 아스..
level6 풀이입니다.아이디 / 비밀번호는 level6 / what the hell입니다. 아이디와 비밀번호를 입력하고 들어가면 hint가 바로 나옵니다. 그리고 엔터를 누르면 이런 창으로 넘어갑니다. 1번,2번,3번을 전부 다 눌러도 안돼서 접속을 다시 한후에 이 창에서 ctrl + c 를 눌러서 종료해봤습니다. 목록을 보니 hint와 password가 있어서 hint를 보니 처음에 본 그 힌트였고 password를 보니 level7의 패스워드가 있습니다. level7 비밀번호 : come together