목록* (243)
CIDY

hmm... 진짜 orw시스템이다. fp와 magicbuf, filename은 모두 전역에 있다. fp는 FILE*, magicbuf는 char[416](0x190 == 400), filename은 char[64]짜리이다. 만약 filename안에 "flag"가 포함되어 있으면 exit한다. 그게 아니면 오픈해줌. fp에서 magicbuf로 0x18만큼 읽어온다. 이건 좀 빡세다. filename에 flag가 있거나, magicbuf에 FLAG 혹은 } 가 있으면 can`t see라고 한다. 읽기만 필터링한 줄 알았는데 쓰기도 필터링이... 근데 그 외의 파일들은 모두 읽을 수 있는듯하다. fp를 닫고 초기화시켜준다. name은 전역변수다. 여기서 무한입력을 받는다. 뭐 덮을 게 있는지 알아봐야 할듯. ..

원래 오늘 이거까지 두문제 풀랬는데 silver bullet에서 약간 삽질해서 이거 풀 시간이 조금 줄어듦ㅠㅠ 어쩌다 이거보다 revenge를 먼저 풀어버렸는데, revenge는 약간 기출 좀 풀어봤으면 바로 풀 수 있는 문제였는데 이건 잘 기억이 안난다. 그래도 revenge보다는 쉽지 않을까? 한번 풀어보자. heap문제인데 partial relro? pie없는건 너무 좋다. menu문제 중에서도 매우 정직한 편인듯. 당연히 제목에서도 볼 수 있듯이 힙문제임. 환경은 그때 tache썼던거 같으니까 18.04에서 하면 될듯. revenge도 18.04에서 문제없이 됐던 것 같다. 이건 alloc함수임. 일단 heap배열이 0, 1만 있는 것으로 보아 딱 두칸까지만 할당해서 그 주소를 저장해주는 것 같다..

- 그럼 본격적으로 문제를 풀어보자. 이건 예전에 풀었던 문제인데 새롭게 풀어보려는 것임. 뭐지 이 애매한 보호기법은.. 32비트 그만나왔으면 좋겠다. 또 메뉴 문제다. 1번 메뉴이다. s에 bullet을 만드는 것 같은데, 이미 값이 있으면 안된다. (s는 0x30만큼 memset된 상태) 그리고 0x30입력받고 그 길이를 v2에 저장하는데, 꽉채우면 쓰레기값 때문에 0x30을 넘길 수 있을지도 모른다는 생각이 들었다. (근데 main보니 초기화돼있어서 안될지도? 근데 앞바이트를 \x00주면 계속 생성할 수 있는건가 ㅋㅋ) 그리고 0x30이후에 int형으로 v2를 저장한다. 2번 메뉴이다. 여기서 dest는 main의 s이다. s를 새롭게 선언함. 그리고 dest즉 main의 s에 값이 있어야 == b..

레전드 삽질이다. 역시 난 아직 한참 멀었다. 메인은 간단하다. 메뉴 형식으로 된 문제인데, 핸들러가 메인임. 1. 매장 2. 카트 담기 3. 카트에서 뺴기 4. 카트 리스트 5. 체크아웃 6. 나가기로 구성되어 있음. 1번 메뉴부터 보자. 정말 applestore였구나ㅋㅋ 기종과 그에 따른 가격을 볼 수 있다. 2번(카트 담기)메뉴로 가면 뭘 살건지 묻는다. 만약 이상한 번호를 입력하면 idiot이라고 욕함 ㅋㅋ create함수가 뭐냐면.. 이렇게 생겼음. 카트 담니 빼니 했을때부터 예상은 했는데 malloc문제였음ㅋㅋ 매개변수 순서가 바뀐 것 같은데 이정도는 눈감아주자. (애초에 전달부터가 문자열이랑 int가 바뀌어있기는 함.) -> 잘못된게 아니었음........ 0x10만큼 malloc한 주소를 ..

문제풀다가 2023년이 됐다. 왜인지 모르겠는데 객관적으로 가장 힘들었어야 할 2021년이 어른이 된 후 가장 행복했던 기억으로 남아 있다. 그땐 정말 혼자였지만 오히려 그래서 편했고, 스스로 나날이 눈에 보이는 성취를 낼 수 있었기 때문인 것 같다. 올해는 포너블에서 무언가를 성취할 수 있었으면 좋겠다:) 적당한 mitigation. pie가 없는건 아주 맘에 든다. 예전에 풀었던 문제인데 라업 정리가 안 돼있어서 다시 풀어보기로 했다. 사실 무슨 문제였는지 기억도 잘 안 남ㅋㅋ 메뉴 문제다. add delete print... 동적할당문제인가 싶은 메뉴 이름이다. 그리고 아마 print에서 립씨릭이 되지 않을까 궁예해본다. add note부터 알아보자. 804a0ac는 note 개수 count같다. ..

버블소트도 아니고 이건 뭐지 풀 보호기법이다. 흠........ 이름 입력받고, 출력해준다. memset안하니까 여기서 뭐 쓸만한거 릭하면 될듯. 그런다음에 숫자 몇 개 소트할거냐고 묻는다. 입력받은 숫자 개수만큼 반복문 돌면서 숫자 입력받는다. 근데 v10은 int형인데다가..뭐 ida가 디컴파일해주는거니 그럴 수 있다고 쳐도 공간이 0x20밖에 없다. 그럼 8개밖에 못받는거 아닌가? 저 함수는 sort함수인듯하다. 저게 bubblesort라서 문제 이름이 이런듯. 그리고 result쭉 출력해줌 뭐야 코드가 이게 끝이다. 일단 립씨릭은 앞서 말했던 방법(memset X)으로 쉽게 가능하고, 그리고 자기가 원하는 만큼 입력보낼 수 있으니까 그걸로 ret덮으면 그만이다. 문제는 카나리인데, 입력 서식문자가..

이름값하는 문제인듯. 일단 보호를 끄고 다운받았다. backdoor... 일단 문제를 풀어야 하니 풀고 나서 생각해야겠다. 쉘코드 바로 실행시켜주는데 seccomp걸려있다. 모르겠다 그냥 대충 execve나 그런거 걸러주는거겠지 alphanumeric조건이나 뭐 다른 이상한 건 안 보이니 그냥 문제에서 제시한대로 orw하면 될듯. ㅇㅎ 그러니까 32비트도 syscall인자는 stack이 아니라 레지스터였던거구나. start문제에서의 의문점이 해결되었다. from pwn import * context.arch = 'i386' p = remote("chall.pwnable.tw", 10001) #p = process("./orw") sc = asm(""" push 0x00006761 push 0x6c662f..
보호되어 있는 글입니다.