728x90

 

ereg로 admin을 필터링하고 있다. 그러나 ereg는 대소문자를 구분한다. 그래서 요즘은 preg_match를 쓰게 되어있다. 하여튼 그래서 문제를 풀자면 php는 대소문자를 구분하지 않는다. 그러니 그냥 ADMIN으로 써버리면 된다. ?id=ADMIN으로 써보자. 물론 aDmin이런식으로 써도 상관은 없다.

 

 

역시 풀렸다. 누구나 알만한 ereg의 취약점을 이용한 간단한 문제였다. 

728x90

 

아.... pw까지 일치해야 풀린다.ㅜㅜ 또 blind sql injection이다. 번호는 기억안나지만 이름은 확실히 기억나는 orc문제와 거의 똑같다. 여기서는 그대신 or이 필터링된다. 아 그래서 앞선 문제들에서 그런식으로 ||를 강조했었구나..... 역시 문제 구성이 알찬 것 같다. 일단 풀어보자. orc문제처럼 길이를 일단 대충 알아보자.

 

 

일단 역시 pw의 길이는 10보다 작았다. 5보다 작은지 알아보자.

 

 

5보다는 크다. 그럼 또 중간인 7보다 작은지 알아보자.

 

 

 

 

아........ 아까랑 똑같이 pw의 길이가 8이다. 미리 넣어볼걸 그랬다ㅜㅜ 일단 길이를 알았으니 또 코딩을 해보자. 그런데 생각해보니 굳이 새로 할 필요가 없다. 그냥 아까 orc의 코드에서 or를 ||로 바꾸어주고 and를 %26%26으로 바꾸어만 주면 된다. and를 &&라고 안쓰고 저렇게 쓴 이유는  그냥 쓰면 url schema라고 인식하기 때문이다. 그렇게 바꾸고 돌려보자.

 

 

저렇게 나온다. 그럼 ?pw=6c864dec라고 쓰자.

 

 

역시 풀렸다. 이것도 기본적인 blind sql injection문제에서 살짝 늘어난 꼴이였다.

 

728x90

 

이 문제의 소스 코드를 보면 아까전에 푼 5번 문제처럼 풀면 된다. 여기서는 공백말고 or을 필터링한다. 그럼 걍 아까 푼 페이로드 그대로 넣어주면 될것같다.

 

 

음....... 아마도 5번 문제를 다르게 푼 사람들에게는 다르게 느껴졌을수도 있지만 나한테는 그냥 똑같이 넣으면 되서 별로 어렵지 않았다. 

728x90

 

소스 코드를 보면 이 문제도 그냥 단순하게 id를 admin으로 만들면된다. 그러나 공백을 필터링하고 있어서 아까까지 쓰던 or를 쓸려면 살짝 바꿔줘야된다. %09를 %20대신 써도 되고 그냥 or를 쓰지말고 ||로 쓰면 된다. 난 주로 이러면 ||를 쓰니깐 그걸로 가보자.

 

 

그냥 풀려버렸다. %20대신 쓸수있는 것들을 아는지 물어보는 문제같았다. 물론 앞선 방법 말고도 캐리지 리턴(%0b)같은것들을 써도 상관없다. 그것들도 나중에 포스팅 해야겠다. 

728x90

 

이 문제는  blind sql injection문제이다. 이부분에 대해서는 나중에 따로 정리할것이다. 일단 이 문제를 풀어보자. 일단 비밀번호의 길이를 알아내야된다. 그것까지 코딩하려고 했는데 그냥 귀찮아서 대충 추측해보았다.

 

 

비밀번호의 길이가 10이하라고 넣으니 참이 나왔다. 그럼 5이하라고 넣어보자.

 

 

그랬더니 거짓이 나왔다. 이제 중간인 7로 해보자.

 

 

거짓이 나왔다. 그럼 이제 8부터 넣어보자.

 

 

비밀번호의 길이는 8이였다. 운좋게 길이가 얼마 안되서 금방 찾았다. 길이를 아는것만으로도 시간을 많이 단축시킬수있다. 이제 코딩을 해보자. 나는 파이썬으로 보통 코딩을 한다.

 

 

결과값이 28초 정도만에 나왔다. 이제 저걸 그냥 넣으면 된다. ?pw=295d5844라고 쳐보자.

 

 

문제가 풀렸다. 다른 blind sql injection에 비해서는 쉬운 문제였던것 같다.

 

 

728x90

 

이제는 goblin이다. 이 문제는 앞선 두 문제와 달리 쿼터들도 필터링하고 있다. 일단 no를 guest가 아니도록 맞춰줘야된다. 저 소스 코드만 보고는 guest의 no값을 모르니 걍 넣어보는게 좋을것같다.

 

