'분류 전체보기'에 해당되는 글 1000건

소스를 보면 RET값에 공유 라이브러리 영역과 스택영역값을 쓸수없도록 되어있다. 일반적으로 생각했을땐 익스플로잇 하기 힘들다 생각할 수 있지만 RET Sled 기법을 사용하면 우회가 가능하다.


RET값에 RET명령어의 주소값을 넣어주면 RET가 2번실행되면서 기존에 BOF통해 덮은 RET + "4바이트"의 4바이트 지점으로 EIP가 이동된다. 그럼 환경변수를 통해 쉘 코드를 올려놓고 RET 뒤의 4바이트값을 쉘코드 주소로 넣어주면 된다. ret명령어 주소는 main 함수의 맨 마지막에 있는 ret명령어 주소값을 썼다. 



'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB zombie_assassin -> succubus  (0) 2018.01.11
LOB assassin -> zombie_assassin  (0) 2018.01.11
LOB bugbear -> giant  (0) 2018.01.11
LOB darkknight -> bugbear  (0) 2018.01.10
LOB golem -> darkknight  (0) 2018.01.09
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

엄청나게 삽질을 한 문제다.


일단 소스를 보면 전과 다르게 엄청나게 길어진 것을 볼 수 있다.



소스를 잘 보면 결국 execve함수의 주소를 구한뒤 이 값이 ret값이랑 일치해야 기본적으로 익스를 진행할 수 있는 구조다. 그렇다면 execve를 활용해서 쉘을 따야된다는 건데 execve함수를 잘 몰라서 찾아보니 이런 형태의 함수였다.


int execve(const char *path, char *const argv[], char *const envp[]);

path에 지정한 경로명의 파일을 실행하며 argv, envp를 인자로 전달한다. argv envp는 포인터 배열이다이 배열의 마지막에는 NULL 문자열을 저장해야 한다.


요 형식대로라면 첫번째 인자로 /bin/sh 문자열 주소를 넣어주고, 두번째 인자로는 {/bin/sh문자열주소,NULL문자열 주소}, 세번째 인자로는 환경변순데 NULL을 줘도 무관해서 결국 NULL문자열의 주소를 사용하면 될 것 같았다.



요런식으로 간단하게 execve를 이용해서 쉘을 띄우는 소스를짜서 실제로 디버깅을 해봤다.



execve 함수의 인자값을 보면 첫번째 인자인 0x8048450 주소값을 보면 /bin/sh 문자열이 저장되어 있었고 두번째 인자인 eax값의 담긴 주소값을 보면 /bin/sh문자열 이후 NULL값이 담겨있는걸 실제로 확인할 수 있었다. (두번째 포인터형 배열인 argv에서 *argv[0], *argv[1] 영역에 /bin/sh , NULL의 문자열 주소값이 아닌 그냥 값이 담겨있었던 이유는 잘 모르겠음. 전체적인 메모리구조 및 포인터에 대한 지식이 너무 부족함.)



그럼이제 다음과 같이 총3가지 재료들을 모아주면 된다.

execve 주소

/bin/sh 문자열 주소

/bin/sh 문자열 주소 +  NULL값이 있는 주소


execve 주소는 기존 코드에 의하면 값을 구하는과정에서 /home/giant/assassin 이라는 파일에 대한 읽기 권한이 필요한데 현재 권한에서는 해당 파일의 읽기권한이 없어 코드를 그대로 실행했을 경우 제대로된 execve값이 세팅이 안되기 때문에 소스에서 /home/giant/assassin 파일을 /home/bugbear/giant 파일로 바꾼후 printf로 execve값을 출력하도록 수정한뒤 컴파일한 파일로 구했다.





execve 주소 = 0x400a9d48


그 다음 /bin/sh 문자열 주소를 구해야되는데 간단하게 환경변수에 올려놓고 주소값 구하는 방식을 사용했다.


마지막으로 가장 큰 문제였던 두번째 인자값을 구해야 했는데 스택 내 맨 마지막에 프로그램명+NULL이 저장되는 것을 활용했다.


위의 두가지 개념을 생각해논 다음 먼저 환경변수에 /bin/sh를 올려놓고 주소값을 구했다. 이 때 실행파일명에 주소값이 영향을 받으므로 최종적으로 익스할때 쓸 실행파일명이 4바이트주소값이므로 임의의 4바이트 주소값으로 실행파일명을 정해논다음 해당파일에서 환경변수값을 구했다.




세그먼트 에러낸 후 코어파일에서 정확한 주소값을 구했다.



/bin/sh 문자열 주소 = 0xbfffff3b


마지막으로 두번째 인자값의 주소는 스택내 맨 마지막 부분의 주소를 위의 코어파일을 통해 구했다.



/bin/sh 문자열 주소 + NULL 주소 값이 있는 주소 = 0xbffffff7


이제 실행파일명을 /bin/sh문자열이 있는 주소로 변경한뒤 구해논 재료들을 가지고 익스플로잇하면 된다.



? 완벽하게 구했다고 생각했는데 execve값이 계속 틀리다고 나왔다. 여기서 엄청난 삽질을 하다 멘탈이 나갔는데 결국 구글링해서 알고보니 execve 주소값에 들어간 \x0a값이 개행문자로 들어가서 그 뒤에 값들이 제대로 인자값으로 안들어간거였다.


