본문 바로가기

전체 글157

webhacking.kr 22번 22번 문제를 보면 아래와 같은 화면을 볼 수 있다. 힌트를 보면 id가 admin이어야 패스워드를 출력하기 때문에username에 admin을 입력한 결과, Wrong!을 출력하는 것을 볼 수 있다.admin이라는 문자열을 직접 입력할 수 없는 것으로 보이므로 다른 방법으로 id에 admin을 넣어야 한다. 먼저 동작과정을 보기 위해 test로 로그인을 하였다. 그 결과, hi! test라는 메시지와 함께user key라는 이름으로 32바이트의 데이터가 출력된 것을 볼 수 있다.password로 입력한 1234의 크기와 다르며, 32바이트인 것을 보면, md5가 적용된 것이라고 추측할 수 있다. 따라서 online md5 decrypter를 이용하면 위와 같이 1234zombie라는 문자열을 볼 수 있.. 2019. 1. 29.
webhacking.kr 5번 5번 문제를 열면 아래와 같이 Login과 Join 버튼을 볼 수 있다. 그런데 Join 버튼을 누르면 Access_Denied라는 메시지가 나온다. Login을 누를 경우,http://webhacking.kr/challenge/web/web-05/mem/login.php로 이동되는 것을 볼 수 있는데, 기존 index.php에서 mem이라는 디렉토리가 경로에 추가된 것을 볼 수 있다. 이에 mem/index.php에 접근해보니 아래와 같이 /hint를 통해 join.php에 접근할 수 있게 되었다. join.php의 코드를 보면 아래와 같이 난독화가 적용되어 있다. 그리 복잡하지 않아서 손으로도 풀 수는 있지만, 크롬 개발자 도구의 콘솔을 이용하여 몇몇 문자열을 복호화해 보니 oldzombie라는 문자.. 2019. 1. 29.
webhacking.kr 46번 [SQL Injection] 46번 문제를 보면 아래와 같은 화면을 볼 수 있다. 여기서 form의 method가 get인 것과 action이 index.php라는 것을 알 수 있다. index.phps 코드는 아래와 같다. 코드를 보면 lv의 입력을 이용하여 id가 admin으로 입력되게 해야한다는 것을 알 수 있다. 먼저 1을 입력해보면,?lv=1 과 같이 전달되는 것을 알 수 있다. 따라서 ?lv=[any_number] or id=”admin” 과 같이 입력하면 될 듯하다. 단, 필터링에 유의하여 입력해야한다. 따라서 공백은 %0a로 입력하고 admin을 문자열로 전달하기 위해 char()를 이용하려고 한다. 아래 값을 참고하여 입력한다. 실제로 입력할 값은?lv=0%0aor%0aid=char(97.. 2019. 1. 29.
webhacking.kr 21번 [Blind SQL Injection] 21번 문제를 보면 다음과 같은 Blind SQL Injection 페이지를 볼 수 있다. 숫자를 입력했을 때 True가 나오는 것은 1, 2 정도인 것을 알 수 있다. 1, 2 이외의 숫자인 3을 넣었을 때는 False가 나온다. 또한 입력한 값은 no에 들어가고, id와 pw라는 column 이름을 알게 된다.따라서 length()를 이용하여 no가 1, 2인 것에 대해 id와 pw의 길이를 각각 구할 수 있다. 또한 substr()과 ascii()를 이용하여 각 바이트에 해당하는 값들을 구할 수 있다. Python을 이용하여 길이과 값을 구하면 아래와 같다. 따라서 blindsqlinjectionkk 로 인증하면 clear할 수 있다. 이 때 사용한 코드는 아.. 2019. 1. 29.
webhacking.kr 10번 10번 문제를 클릭하면 다음과 같이 O와 buy lotto를 볼 수 있다. 코드는 아래와 같다.클릭을 할 때마다 hackme의 posLeft가 1씩 증가 되고 800을 만들어야 한다. 이 때, 임의로?go= 을 이용하여 접근하면 no hack이라는 메시지가 나오기 때문에 실제로 값을 800으로 만들고자 한다. 그런데 Chrome에서는 클릭을 해도 아무 변화가 없기 때문에 safari를 이용했다. 클릭할 때마다 posLeft가 1씩 증가하여 위에서 보이는 것처럼 O의 위치가 이동한다. 따라서 800을 만들기 위해onclick=”this.style.posLeft+=800”;과 같이 1을 800으로 바꾸어 준다. 이렇게 되면 한 번만 클릭해도 800이 되어 clear할 수 있다. 2019. 1. 29.
webhacking.kr 12번 [Javascript] 12번 문제를 보면 javascript challenge라는 것을 볼 수 있다.Script 코드를 보면 WorkTimeFun에 fromCharCode 안의 숫자의 의미를 직접 파악하기는 어렵다. 따라서 개발자 도구의 콘솔을 이용하여 아래 코드를 복사하여 넣으면 된다. 그러면 아래와 같은 코드를 볼 수 있다. 이 때, ck의 값을 확인하여 패스워드인 경우 ck를 출력하는 것을 볼 수 있다.따라서 ck와 비교하는 대상을 다시 콘솔을 통해 실행해 보면 아래와 같은 문자열을 얻을 수 있다. 즉, 조건을 만족한 경우Password is youaregod~~~~~~~!이라는 것을 알 수 있다. 이 값으로 인증하면 clear할 수 있다. 2019. 1. 29.
webhacking.kr 56번 56번 문제를 클릭하면 다음과 같은 화면을 볼 수 있다. 이 때 hi~는 클릭하면 내용을 볼 수 있지만,readme의 경우 access denied가 나온다.따라서 다른 방법을 이용하여 admin의 내용을 봐야할 듯하다. 우선 subject에 있는 hi~와 readme를 입력해보면,hi~의 경우 입력하면 guest가 나오지만readme를 입력한 경우 admin이 나오지는 않는다. 숫자 0을 입력한 경우에는 admin과 guest가 모두 나오는 것을 볼 수 있다. 여기서 알 수 있는 점은admin이 나오는 input을 구해야한다는 것이다. 손으로 하나씩 입력하는 것은 힘드니 python을 이용하여 input을 구했다.먼저 와일드카드인 _를 이용하여 input의 길이를 알아냈다. 그 뒤, 가장 첫 글자부터 .. 2019. 1. 29.
webhacking.kr 52번 [Header Injection] 52번 문제를 클릭하면 다음과 같은 화면을 볼 수 있다.Header Injection 문제이며 클리어 조건은 아래와 같다. 따라서 아래와 같이?id=sand\r\nclear: sand를 입력하면 된다.\r\n은 %0d%0a이고, 공백은 %20이다. 이렇게 입력하면 clear된다. 2019. 1. 29.
webhacking.kr 19번 [NOT WORKING] 19번 문제를 열면 다음과 같이 id를 입력받는 것을 알 수 있다. admin이라는 문자가 value로 지정되어 있어서 submit 버튼을 눌러보면 admin이 아니라는 문자열이 출력된다. admin으로 로그인을 성공하면 되는 문제인 듯 하나,admin이 아닌 다른 문자를 입력하였을 때 아래와 같은 warning이 뜨고 제대로 작동하지 않는 것으로 추정된다. 2019. 1. 29.