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


webhacking.kr 15번 문제다.

이 문제는 처음에 문제에 들어가려고하면 바로 저 창이뜨고 메인화면으로 돌아온다.

burp suit로 한페이지씩 넘겨봤다. 다음과 같은 페이지가 나온다.

그대로 정답으로 입력해주면 끝!

50점짜리 문제라 그냥 쉬어가라는 뜻 인 것 같다. webhakcing.kr은 wargame.kr 문제에 비해 웹 문제

가 많은 만큼 가벼운 문제들도 많이 포함되어 있는 것 같다. 


'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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 14번 문제다.

점수는 100point. 간단할 것 같다.

들어가보니 입력란이 있고 에러가 뜬다.

소스부터 확인해보자.

너무 쉬운코드다. ul값만 구하면 될 것 같다. url에 .kr위치를 세기도 귀찮아서 그냥 ul값을 다음과 같이 구해버렸다.

그대로 입력란에 넣어주면 비밀번호가 나온다.

 

성공!


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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

소스를 보면 버퍼,환경변수,매개변수,스택 초기화 같은 로직은 없는데 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로 구한 주소값으로 익스했더니 에러나서 코어파일 디버깅해서 정확한 주소 구한뒤 익스했다.

 

 

 

 

 

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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

소스를 보면 이전단계에서 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로 찾았다. 



위의 영역에 쉘코드가 올라와있었고 대충 중간값줘서 익스했다.




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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 13번

2018. 1. 9. 17:04

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


webhacking.kr 12번 문제다.

점수는 250point.

스크립트 부분에 아스키코드값으로 상당히 보기싫게 적힌 코드가 있다. 크롬 개발자모드에서 다음과 같이 수정해 줘보자.

코드를 보니 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)

이면 비밀번호값이 나오고 이때 처음에 더했던 =가 공백으로 필터링 되기 때문에 결국 비밀번호는

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)

라고 할 수 있다. 그럼 개발자 모드에서 먼저 enco_함수 먼저 선언해주고 저비밀번호 코드를 입력해주면 간단하게 비밀번호가 나오게 된다.

성공!


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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 11번 문제다.

점수는 300point.

흠.. preg_match를 활용한 정규식을 아는가 하는 문제인것같다. get방식으로 받은 val값이 $pat 정규식에 해당하면 성공할 것 같다.


그럼 정규식패턴을 분석하면 될 것 같다.

다행히도 예전에 정규식에대해 살짝 봐뒀던게 도움이 됬다.

[1-3]은 1,2,3중에 하나만 잇으면 되니까 1을 주고

[a-f]도 마찬가지로 a~f범위중 아무문자니까 a

{5}는 바로앞패턴을 5개 반복 이니까 a를 5번 반복해 aaaaa로 만들고

_는 별 의미없으니 그대로

.은 개행문자를 제외한 모든 문자이고 *은 아예없거나 2개이상인걸 뜻하니
hh라는 문자를 주고

IP는 그대로

.*부분은 다시 hh 

그리고 \t는 탭이니까 

결국 전체적으로 완성되는 코드는

1aaaaa_hh125.180.217.107hh탭p탭ass 이다.

이 중에서 공백 문자인 탭부분은 url 인코딩이 필요하니 처리 후 값을 넘겨줬다.


성공! 정규식을 어느정도 알고있어서 쉬어가는 느낌의 문제였다.


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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 10번 문제다.

점수는 250point. 

흠..뭐지..? O라고 써있는데를 눌러보면 조금씩 오른쪽으로 움직인다.

소스부터 확인해보자.

흠.. 상당히 간단한 문제다.

<a id=hackme style="position:relative;left:0;top:0" onclick="this.style.posLeft+=1;if(this.style.posLeft==800)this.href='?go='+this.style.posLeft" onmouseover=this.innerHTML='yOu' onmouseout=this.innerHTML='O'>O</a><br>

이부분이 핵심인 것 같다. 여기서 한번버튼을 누르면 1씩 증가하고 800이 되면 인자값으로 go=800 형식으로 넘겨 뭔가가 나올 것 같다.

800번을 누를수는 없으니 burp suit로 소스코드를<a id=hackme style="position:relative;left:0;top:0" onclick="this.style.posLeft+=800;if(this.style.posLeft==800)this.href='?go='+this.style.posLeft" onmouseover=this.innerHTML='yOu' onmouseout=this.innerHTML='O'>O</a><br>

형식으로 한번누르면 800칸 넘어가도록 만들었다.

한번 클릭해보자.

????성공했다.

100점짜리보다 쉬운 느낌..? 무슨생각으로 출제한 문제인지는 잘 모르겠다.


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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

webhacking.kr 9번

2018. 1. 9. 15:54

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


webhacking.kr 8번 문제다.

문제만 풀어놓고 포스팅을 너무 미뤄놔서 아무래도 이제 조금씩 포스팅 해야 할 것 같다.

점수는 350point.

들어가보니 별게 없다. 소스부터 확인하자.

index.phps로 들어가봐야 할 것 같다.

흠.. 보아하니 패킷의 USER-AGENT 값을 통해 쿼리를 조작해야 할 것 같다. 

천천히 분석해보니 중요한 구문이 

if(!$ck)
{
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
echo("<br><br>done!  ($count_ck[0]/70)");
}

이 부분인 것 같다.  $ck값을 null값으로 가질 수 있도록 하면 내가 원하는 값을 이 구문을 통해 디비에

삽입 할 수 있을 것 같다. 그렇다면 패킷 조작을 통해 USER-AGENT에 값을 주면 $agent에 들어가므로

이부분을 활용해보았다.

그래서 이런식으로 '내가준값','내가준값',admin),('내가준값 와 같은 형태로 값을 넣어주면 values( '내

가준값','내가준값',admin),('내가준값','$ip,'guest') 형태로 들어갈 것이라고 생각해 값을 넣어봤다.

그러면 admin사용자가 삽입되므로 admin에 해당하는 user-agent값을 필터링을 피할 수 있는 값으로

지정해 주면 ck[0]이 admin이 되어 자연스럽게 정답이 나올 것 같다.

USER-AGENT 값에 hiyo','123','admin'),('asdfg 입력해 패킷을 넘겨봤다.


정상적으로 삽입이 된 것 같다.

그렇다면 이제 User-Agent 값을 hiyo로 넣어주면될 것 같다.

성공! 웹쪽은 밀린 포스팅이 너무 많다 ㅠㅠ 당분간 문제푸는거좀 줄이고 포스팅도 좀 같이 하면서 해야할듯... 


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

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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,