'Wargame > webhacking.kr' 카테고리의 다른 글
webhacking.kr 17번 (0) | 2018.01.11 |
---|---|
webhacking.kr 16번 (0) | 2018.01.10 |
webhacking.kr 14번 (0) | 2018.01.09 |
webhacking.kr 13번 (0) | 2018.01.09 |
webhacking.kr 12번 (0) | 2018.01.09 |
webhacking.kr 17번 (0) | 2018.01.11 |
---|---|
webhacking.kr 16번 (0) | 2018.01.10 |
webhacking.kr 14번 (0) | 2018.01.09 |
webhacking.kr 13번 (0) | 2018.01.09 |
webhacking.kr 12번 (0) | 2018.01.09 |
webhacking.kr 16번 (0) | 2018.01.10 |
---|---|
webhacking.kr 15번 (0) | 2018.01.10 |
webhacking.kr 13번 (0) | 2018.01.09 |
webhacking.kr 12번 (0) | 2018.01.09 |
webhacking.kr 11번 (0) | 2018.01.09 |
소스를 보면 버퍼,환경변수,매개변수,스택 초기화 같은 로직은 없는데 overflow 가능한 영역이 sfp의 1바이트 뿐이다. fake ebp 기법 전에 간단하게 개념잡으라고 낸 문제같다.
41바이트를 A로 넣고 스택영역을보면 다음과 같다. 맨마지막 41바이트째 값이 SFP의 마지막1바이트로 들어간걸 볼 수 있다. 만약 이 값을 buf시작주소-4영역으로 바꾸게 되면 leave 명령어로 인해 main함수로 복귀시 ebp가 buf-4영역으로 바뀌어있고 main함수에서 leave ret 명령어를 실행하게되면 leave 명령어로 인해 buf-4영역의 4바이트값이 제거되고 그다음 ret명령어로 인해 buf+0 영역의 값이 eip되어 해당 eip값으로 점프가 될 것이다.
그렇다면 위의 개념을 인지한채 페이로드짜서 익스하면 된다. 중간에 gdb로 구한 주소값으로 익스했더니 에러나서 코어파일 디버깅해서 정확한 주소 구한뒤 익스했다.
LOB bugbear -> giant (0) | 2018.01.11 |
---|---|
LOB darkknight -> bugbear (0) | 2018.01.10 |
LOB skeleton -> golem (0) | 2018.01.09 |
LOB vampire -> skeleton (0) | 2018.01.09 |
LOB troll -> vampire (0) | 2018.01.09 |
소스를 보면 이전단계에서 ret이후 모든 스택영역을 싹다 날리는 코드가 추가됬다.
argv , 파일명 , 환경변수 , 버퍼 싹다 못쓴다. 유일하게 덮을 수 있는게 ret뿐이라 rtl도 안된다. ret만 가지고
뭘 할 수 있을까 한참 생각하다 스택내에선 뭘 어쩌지 못하겠다 싶어서 다른영역에 뭔가 내가원하는 값들을
삽입할 수 있는게 있나 찾아보다 이런걸 발견했다.
환경변수 중에 LD_PRELOAD라는 값이 있는데 이 값은 프로그램이 메모리에 로딩되기 전에 메모리에 저장된다고 한다. 그럼 ret 이후의 스택영역이 아닌 그 이전영역에 값이 존재할거기때문에 초기화가 안된다.
그럼 이제 LD_PRELOAD 환경변수에 쉘코드를 저장시켜야되는데 LD_PRELOAD에는 공유라이브러리 파일명을 저장시켜야 프로그램이 제대로 동작이 되기 때문에 먼저 공유라이브러리 파일을 만들었다.
c파일은 아무거나 하나 만들면되고 컴파일 시 해당 파일이 공유라이브러리 및 동적라이브러리로 사용되도록 -fPIC -shared 옵션을 추가해서 컴파일해줬다.
-fPIC : Position-Independent Code의 약자로 test.o파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션
-shared : 공유 라이브러리로 만드는 옵션
요렇게 만들어준 다음에 해당 파일을 LD_PRELOAD 환경변수에 적용시켜줬다. 이때 정확한 이유는 모르겠지만 파일경로를 절대경로로 해야 에러가 안났다.
여기까지되면 LD_PRELOAD가 저장된 영역 주소값을 찾아야되는데 이 영역은 프로그램의 스택보다 낮은 주소에 존재하므로 esp 레지스터를 기준으로 하위주소들에 쉘코드가 박혀있는 부분을 gdb로 찾았다.
위의 영역에 쉘코드가 올라와있었고 대충 중간값줘서 익스했다.
LOB darkknight -> bugbear (0) | 2018.01.10 |
---|---|
LOB golem -> darkknight (0) | 2018.01.09 |
LOB vampire -> skeleton (0) | 2018.01.09 |
LOB troll -> vampire (0) | 2018.01.09 |
LOB orge -> troll (0) | 2018.01.08 |
webhacking.kr 12번 문제다. 스크립트 부분에 아스키코드값으로 상당히 보기싫게 적힌 코드가 있다. 크롬 개발자모드에서 다음과 같이 수정해 줘보자. 코드를 보니 ck값이 "="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3) 성공! |
webhacking.kr 14번 (0) | 2018.01.09 |
---|---|
webhacking.kr 13번 (0) | 2018.01.09 |
webhacking.kr 11번 (0) | 2018.01.09 |
webhacking.kr 10번 (0) | 2018.01.09 |
webhacking.kr 9번 (0) | 2018.01.09 |
webhacking.kr 11번 문제다.
|
webhacking.kr 13번 (0) | 2018.01.09 |
---|---|
webhacking.kr 12번 (0) | 2018.01.09 |
webhacking.kr 10번 (0) | 2018.01.09 |
webhacking.kr 9번 (0) | 2018.01.09 |
webhacking.kr 8번 (0) | 2018.01.09 |
webhacking.kr 10번 문제다. 소스부터 확인해보자. 흠.. 상당히 간단한 문제다. ????성공했다. |
webhacking.kr 12번 (0) | 2018.01.09 |
---|---|
webhacking.kr 11번 (0) | 2018.01.09 |
webhacking.kr 9번 (0) | 2018.01.09 |
webhacking.kr 8번 (0) | 2018.01.09 |
webhacking.kr 7번 (0) | 2018.01.09 |
webhacking.kr 8번 문제다. index.phps로 들어가봐야 할 것 같다. 흠.. 보아하니 패킷의 USER-AGENT 값을 통해 쿼리를 조작해야 할 것 같다. 천천히 분석해보니 중요한 구문이
성공! 웹쪽은 밀린 포스팅이 너무 많다 ㅠㅠ 당분간 문제푸는거좀 줄이고 포스팅도 좀 같이 하면서 해야할듯... |
webhacking.kr 10번 (0) | 2018.01.09 |
---|---|
webhacking.kr 9번 (0) | 2018.01.09 |
webhacking.kr 7번 (0) | 2018.01.09 |
webhacking.kr 6번 (0) | 2018.01.09 |
webhacking.kr 5번 (0) | 2018.01.09 |