no에 0부터 넣어보는데 바로 1에서 잡혔다. 그럼 1말고 다른값들을 넣으면 될것같다. 걍 0을 넣자. 그리고 이제 id를 admin으로 맞춰줘야되겠다. 일단 쿼터들을 필터링하고 있으니 걍 admin을 16진수값으로 변환하여 넣어주자. 물론 그냥 넣으면 숫자취급하니깐 0x를 붙여주긴 해야된다.

 

 

파이썬을 이용하여 간단하게 변환해주었다. 파이썬을 알기전에는 c로 몇줄 더 쳤어야됬는데 편해졌다. 일단 저 값을 이용하여 풀면 될것같다. 대충 페이로드를 짜보면 ?no=0 or id=0x61646d696e로 하면 풀릴것같다.

 

 

이렇게 풀리게된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

 

이제 2번 문제로 왔다. 소스 코드를 보는데 아까 1번문제랑 거의 같았다. 다른건 id가 admin으로 와야된다는 것이다. 그래서 그냥 id를 admin으로 맞춰주고 뒤에 모든 구문을 주석처리해보자.

 

 

별다른 문제없이 풀렸다. 참고로 페이로드는 ?id=admin'%23이였다.

728x90

이곳의 문제는 소스코드를 그냥 화면에 표시해놓는다. 일단 소스코드를 살펴보면 일단 몇가지 것들을 막는것같다. 그런데 첫번째 문제라서 그렇게 많이 막는것은 아니라서 일단 간단하게 or로 풀면될 것 같다.

 

일단 기본적으로 php?id=a'or'1=1'%23으로 날려보자. 여기서 %23은 #을 의미하는데 여기서는 url에 치는것이므로 #을 url encoding해 준 값을 넣어주는것이다.

 

 

바로 풀렸다. 진짜 아주 기본적인 sql injection이였다.

728x90

 

문제를 들어가면 또 이렇게 아이디와 비밀번호를 입력할수있는 창만 주어져있다. 일단 들어와보니 저렇게 뭔가를 쳐놨다. 글자수보니 비밀번호도 guest로 했을 것 같다. 일단 Login을 눌려보자.

 

 

들어가보니 admin으로 로그인하면 풀리는 문제라고 친절하게 써줬다.

 

 

그리고 이 문제를 들어가기전에 힌트를 보면 저렇게 padding oracle 취약점을 아냐고 물어보고있다. 내가 앞에 문제들을 건너뛰고 이 문제를 푸는 이유기도 한 padding oracle 취약점은 이 블로그의 관련글에 설명해두었다.

 

 

일단 쿠키값을 보면 L0g1n이라는 이름으로 되어있고 값이 나와있다.

 

 

쿠키값이 무슨 역할을 하는지 알아보기 위해서 아무값이나 넣고 새로고침하니 iv가 유효하지 않다고 뜬다. 일단 그러면 guest를 암호화하려면 패딩은 무조건 했을것이다. 그리고 iv를 유추해야될것이다. 이래서 padding oracle attack을 쓰라고 한것같다. 저것들을 이용해서 코드를 짜보자. 일단 iv를 유추하고 그다음 xor연산을 이용하여 키를 만들면 될것이다.

 

 

10분정도 지나니 키가 나왔다. 아직 안익숙해서 그런지 굉장히 어려운 문제였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

[wargame.kr] 13번 tmitter 풀이!!!  (0) 2017.12.27
[wargame.kr] 12번 type confusion 풀이!!!  (0) 2017.12.27
[wargame.kr] 11번 strcmp 풀이!!!  (0) 2017.12.27
728x90

 

이 문제에 대한 힌트이다. 32글자까지만 들어갈수있다. 이걸 이용해서 풀수있을것 같다.

 

이번 문제는 첫화면을 조금 신경써서 만든것 같다. 일단 admin이라는 id가 필요하다고 했으니 만들러 가보자. Sign Up을 클릭해보자.

 

 

와 이것도 예쁘게 꾸며놨다. 일단 소스를 보자.

 

 

소스를 보면 id와 pw에 길이제한이 걸려있다. 길이제한을 대충 늘린다음에 admin을 치고 띄워쓰기로 33번째에 a를 쳐서 admin으로 가입하는게 가장 좋을것같다. 그렇게 해주고 Sign in을 눌려보자.

 

 

왼쪽 상단에 이렇게 ID와 PW를 입력할수있는 창이 생겼다. 아까 가입한걸로 로그인 해보자.

 

 

이렇게 flag가 떴다. 이번것은 trim함수에 관한 취약점인것 같다.

 

 

 

+ Recent posts