Hacking 썸네일형 리스트형 Pwnable.kr - FD 파일 디스크립터를 이해해야 쉬운 문제인데,기본적으로 read의 fd는 0 이 되야한다. 0이 되면 표준 입력 모드가 되서 read로 입력을 받을수가 있다. 0x1234 에서 0x1234를 빼면 0이되서 표준 입력을 실행할수 있으니까 인자에 4660을 넣으면 입력을 할수있다. 플래그를 얻었다! 더보기 Lord Of Buffer Over Flow - Troll -> Vampire 우리는 지금까지 ret부분을 0xbfff~~~ 로 써왔지만 이번에는 못쓴다! 그래서 \x90을 엄청많이 너어서 0xbfff가 안나오는 주소로 하면된다. 스택의 특성을 이용하는거임!! \x90을 엄청 많이 넣었다 엄청 넣어서 xff가 위치하지 않는 주소에다가 \x90이 위치했다.이제 저주소로 ret을 돌리면 되는것!! 더보기 Lord Of Buffer Over Flow - Orge -> Troll 이번에는 아예 argv[1]을 못쓰게 해버렸다 흑흑 ㅠㅠㅠㅠ 하지만 우리는 전 단계 처럼 argv[0]에 쉘코드를 집어넣어서 할수있다! ln으로 심볼릭 링크를 걸어서 하면 되는데,bash2를 안하면 제대로 안된다.. (하 내가 이랬음) 참고로 쉘코드는 \x2f가 있으면 제대로 생성이 안되서 \x2f 가없는 쉘코드를 이용해야 한다. 저기 "\x90" 이 있으니까 저기 주소로 ret을 채우면 된다. 더보기 Lord Of Buffer Over Flow - Darkelf -> Orge darkelf의 소스인데 이번에는 argv[0]을 체크한다. argv[0]이 뭐냐면 argv[0]은 파일의 이름이라고 나와있다! 그러면 심볼릭링크를 걸어서 바이너리를 77글자 이상으로 하면된다. 왜 a가 75글자냐면 "./" 도 포함되기때문에 ./까지 합하면 77글자가 완성된다! 그이후로는 똑같이하면됨 호호호호 더보기 Lord Of Buffer Over Flow - Wolfman -> Darkelf darkelf 소스인데 첫번쨰 인자에 48byte이상을 넣지 못하게 해놓았지만,우리는 argv2에 nop+shellcode를 넣을수있다! 파이썬으로 문자열을 넣은후 " "(스페이스바)를 넣으면 두번쨰 인자에 넣을수가있다! 그러고 전 문제처럼 똑같이 해주면된다. 여기에 있는 nop코드들로 eip를 돌리자 실제 바이너리 에다가 해보자. 더보기 Lord Of Buffer Over Flow - Orc -> Wolfman 코드인데 환경변수를 못쓰게 해놨지만 우리는 전에 환경변수를 안썼으므로 똑같이 하면 된다! 더보기 Lord Of Buffer Over Flow - Goblin -> Orc 이번엔 환경변수를 사용 못한다 ㅠㅠ 근데 그냥 1번문제에서 푼대로 풀면됨 어짜피 ret은 0xbfxxxxxx 이런식일테니까! ret을 모르니까 \xbf\xbf\xbf\xbf 로 두고 nop seld를 이용한다 0xbffff770 을 이용하자 오예 쉘을 땄다! 그러면 실제 바이너리로 해보자 쉘을 땄다! 더보기 Lord Of Buffer Over Flow - Cobolt -> Goblin 전 문제랑 똑같은데 입력값을 받는거 밖에 없다! 입력값을 넣을려면 |(파이프)로 넣으면된다 처음에 bash2 안하다가 왜 안되지?? 했다 bash2를 습관화 하자! 더보기 Lord Of Buffer Over Flow - Gremlin -> Cobolt gremlin의 소스인데 버퍼가 16byte밖에 할당이 안되서 쉘코드를 박을수 없다! 그래서 환경변수에 쉘코드를 박고 그 주소를 넣으면 된다 환경변수에 쉘코드를 박고 환경변수 주소를 알아내는 프로그램을 작성해서 알아내는 과정이다. 소스는 이렇다 20바이트 (buffer + sfp) 넣고 ret에다가 환경변수 주소를 넣으면 쉘코드가 박히면서 쉘이 따임!! 더보기 Lord Of Buffer Over Flow - Gate ->Gremlin 먼저 gate의 코드는 이렇다. buffer로 256 만큼 할당하고 strcpy로 문자열을 복사해서 출력 해주는데 strcpy로 복사할떄 길이 제한을 두지않아서 Basic buffer over flow 가 일어난다! 먼저 처음 할당된 버퍼는 buffer(256) + sfp(4) + ret(4) 바이트 할당 되있어서 ret을 쉘코드가 있는 주소로 돌리면 된다. aaaa는 sfp고 bbbb는 ret인데 ret을 bbbb로 덮이니까 eip가 bbbb로 반환됬음! 그러면 nop sled를 이용해서 nop을 채운후 shellcode를 넣어서 ret을 nop이 채워져있는 주소로 채우면 nop을 향해 내려가면서 쉘코드가 실행된다! 대충 이런식?? 대충 이런식으로 했는데 buffer+sfp까지 채우고 ret은 아직 모.. 더보기 이전 1 2 다음