'Wargame'에 해당되는 글 454건

root-me XML External Entity

2018. 1. 13. 10:40

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

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

소스를 보면 다음과 같다.



스택영역 , 코드영역 , 공유라이브러리 영역, LD_PRELOAD 모두 사용이 불가능하다.


근데 공유라이브러리 영역만 이상하게 간단하게 "\x40"을 체크하지않고 필터링을 한다. 여기서 뭔가 이상하다는 느낌이 들었고 \x40영역에 함수주소외에 뭔가 내가사용할 수 있는게 있는건가라는 생각이 들었다.


이걸로 뭘 할수있을까 한참을 고민해봤는데 아무리생각해도 내가알고 있는 범위내에서는 답이 없었다. 그래서 그냥 노가다로 main 마지막부분에 bp걸고 A오질라게 넣은다음에  40000000 주소부터 내가 넣은값이 혹시 저장이 될까 싶은 마음에 그냥한번 쭉 봐봤다.



??설마했는데 진짜 내가입력한 값이 들어가있었다. 두세번정도 더 해봤는데 같은위치에 내가 입력한 값이 정확히 들어가고있었다. ㅋㅋ 일단 이유는 전혀 몰랐고 실제로 익스플로잇이 되나 쉘코드 넣어보고 RET로 호출해봤다.



진짜 쉘이 떴다. 엄청난 삽질로 풀긴풀었는데 왜저기 내가입력한 값이 들어가는지 궁금해서 좀더 찾아보니 이런이유가 있었다.


소스를 보면 fgets함수를 통해 내가입력한 값이 buffer에 저장되는데 이때 3번째 인자인 stdin이 포인트였다.

stdin은 표준입력 파일 스트림으로 내가 어떠한 값을 입력하는동안 이 값들이 입력 버퍼란 곳에 저장이 되고 있었다.


내가 어거지로 찾은 곳이 바로 이곳이었다. ㅋㅋ


실제로 디버깅해서 입력버퍼를 한번 찾아들어가봤다.



fgets의 3번째 인자가 stdin이므로 stdin에 해당하는 값은 0x8049a3c였다.


fgets아래에 bp걸고 아무값이나 넣어본 다음 stdin값을 출력해봤다.



출력되는 값을 보면 stdin의 값이 0x401068c0인걸 알 수 있고 해당 주소를 출력해봤다.



stdin 구조체 값들이 나왔고 각 영역별로 하는 역할이 따로 정해져있는것 같았고 그 중에 내가 입력한 값이 존재했던 0x40015000영역이 실제로 stdin 구조체 내에 존재하는 것을 확인할 수 있었다.


 













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

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

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 31번 문제다.

점수는 150point.

들어가보니 랜덤한 포트로 내 아이피로 연결을 요청하는 것 같다. 현재 내 아이피의 10000~10100대 포트가 막혀있어서 이를 열어줘야한다.

포트 포워딩을 해야하는데 우리집 공유기는 외부포트포워딩이 없고 대신 DMZ를 사용해야 해서 DMZ로 모든 포트를 열어줬다.

그다음 nc로 10000~10100포트로 대기를 했는데 100개의포트가 랜덤하게 배정되다보니 하나 열고 기다리니까 너무 오래걸려서 10070~10080 열고 새로고침 열심히 눌러주니 연결이 됬고
금방 키값이 넘어왔다.

성공!


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

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

JeonYoungSin

메모 기록용 공간

,

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

메모 기록용 공간

,

webhacking.kr 28번 문제다.

점수는 500 point.

흠.. index.php 파일이 힌트란다. 일단 들어가보자.

들어가보니 뭐가 없다. 읽으라매...

흠.. 다시돌아와서 업로드하는 기능이 있길래 아무파일이나 업로드해봤다.

내용은 따로 안보이는데 힌트로 .htaccess 파일을 알려준다. 

들어가봤는데 접근 권한이 없다. 흠...