인자값을 ""로 묶어주면 %0a가 개행으로 안들어가서 익스할수있었다.



이제 심볼릭 링크걸고 익스해주면 된다.















'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB assassin -> zombie_assassin  (0) 2018.01.11
LOB giant -> assassin  (0) 2018.01.11
LOB darkknight -> bugbear  (0) 2018.01.10
LOB golem -> darkknight  (0) 2018.01.09
LOB skeleton -> golem  (0) 2018.01.09
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

문제고장.

'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 21번  (0) 2018.01.11
webhacking.kr 20번  (0) 2018.01.11
webhacking.kr 18번  (0) 2018.01.11
webhacking.kr 17번  (0) 2018.01.11
webhacking.kr 16번  (0) 2018.01.10
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 18번 문제다.

점수는 100point.

들어가보니 sql injection 문제라도 대놓고 말해준다. 일단 소스보라고 올려놓았으니 보도록 하자.



no값을 통해 쿼리를 전달하면 될 것 같다. 이 때 몇가지 필터링이 이루어지고 있기 때문에 이를 회피해야 한다.

처음엔 1 or union admin 으로 주면 간단할 것 같았는데 위에보니 union이 필터링 되고있다.

그래서 그냥 1값을 줘 참값을 만들어 넘겨보니 다음과 같이 화면이 뜬다.

그렇다면 이를 활용해 1 or 1 을 주면 전체값들이 다 나올것이라고 생각했다. 근데 hi guest만 나온다. 
아마 id값에 맨 첫번째만 나오는 것 같다. 그렇다면 여기서 limit를 활용해주면 될거라고 생각했다.

1 or 1 limit 1,1을 주면 2번째 id값이 나올것이므로 넣어봤더니 다음과 같이성공한다.! 이때 공백에대해서 %20으로 url encoding에서 사용했더니 필터링되고있어 %0a를 활용했다.

성공!


'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 20번  (0) 2018.01.11
webhacking.kr 19번  (0) 2018.01.11
webhacking.kr 17번  (0) 2018.01.11
webhacking.kr 16번  (0) 2018.01.10
webhacking.kr 15번  (0) 2018.01.10
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 17번 문제다. 

점수는 100point.

들어가서 대충값주고 입력해보니 alert창이 뜬다. 스크립트가 있는 것 같다. 소스부터 확인해보자.

대충 보니 결국 원하는게 unlock/10이다. 입력값으로 unlock을 입력해주면 저 값이 나오는데 unlock값을 따로 구할필요도 없다. 그냥 burp suit로 다음과같이 페이지를 요청하면 바로 unlock/10을 뱉어내도록 수정했다.

다음과 같이 키 패스워드값을 알아낼 수 있다.

성공!


'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 19번  (0) 2018.01.11
webhacking.kr 18번  (0) 2018.01.11
webhacking.kr 16번  (0) 2018.01.10
webhacking.kr 15번  (0) 2018.01.10
webhacking.kr 14번  (0) 2018.01.09
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

LDAP Injection Research

2018. 1. 10. 10:51

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Xpath Injection Research

2018. 1. 10. 10:49

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

NoSQL SQL Injection Research

2018. 1. 10. 10:49

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

소스를 보면 RET의 첫바이트 영역 검증을 통해 RET를 스택내의 값으로 돌릴 수가 없다. 즉 스택내에 쉘코드를 올려봤자 실행할 수가 없다는 것이다. 그러다면 스택영역 외의 영역을 통해 익스를 해야하는데 간단한 RTL을 통해 공유라이브러리의 system함수를 사용하면 가능하다.

 

 

system함수 주소와 환경변수에 /bin/sh문자열 올린 후 주소값 구해서 RTL로 익스하면된다.

 

 

 

 

'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB giant -> assassin  (0) 2018.01.11
LOB bugbear -> giant  (0) 2018.01.11
LOB golem -> darkknight  (0) 2018.01.09
LOB skeleton -> golem  (0) 2018.01.09
LOB vampire -> skeleton  (0) 2018.01.09
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 16번 문제다.

점수는 100point.

들어가보니 별이 보인다. 뭔지 모르겠다. 소스부터확인해보자.

 

흠 보아하니 키보드를 누르면 mv함수가 실행되는데 이 때 아스키코드값으로 100 97 119 115 124를 주면 특별한 동작을 하는 것 같다. 

100 97 119 115에 해당하는 d a w s값을 눌러봤다. 예쁜 별들이 막 나온다.

위에는 심심해서 해본거고 딱봐도 아스키코드값 124에 해당하는 버튼을 누르면 끝나는 문제다. 찾아보니 |가 아스키코드값 124에 해당한다.

눌러보자.

성공!


'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 18번  (0) 2018.01.11
webhacking.kr 17번  (0) 2018.01.11
webhacking.kr 15번  (0) 2018.01.10
webhacking.kr 14번  (0) 2018.01.09
webhacking.kr 13번  (0) 2018.01.09
블로그 이미지

JeonYoungSin

메모 기록용 공간

,