[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보다 커야한다는게 이상하게 느껴졌다...
[LOS] bugbear
2021. 7. 20. 17:03
Study/Web Hacking
bugbear 입장! bugbear도 똑같이 admin의 password를 알아내야 하는 문제다. 이번 문제는 no에서 싱글쿼터와 함수명 뿐만 아니라 or, and, 공백, like까지 필터링하고 있다. or와 and는 ||와 &&를 대체로 쓰면되고, 공백은 %0a를 사용하여 우회할 수 있다. like같은 경우 등호 문자를 대체하여 쓴 것이었기 때문에 등호 문자 필터링을 우회할 수 있는 다른 방법을 사용하면 된다. 등호문자 필터링 우회 방법은 아래와 같다. ① LIKE 연산자 - id like "admin" ② IN 연산자 - id in ("admin") ③ instr(string $str, string $substr) - instr(id, "admin") ④ 부등호 () - length(pw)..
[natas] Level 21 -> Level 22
2021. 7. 20. 16:13
Study/Web Hacking
: level 21 → level 22 http://natas22.natas.labs.overthewire.org natas22 화면이다. View sourcecode 링크 외에는 아무것도 없다. 소스코드를 확인해보자. natas22 View sourcecode {"mode":"full","isActive":false} 이번 코드에는 2가지의 if문이 존재한다. 두 if문은 모두 $_GET['revelio']의 존재유무를 확인하고 있다. 차이점은 첫 번째 if문에서는 $_SESSION['admin']을 검증하고 있다는 거다. $_SESSION['admin']=1이 아니라면 새로운 페이지로 redirection한다. 두 번째 if문만 보면 revelio를 get방식으로 전달만하면 natas23의 passw..
[LOS] darkknight
2021. 7. 17. 14:21
Study/Web Hacking
darkknight 입장! 위 사진은 darkknight 시작화면이다. 아래 php 소스코드에서 해당 문제를 해결하기 위한 조건을 찾아봤다. query로 얻어온 pw와 입력한 pw가 같아야 문제를 해결할 수 있다. 그런데 query를 잘 보면 id='admin'과 pw가 and로 묶여있는 것을 알 수 있다. 즉 query에서 얻어온 pw는 admin의 pw다. GET방법으로 전달하는 pw가 admin의 pw와 같아야 하므로 우리는 admin의 pw를 알아내야 한다. 먼저 pw의 길이를 알아내야 한다. 아래 소스코드를 실행하면 pw의 길이를 구할 수 있다. (no에서 싱글쿼터와 =을 필터링하고 있기 때문에 대체로 더블쿼터와 like를 사용) import requests url = "https://los.r..
[natas] Level 20 -> Level 21
2021. 7. 17. 13:45
Study/Web Hacking
: level 20 → level 21 http://natas21.natas.labs.overthewire.org 위 사진은 natas21의 메인페이지다. 화면에 또다른 사이트로 가는 링크가 하나 보인다. 링크로 이동하기 전에 소스코드를 먼저 살펴보자. natas21 Note: this website is colocated with http://natas21-experimenter.natas.labs.overthewire.org View sourcecode {"mode":"full","isActive":false} natas21의 소스코드는 이전 level과는 달리 간략해보인다. 중간에 있는 print_credentials함수 하나만 실행되는 듯 하다. 해당 함수는 $_SESSION['admin']의 값..
[LOS] golem
2021. 7. 11. 08:08
Study/Web Hacking
golem 입장! 이번 문제를 해결하기 위해서는 admin의 pw를 알아내야 한다. 소스코드에 주어진 query는 id만을 가져오게 되어있다. 대신 Hello admin이라는 문자열을 통해 쿼리의 참 거짓을 알아낼 수 있다. 즉 Blind SQL Injection으로 해결할 수 있다. 먼저 password의 길이를 알아내야 한다. password의 길이는 8이다. 이제 admin의 pw를 알아내기 위한 자동화 프로그램이 필요하다. 자동화 프로그램 소스코드는 아래와 같다. import requests url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" cookies={'PHPSESSID':'tt2tomujp7112o1..
[natas] Level 19 -> Level 20
2021. 7. 11. 05:54
Study/Web Hacking
: level 19 → level 20 http://natas20.natas.labs.overthewire.org natas20의 화면이다. natas21의 password를 알아내려면 admin으로 로그인해야 한다. 소스코드를 살펴보자. natas20
[LOS] skeleton
2021. 6. 27. 21:13
Study/Web Hacking
skeleton 입장! 이번 문제는 뒤에 주석처리만 잘해주면 되는 문제다. query 마지막에 and 1=0 때문에 해당 쿼리는 항상 거짓이 된다. 따라서 pw 마지막에 주석을 달아서 and 1=0 부분을 무효화 해야 한다. payload는 다음과 같이 작성할 수 있다. ?pw=' or id='admin'# → ?pw=%27%20or%20id=%27admin%27%23 skeleton 해결!