업로드 기능이 있었으니 한번 저파일을 만들어서 올려봤다.

안올라간다. 여기서 엄청 삽질을 했다. 저 파일이 힌트래서 검색해보니 .htaccess파일에 php 실행권한을 제거할 수 있어 index.php파일의 소스를 볼 수 있을것 같았다.

근데 그럴려면 저 파일을 들어가던 업로드를 하던 뭔가 조작을 해야할 것 같았는데 힌트라고 줘놓고 아무리 뭘 해봐도 되지가 않는다.

하다하다 너무 열받아서 그냥 풀이검색을 해봤다. 근데 풀이보면 다른사람들은 파일자체가 업로드가 가능하다 ㅡㅡ

그래서 내가 문젠가 하고 체념하고 있는데 알고보니 이번에 사이트 공사하면서 보안상 이유로 아예 업로드를 막아버린 것 같다. 아 그럼 문제를 빼던가 사이트에 공지좀 해주셨으면 좋았을걸... 안되는 문제를 가지고 뭐한거여....내아까운시간 ㅜㅜㅜㅜ

하.. 아무튼 이 문제는 .htaccess파일에 php_flag engine off 라는 내용을 넣어 업로드 시키면 되는 문제였던 것 같다.

500점짜리라 먹고싶었는데 아쉽당...ㅠ



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

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

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 27번 문제다.

점수는 150 point.

sql injection 문제인 것 같다. 

코드보면 id는 guest로 고정되어있다. no값으로 인해 쿼리를 조작하면 될 것 같다. 일단 1을 넣어봤다.

guest라고 나온걸 보니 guest의 no값이 1인가 보다.

그렇다면 admin의 no값이 뭔지가 중요할 것 같다.

일단 2를 넣어봤다.

에러가 뜬다. id랑 no에 조건이 서로 달라 쿼리가 반환되지 않은 것 같다.

그렇다면 2) or no=2#과 같이 쿼리를 넣어주면 무조건 or뒤의 조건에 해당하는 값만 나올 것이다.

소스코드 상에서 필터링하는 것들을 우회해 다음과 같이 작성해 봤다.

2)%20or%20no%20like%202%20--%20x

2값이 admin no였나보다. 바로 나왔네.


성공!


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

webhacking.kr 29번  (0) 2018.01.12
webhacking.kr 28번  (0) 2018.01.12
webhacking.kr 26번  (0) 2018.01.11
webhacking.kr 25번  (0) 2018.01.11
webhacking.kr 24번  (0) 2018.01.11
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 26번 문제다.

점수는 100point.

들어가보니 깜깜하고 소스확인을 하면 될 것 같다.

100점짜리가 간단하다. 처음에 admin필터링을 우회한 후 urldecode된 값이 admin이면 성공이다. 그렇다면 처음에 admin을 urlincoding해서 보내주면 첫번째 필터링에서 우회하고 그다음 디코딩 되므로 자연스럽게 성공할 것이다.

admin을 urlencoding 해서 보내봤다.

흠.. 왜실패하지.. 아 생각해보니 php는 값을 보내고 받을때 인코딩 디코딩을 한번씩 자체적으로 했었었다.

그러면 인코딩이 한번된 값을 보내면 자동으로 한번 디코딩을 해서 첫번째 필터링에서 걸려버린 것 같다.

인코딩을 한번더 해서 보내봤다.

디코딩이 자동으로 한번 되어도 아직 한번 인코딩된상태라 필터링을 우회한다. 그다음 다시 코드상으로 디코딩을하여 정상적으로 admin문자가 된다. 


성공!


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

webhacking.kr 28번  (0) 2018.01.12
webhacking.kr 27번  (0) 2018.01.12
webhacking.kr 25번  (0) 2018.01.11
webhacking.kr 24번  (0) 2018.01.11
webhacking.kr 23번  (0) 2018.01.11
블로그 이미지

JeonYoungSin

메모 기록용 공간

,