'전체 글'에 해당되는 글 1000건


webhacking.kr 30번 문제다.

점수는 550point.

업로드 기능이 있고 힌트 페이지가 있다. 일단 들어가보자.

흠... 대충보니 지정한 디비에 지정한 테이블에 패스워드값이 존재하면 크랙되는 것 같다.

파일 업로드를 통해 challenge_30_answer 테이블에 패스워드를 삽입해주려고 insert문을 활용해 이것저것 시도해보려했는데 애초에 뭘해도 upload error가 나온다. ㅡㅡ 

그래서 생각한게 .htaccess파일은 업로드가 될까 하고 해봤더니 업로드에러가아니고 사이트 상에서 보안으로 막아놔 업로드가 안되는 상태였다. 그렇다면 .htaccess에 mysql관련해서 무슨 설정을 할 수 있는게 있지 않을까 생각해 찾아보니
#php_value mysql.default_host "호스트"
#php_value mysql.default_user "root"
#php_value mysql.default_password "passme"
같은 식으로 디비자체를 webhacking.kr 쪽 디비가 아닌 내 로컬피씨 디비로 연결이 가능한 것 같다.

그럼이제 이걸 실험을 해봐야하는데 여기서 결국 또 보안때매 막아논 상황이라 더이상 시도를 할 수가 없었다. 재밌어보이는 문제였는데 지금 할수가 없어 아쉽다. 나중에 다시 할 수 있는 상황이되면 도전해 보겠다.


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

webhacking.kr 32번  (0) 2018.01.14
webhacking.kr 31번  (0) 2018.01.12
webhacking.kr 29번  (0) 2018.01.12
webhacking.kr 28번  (0) 2018.01.12
webhacking.kr 27번  (0) 2018.01.12
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

소스를 보면 다음과 같다.



ret에 strcpy@plt 주소가 들어가야한다. 즉 strcpy를 활용해서 익스플로잇을 해야하는 상황인 것 같았다.

쭉 보니 strcpy 주소로 덮인 ret의 다음 4바이트값을 AAAA로 초기화 시킨다. strcpy함수 수행 후 ret를 수행할 때 내가 원하는 주소로 EIP를 변경못하도록 막아논 코드였다.


여기서 맨 처음 문제에 PLT라고 나와있길래 strcpy의 PLT 주소를 가지고 뭔가 하는건가 싶어서 한참 삽질하다 strcpy를 어떤식으로 써먹을수없을까 생각해보니 아이디어가 떠올랐다.


buf(A*44)+RET(strcpy주소)+AAAA


요런 구조에서 main이 끝나면서 RET로 strcpy가 실행될때 src,dst 인자값을 모두 줄 수 있다는 사실과 strcpy가 src메모리영역의 값을 dst메모리영역에 덮어씌운다는 점에서 뭔가 익스가 될것같았다.


strcpy를 통해 src 메모리 영역을 덮을 수 있으니 AAAA로 덮인 RET영역을 src에 넣고

쉘코드나 system 함수 주소를 dst에 넣어서 익스플로잇했다.


페이로드 구성은 이런식으로 했다.


system함수 주소 + "BBBB" + /bin/sh문자열주소 + "A"*32+strcpy@plt 주소+"CCCC"+"ret+4주소"+"buf주소"


위의 형식에 맞게 하나씩 구해주면 된다.

 

system함수 주소 = 0x40058ae0



strcpy@plt 주소 = 0x8048410



/bin/sh문자열 주소(system함수내의 /bin/sh주소사용) = 0x400fbff9



이제 ret+4와 buf주소만 구하면 되는데 코어 덤프파일로 실제 주소확인 후 익스플로잇했는데 계속 세그먼트 fault가 떠서 도저히 이유를 못찾다가 그냥 brute forcing하는 코드짜서 돌렸다. 여기서 엄청난 삽질을 해서 멘탈이 나갔었다..ㅠ


ret+4와 buf주소는 48바이트만큼 차이가 나므로 이를 활용해 코드를 짰다. 




잘나온당.


















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

[Remind] LOB gate -> gremlin  (0) 2019.04.10
LOB nightmare -> xavius  (0) 2018.01.12
LOB zombie_assassin -> succubus  (0) 2018.01.11
LOB assassin -> zombie_assassin  (0) 2018.01.11
LOB giant -> assassin  (0) 2018.01.11
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 29번 문제다.

점수는 400point.

업로드가 가능하고 이를 활용해 힌트로 알려준 select password from c29_tb 구문을 활용해야 할 것

같다.

아무 파일이나 업로드 시켜봤다.

다음과 같이 time ip file 이름이 뜬다.

패킷으로 잡아봤는데 filename 말고는 따로 넘겨주는게 없다. 그렇다면 이름을 가지고 쿼리를 조작해야 할 것 같다.

흠 대충 예상해보면 insert into table_name values('$time','$ip','$_GET[file_name]')와 같은 형식으로 파일이 저장되고 저장이 성공하면 내 ip값에 해당하는 애들만 출력해주는 것 같다.

※ip값은 .을 필터링해서 아스키코드값으로 저장했다.
그렇다면 file_name으로 asadf'),('asfsadf',char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7),select password from c29_tb))-- x
을 주면 서브쿼리 값이 디비에 저장될 것 같았다. 근데 querry error가 뜬다. 

쿼리문이 뭔가 잘못 된 것 같은데 이런저런 생각을하다가 file_name이 삽입되는 순서가 맨 뒤가 아닐지도 모른다는 생각이 들었다. 그래서 앞의 삽입데이터가 3개가 아닌 2개나 1개가 되서 쿼리에러가 뜬게 아닐까? 그래서 한번 생각을 바꿔 file_name의 위치가 2번째, 1번째일 수 있다 생각하고 쿼리문을 작성해 봤다.

먼저 2번째일 경우
asdfsadf','sadfsadf')-- x
여전히 쿼리 에러..

그렇다면 1번째였을 경우 
asdfsadf','sadfsadf','asdfsadf')-- x 입력

오 쿼리 에러가 안뜬다. 그렇다면 file_name의 위치가 맨 앞이었단걸 알아냈다.
하..생각해내기 참 힘들다 ㅡㅠ..

그럼이제 2,3번째 쿼리의 순서만 맞게 넣어주면 제대로 동작할 것 같다. 

asfsadf',char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7),(select password from c29_tb))-- x

와 같이 넣어줘봤다.

별 반응이 없다.. 설마.. ㅜ 제발..

마지막으로

asfsadf',(select password from c29_tb),char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7))-- x 

와 같이 넣어줘봤다.


와...됐다... 이거안됬으면 진짜 열받았을 것 같다. 맞다 싶어서 몇 시간동안 개고생했는데 안되서 풀이보고 풀어버리면 너무 허무할까봐 집어치우고 싶던거 꾸역꾸역 해봤는데 성공해서 다행이다.

성공!


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

webhacking.kr 31번  (0) 2018.01.12
webhacking.kr 30번  (0) 2018.01.12
webhacking.kr 28번  (0) 2018.01.12
webhacking.kr 27번  (0) 2018.01.12
webhacking.kr 26번  (0) 2018.01.11
블로그 이미지

JeonYoungSin

메모 기록용 공간

,