web security academy 12

2026. 3. 3. 19:32ㆍ보안/Web security Academy

Lab: Visible error-based SQL injection

 

This lab contains a SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs a SQL query containing the value of the submitted cookie. The results of the SQL query are not returned.

The database contains a different table called users, with columns called username and password. To solve the lab, find a way to leak the password for the administrator user, then log in to their account.

(이 랩에는 SQL 주입 취약점이 포함되어 있습니다. 애플리케이션은 분석을 위해 추적 쿠키를 사용하며, 제출된 쿠키의 값을 포함하는 SQL 쿼리를 수행합니다. SQL 쿼리의 결과는 반환되지 않습니다.

데이터베이스에는 사용자 이름과 비밀번호라는 열이 있는 사용자라는 다른 테이블이 있습니다. 실험실을 해결하려면 관리자 사용자의 비밀번호를 유출한 다음 계정에 로그인하는 방법을 찾아야 합니다.)

 

현 실험실은 error를 발생시켜 error 내용에서 저희가 원하는 정보를 얻어야하는 방식입니다

 

1.실험실을 열고 proxy 탭에서 intruder를 진행한 후 send to repeater 진행

 

2. 현재 실험실에서 쓰는 데이터베이스가 어떤 종류인지를 확인

 

'|| (SELECT CAST(version() AS int)) ||'

 

CAST(는 형변환을 한다고 알려주는 명령어)

 

해당 구문을 작성한 후 실행시켜 발생한 에러에 내용에 데이터베이스 정보를 확인했습니다

 

 

2. 이제 username(administrator)에 비밀번호 취득을 위한 작업

 

' AND 1=CAST((SELECT username FROM users) AS int)--

 

를 사용했더니  오류가 발생하고 

 

 

trackingid값을 지우고 다시 실행을 시켰더니 다른 에러가 발생했습니다

 

헷갈려서 AI에게 질문하니

 

trackingId가 있을 때는 따옴표 위치가 꼬이면서 문자열 파싱 에러가 난 거고, trackingId를 지우면 쿼리가 정상적으로 실행돼서 서브쿼리가 여러 행을 반환했다는 실제 실행 에러가 발생한 것이다.  (chatgpt)

 

이제 trackingid를 지우고 했던 구문에 발생한 오류가 서브쿼리를 실행했을때 여러 행을 반환해서 int형식으로 변환이 안된것이 문제이기 때문에

 

TrackingId=' AND 1=CAST((SELECT username FROM users LIMIT 1) AS int)--

 

LIMIT1을 추가하여 하나에 행만을 가져오도록합니다

 

그러면 반환한 행이 administrator라고 알려줍니다 이떄 발생하는 오류는 문자열을 int형식으로 바꿀려고 했기떄문에  발생한것입니다 이렇게 오류를 의도적으로 발생시켜 해당 오류에서 저희가 원하는 정보를 얻을 수 있게끔 하는것입니다

 

그럼 이제 반환한 첫번째 행이 administrator인것을 확인했으니 password를 반환하도록 하면 됩니다

 

 

'보안 > Web security Academy' 카테고리의 다른 글

web security academy 14  (0) 2026.03.06
web security academy 13  (0) 2026.03.05
web security academy 11  (0) 2026.02.24
web security academy 10  (0) 2026.02.23
web security academy9  (0) 2026.02.20