[LOS] nightmare
2021. 8. 24. 19:30
Study/Web Hacking
nightmare 입장! nightmare에서는 pw파라미터만 사용하고 있다. 이번 query는 id가 admin이 아니어야 한다고 명시하고 있고, pw에 빈 문자열이 들어있다. 문제를 해결하기 위해서는 query의 결과로 id가 존재해야 하기 때문에 query를 참으로 만들기만 하면 된다. 그러기 위해 id부분을 주석처리하고, pw부분에서 1=1과 같은 payload를 삽입해서 query를 참으로 만들려고 했다. 문제는 pw 삽입 부분이 문자열이기 때문에 기존처럼 1=1 #을 사용하긴 어렵다. 여기서 MySQL의 auto type cast를 이용하면 참 쿼리를 만들 수 있다. 문자열과 숫자를 비교하게 되면 문자열을 0으로 변환하여 비교하는 특성이 있기 때문에 pw를 ('')=0 형식으로 변환했다. 그런..
[natas] Level 25 -> Level 26
2021. 8. 22. 03:42
Study/Web Hacking
: level 25 → level 26 http://natas26.natas.labs.overthewire.org natas26은 4가지의 값을 입력받는 폼이 존재한다. 이 값들이 어떻게 쓰이는지 소스코드를 통해 확인했다.
[LOS] zombie assassin
2021. 8. 19. 15:28
Study/Web Hacking
zombie assassin 입장! 이번 단계는 id와 pw 모두 query에 포함된다. 특별히 달라진 점은 addslashes()를 적용시킨 후에 strrev() 함수가 추가된 것이다. strrev함수는 인자를 거꾸로 반대로 반환하는 함수이므로 입력한 payload가 반대로 적용된다. zombie assassin을 clear하려면 result['id']가 존재해야 하므로 query를 참으로 만들기만 하면 된다. 이전 단계처럼 \문자를 사용해서 id의 '를 일반 문자로 변환하고 pw의 '까지 id의 값으로 인식시키는 방법을 사용해봤다. 그러기 위해서 \를 id에 넣으려고 했지만 addslashes() 때문에 \가 \\로 escape되면서 id값의 인식 범위를 변경하지 못했다. addslashes()를 활..
[natas] Level 24 -> Level 25
2021. 8. 9. 22:50
Study/Web Hacking
: level 24 → level 25 http://natas25.natas.labs.overthewire.org natas25 화면이다. 어떤 글귀와 language 선택 박스가 있다. 바로 소스코드를 확인해보자. natas25 language View sourcecode 이번엔 소스코드가 좀 있는 편인데 필요한 부분을 천천히 훑어봤다. 먼저 아래쪽에서 호출되는 setLanguage 함수를 살펴봤다. lang 파라미터를 safeinclude함수의 인자로 전달하고 있다. safeinclude 함수를 살펴보자. 해당 함수의 매개변수를 보니 lang의 값이 filename으로 사용되는 것 같다. 그리고 filename에 ../와 natas_webpass를 필터링하는 것을 확인할 수 있다. 하지만 ../같은 ..
[LOS] succubus
2021. 8. 9. 21:42
Study/Web Hacking
succubus 입장! succubus 화면이다. id와 pw를 query에 삽입하고 있고 prob, _, ., (, ), '를 필터링하고 있다. 이번 문제에서도 '를 이용해서 앞을 막고 뒤에 새로운 쿼리를 작성할 수 없다. 대신에 \문자를 사용해서 query에 이미 작성된 '를 일반 문자 취급할 수 있다. id에 \를 대입한다면 id='\' and pw =''이 되면서 안쪽 내용이 문자열로 취급된다. 이후에 pw에 or 1=1#를 삽입한다면 참 쿼리로 바뀌면서 id를 얻어올 수 있게 된다. 최종적으로 아래와 같이 파라미터를 작성할 수 있다. ?id=\&pw= or 1=1# succubus 해결!
[LOS] assassin
2021. 8. 2. 14:35
Study/Web Hacking
assassin 입장! 이번 문제는 pw 하나만 입력받고 있다. 그리고 필터링도 싱글쿼터 하나다. 싱글쿼터가 필터링되고 있기 때문에 앞의 query를 '로 막고 새로운 query를 작성하는 방법은 사용할 수 없다. 즉 주어진 like문을 활용해서 해결해야 한다. admin의 password를 알아내야 admin id를 select할 수 있는데 like를 적절히 활용하면 모든 password를 알아낼 필요는 없다. ex) like '김%' → 김으로 시작하는 문자열 like '%김%' → 중간에 김이 있는 문자열 like '%김' → 김으로 끝나는 문자열 위 특성을 이용해 password의 앞머리 문자만 알아내면 admin id를 select할 수 있다. - password length 더보기 import..
[natas] Level 23 -> Level 24
2021. 8. 2. 12:35
Study/Web Hacking
: level 23 → level 24 http://natas24.natas.labs.overthewire.org natas24 화면이다. password를 입력하는 form이 있다. 소스코드를 확인해보자. natas24 Password: View sourcecode 이번에도 php 소스코드가 매우 짧다. 이번 level은 strcmp함수를 통해 입력값을 password와 비교해 인증하는 방식이다. 이외에 중요해 보이는 코드는 존재하지 않는 것 같았다. 다음 level로 넘어가기 위해서는 password를 입력해야 하는데 이 password를 알아내는게 문제이니 조금 당황했다. 아무래도 직접 password를 입력하는 것 외에 다른 방법이 있는 것 같은데 중요해 보이는 코드가 strcmp함수밖에 없으니 ..
[LOS] giant
2021. 7. 26. 17:21
Study/Web Hacking
giant 입장! 이번 문제는 id와 pw를 통해 해결하는 문제가 아닌 것 같다. 아래쪽의 if문을 보면 $result[1234]의 값이 존재해야 문제를 해결할 수 있는 것으로 보인다. 현재 query를 보면 where절이 항상 참이기 때문에 1234 column의 값을 가져올 수 있다. 다만, from과 뒤에 prob가 공백 없이 붙어있기 때문에 제대로 동작하지 않는다. 따라서 from뒤에 공백을 추가해서 query를 정상적으로 동작시켜야 한다. 이제 필터링 부분을 살펴보자. from뒤에 공백을 넣을 때 $_GET[shit]을 이용하면 될 것 같다. 현재 $_GET[shit]은 문자열의 길이가 1보다 크면 필터링되고, 공백문자와 \n, \r, \t모두 필터링되고 있다. 공백문자 우회를 위한 문자는 대부..
[natas] Level 22 -> Level 23
2021. 7. 26. 17:03
Study/Web Hacking
: level 22 → level 23 http://natas23.natas.labs.overthewire.org natas23 화면이다. 이번 문제에는 Password 입력칸만 존재한다. 바로 소스코드를 살펴보자. natas23 Password: View sourcecode {"mode":"full","isActive":false} 이번 소스코드에서 눈여겨볼 코드는 $_REQUEST의 값을 검증하는 if문이다. strstr함수는 첫번째 문자열에 두번째 인자가 포함되어 있는지를 확인하고, 옵션에 따라 문자열을 반환하는 함수다. 따라서 $_REQUEST["passwd"]가 iloveyou를 포함하고 있어야하고, 10보다 커야 한다. 여기서 문자열과 정수를 비교하는데 10보다 커야한다는게 이상하게 느껴졌다...