2018. 1. 12. 23:47

## prob18(web, 100pt)


[Main]

 18번 문제는 아주 간단한 SQLi 문제였습니다. 우선 문제를 보면 아래와 같은 페이지를 볼 수 있습니다.


[그림 1] 문제 페이지


 일단 index.phps라는 이 문제 페이지의 php 소스로 가는 링크를 클릭하면 아래 [그림 2]와 같이 php 소스 코드를 볼 수 있습니다.


[그림 2] index.phps


 소스 코드에서는 eregi()함수를 이용해 간단한 필터링을 합니다. 그리고 "select id from challenge18_table where id='guest' and no=$_GET[no]"라는 쿼리문을 실행시키는데 where 절안에 no파라미터를 GET방식으로 받아서 포함시킵니다. 일단 no 컬럼은 숫자이므로 아무 숫자나 0, 1, 2, 3...을 집어넣어 봤습니다. 1을 넣으니 "hi guest"가 떳고, 나머지는 아무것도 안떴습니다. 여기서 guest 계정은 no 컬럼이 1이라는 것을 알 수 있습니다.


 여기에 sql injection이 가능하고 따라서 "~ where id='guest' and no=-1 or no=2"로 쿼리를 인젝션시키면 (id='guest' and no=-1)이 false가 되고 or로 묶인 no=2가 true가 되면서 결과 값이 나오게 됩니다. 여기서 no=2는 admin 계정입니다. no=2가 admin이라는 것은 0부터 차례대로 입력해보았습니다. 그리고 공백 문자가 필터링되고 있으므로 공백문자를 공백문자 우회할 수 있는 방법들(%0a, %09, %0d, /**/, +)중 하나인 %0a로 대체하여 쿼리(-1%0aor%0ano=2)를 날리면 아래 [그림 3]과 같이 문제가 풀립니다.


[그림 3] Congratulation!



 참고로 "id='guest' and no=1 or no=2"로 인젝션시키면 guest가 결과로 나오게 되므로 id='guest'를 무력화시켜줘야 합니다. 그리고 id='admin'을 인젝션 쿼리에 넣어 바로 실행시키려고 했지만 싱글 쿼터가 url encode되어 쿼리문을 실행시킬 수 없었습니다


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

[webhacking.kr] prob20(200pt)  (0) 2018.01.19
[webhacking.kr] prob8(350pt)  (0) 2018.01.18
[webhacking.kr] prob21(250pt)  (0) 2018.01.13
[webhacking.kr] prob17(100pt)  (0) 2018.01.12
[webhacking.kr] prob10(250pt)  (0) 2018.01.12
Posted by holinder4S
2018. 1. 12. 20:13

## prob17(web, 100pt)


[Main]

 17번 문제도 개발자 도구만 쓰면되는 아주 간단한 문제입니다. 접속하면 아래 [그림 1]과 같은 페이지와 소스코드를 뿌려줍니다.


[그림 1] 문제 페이지 및 소스 코드


 우선 개발자도구로 소스코드(html, javascript)를 보면 pw라는 이름의 input 박스에 값을 입력 받고, check 버튼을 누르면 sub()함수가 실행됩니다. sub()함수는 unlock 변수에 숫자계산을 한 값을 집어넣고 입력한 값과 unlock값을 비교하고 10으로 나누어서 password 는 unlock/10이라는 alert박스를 띄워주고 아니면 wrong을 띄워줍니다.


 푸는 방법은 여러가지가 있는데 console에서 위 코드를 그대로치고 unlock/10값을 확인하는 방법, sources 탭에서 브레이크포인트를 걸고 값 확인하는 방법, else문 안에서 alert("Wrong");을 alert("Password is "+unlock/10);으로 바꿔서 확인하는 방법 등등이 있습니다.


그런 방법으로 풀면 아래 [그림 2]처럼 답이 나옵니다.


[그림 2] Congratulation!


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

[webhacking.kr] prob20(200pt)  (0) 2018.01.19
[webhacking.kr] prob8(350pt)  (0) 2018.01.18
[webhacking.kr] prob21(250pt)  (0) 2018.01.13
[webhacking.kr] prob18(100pt)  (0) 2018.01.12
[webhacking.kr] prob10(250pt)  (0) 2018.01.12
Posted by holinder4S
2018. 1. 12. 19:58

## prob10(web, 250pt)


[Main]

 10번 문제를 개발자 도구를 통해 보면 아래와 같은 페이지와 소스코드가 보이게 됩니다.


[그림 1] prob10 문제 페이지 & 소스코드


 위 [그림 1]에서 빨간 네모 박스 친 부분을 잘 보면 "hackme"라는 id를 가지는 a 태그를 사용하면서 마우스 오버가 되면 "y0u"로 바뀌고, 마우스가 out되면 "O"를 표시합니다. 그리고 onclink 속성으로 마우스로 클릭하면 위치를 오른쪽으로 1칸씩 옮깁니다. 그리고 800번째 위치가 되면 "?go="+this.style.posLeft로 이동하는 링크를 만들고, 이동하면 끝이 납니다. 이 때 당연히 this.style.posLeft는 800이 될 것이고 최종적으로 "http://webhacking.kr/challenge/codeing/code1.html?go=800"이라는 링크를 만들어낼 것이라고 예상할 수 있습니다.


 그래서 그냥 들어갔더니 "no hack"이라는 문자열이 뜨고 아무 반응이 없습니다. 처음에는 뭔가 필터링이 있는지 알고 삽질했는데, 그게 아니었습니다. 그냥 onclick 속성의 코드에서 this.style.posLeft+=1 부분을 this.style.posLeft=800으로 바꾸고 클릭하니까 정상적으로 링크가 만들어졌고, 들어가니까 아래 [그림 2]와 같이 문제를 풀었습니다.


[그림 2] congratulation!

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

[webhacking.kr] prob20(200pt)  (0) 2018.01.19
[webhacking.kr] prob8(350pt)  (0) 2018.01.18
[webhacking.kr] prob21(250pt)  (0) 2018.01.13
[webhacking.kr] prob18(100pt)  (0) 2018.01.12
[webhacking.kr] prob17(100pt)  (0) 2018.01.12
Posted by holinder4S