mario / mariosuper 아이디 비번이 제공되었고 normaltic3으로 로그인 하는것이 목적이다.
mario'#을 넣어보니 로그인이 되지 않았다. 그렇다면 #, '이 사용불가이거나 로그인 로직이 sql문으로 아이디와 비번을 동시에 검색해서 그 결과값이 있는지 확인하는 방식이 아니란 것이다.
그렇다면 mario'#에 mariosuper을 넣어보도록 하겠다.
로그인이 성공적으로 된다.
즉, '나 #이 추출되거나 사용이 안되는 경우가 아니다.
그렇다면 sql문으로 아이디 혹은 아이디와 비밀번호 동시검색 후 비밀번호가 db의 비밀번호와 맞는지를 확인한다는 것이다.
이번에는 union select 문을 사용해보겠다. 다만 이 경우는 컬럼의 갯수와 어느 컬럼에 id와 password가 존재하는지 알아야 사용 할 수 있다. 만약 컬럼수가 적을경우 때려맞추기가 가능하겠지만 컬럼 수가 많아진다면 매우 힘들어질 것이다.
우선 컬럼 수를 구해보자. order by 문의 경우 컬럼수가 요청한 수보다 적은 경우 에러를 띄우게 된다. 따라서 아이디에 mario' order by 1을 입력하면 로그인이 될 것이다. 물론 비밀번호를 제대로 쓴 경우 말이다.
그러면 이 부분을 반복하여 에러가 나오는 곳을 찾으면 될 것이다.
import requests
url = 'http://ctf.segfaulthub.com:9999/login3/login.php'
for i in range(1,101):
payload = {
'UserId': f"mario' order by {i}#",
'Password': 'mariosuper',
'Submit': 'Login'
}
response = requests.post(url, data=payload)
if 'Warning' in response.text:
print(f"Found: {i}")
break
다음 파이썬 코드를 작성하여 반복해보았더니 3에서 끝났다. 즉, 컬럼 개수는 2개란 거다. 직접 확인결과 3부터는 warning이 뜬다. 그러면 컬럼 개수가 2개이므로 하나는 아이디 하나는 password이므로 50퍼 확률이다.
mario' union select 'mario',''#을 전송해보았다. 그리고 비밀번호에 2을 넣었다. 안된다. 바꿔서 해봤는데도 안됐다.
그 이유를 곰곰히 생각해 보았는데 만약 sql문으로 데이터를 찾고 거기서 배열을 뽑아 password를 어떠한 변수에 저장하여 비교하는 경우면 먼저 나오는 값인 원래의 mario 비밀번호가 사용되기 때문이라 생각했다. 바로 order by 1 asc로 역정렬해주면 로그인이 된다.
그렇다면 이걸 바로 nomarltic3에 적용하겠다.
뭔가 컬럼수가 두개인걸로봐서는 ... 노말틱님이 생각하기에 컬럼 수는 구할 필요가 없었고 그냥 때려맞추기 쉽게 해놓은거같은데.. 그래도 고생한만큼 오래 기억되지 않을까 싶다...
'Nomaltic's Hacking Traning!!' 카테고리의 다른 글
Login Bypass 4 (1) | 2023.04.19 |
---|---|
Login Bypass 3-1 (0) | 2023.04.19 |
Login Bypass 2 (0) | 2023.04.18 |
6. 미스터 브루트 (0) | 2023.04.09 |
5. 미스테이크 (0) | 2023.04.09 |
mario / mariosuper 아이디 비번이 제공되었고 normaltic3으로 로그인 하는것이 목적이다.
mario'#을 넣어보니 로그인이 되지 않았다. 그렇다면 #, '이 사용불가이거나 로그인 로직이 sql문으로 아이디와 비번을 동시에 검색해서 그 결과값이 있는지 확인하는 방식이 아니란 것이다.
그렇다면 mario'#에 mariosuper을 넣어보도록 하겠다.
로그인이 성공적으로 된다.
즉, '나 #이 추출되거나 사용이 안되는 경우가 아니다.
그렇다면 sql문으로 아이디 혹은 아이디와 비밀번호 동시검색 후 비밀번호가 db의 비밀번호와 맞는지를 확인한다는 것이다.
이번에는 union select 문을 사용해보겠다. 다만 이 경우는 컬럼의 갯수와 어느 컬럼에 id와 password가 존재하는지 알아야 사용 할 수 있다. 만약 컬럼수가 적을경우 때려맞추기가 가능하겠지만 컬럼 수가 많아진다면 매우 힘들어질 것이다.
우선 컬럼 수를 구해보자. order by 문의 경우 컬럼수가 요청한 수보다 적은 경우 에러를 띄우게 된다. 따라서 아이디에 mario' order by 1을 입력하면 로그인이 될 것이다. 물론 비밀번호를 제대로 쓴 경우 말이다.
그러면 이 부분을 반복하여 에러가 나오는 곳을 찾으면 될 것이다.
import requests
url = 'http://ctf.segfaulthub.com:9999/login3/login.php'
for i in range(1,101):
payload = {
'UserId': f"mario' order by {i}#",
'Password': 'mariosuper',
'Submit': 'Login'
}
response = requests.post(url, data=payload)
if 'Warning' in response.text:
print(f"Found: {i}")
break
다음 파이썬 코드를 작성하여 반복해보았더니 3에서 끝났다. 즉, 컬럼 개수는 2개란 거다. 직접 확인결과 3부터는 warning이 뜬다. 그러면 컬럼 개수가 2개이므로 하나는 아이디 하나는 password이므로 50퍼 확률이다.
mario' union select 'mario',''#을 전송해보았다. 그리고 비밀번호에 2을 넣었다. 안된다. 바꿔서 해봤는데도 안됐다.
그 이유를 곰곰히 생각해 보았는데 만약 sql문으로 데이터를 찾고 거기서 배열을 뽑아 password를 어떠한 변수에 저장하여 비교하는 경우면 먼저 나오는 값인 원래의 mario 비밀번호가 사용되기 때문이라 생각했다. 바로 order by 1 asc로 역정렬해주면 로그인이 된다.
그렇다면 이걸 바로 nomarltic3에 적용하겠다.
뭔가 컬럼수가 두개인걸로봐서는 ... 노말틱님이 생각하기에 컬럼 수는 구할 필요가 없었고 그냥 때려맞추기 쉽게 해놓은거같은데.. 그래도 고생한만큼 오래 기억되지 않을까 싶다...
'Nomaltic's Hacking Traning!!' 카테고리의 다른 글
Login Bypass 4 (1) | 2023.04.19 |
---|---|
Login Bypass 3-1 (0) | 2023.04.19 |
Login Bypass 2 (0) | 2023.04.18 |
6. 미스터 브루트 (0) | 2023.04.09 |
5. 미스테이크 (0) | 2023.04.09 |