dragon

2022. 4. 13. 16:17Site/LOS

이번시간에는 dragon을 풀어보겠습니다

공부하는 입장이니 틀린것이 있더라도 양해부탁드리겠습니다


소스코드를 확인해 보겠습니다

preg_match 함수로 prob _ . ( ) 를 필터링

$query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'"

$result['id'] 가 있다면 Hello $result['id'] 값을 출력

$result['id'] 가 admin과 일치한다면 클리어

 

그런데 쿼리부분을 보니깐 id='guest'# 에 주석처리가 되어있어서 and pw='{$_GET[pw]}'" 를 다 무시해버리기 때문에 pw에 어떠한 값을 넣어주어도 Hello guest 밖에 안나올 것 같습니다.

접근방법

pw에 값을 인식하게 시켜주기 위해선 줄바꿈문자를 사용하면 클리어 될 것 같습니다.

#나 -- 은 한줄로 밖에 주석처리를 안해줍니다.

따라서 줄만 바꾼다면 #가 있는 해당 라인만 주석처리가 될 것이고 줄이 바뀐 부분에 새로운 쿼리문을 작성해주면 될 것 같습니다.  [\n -> %0a]

"select id from prob_dragon where id='guest'# and pw='%0a or id='admin

이렇게 되면 # and pw=' 부분만 주석처리되고 줄바꿈[%0a] 부터 새로운 쿼리문을 삽입이 가능해집니다.

 

?pw='%0a or id='admin 형태로 넣어주겠습니다.

 

해당 쿼리문을 넣어주니 그대로 Hello guest 가 출력되었습니다.

아마 or 앞에 까지 false값을 만들어주지 않아서 그런것 같습니다.

앞부분을 false 로 만들어 주기 위하여 0=1을 넣어주겠습니다 -> ?pw='%0a and 0=1 or id='admin

"select id from prob_dragon where id='guest'# and pw='%0a and 0=1 or id='admin[빨간색:false값 파란색:줄바꿈문자 초록색:true값

위 쿼리문을 넣어주니 클리어 되었습니다

'Site > LOS' 카테고리의 다른 글

xavis  (0) 2022.04.13
nightmare  (0) 2022.04.06
zombie assassin  (0) 2022.04.06
succubus  (0) 2022.04.05
assassin  (0) 2022.04.05