SlideShare a Scribd company logo
1 of 40
Download to read offline
Basic MySQL (sqlzoo.net – Select from world)
& Basic SQL Injection (zixem.altervista.org/SQLi)
(Level1 ~ Level3)
by Alchemic
(KoreaTech 이세한)
2
INDEX
0x01. Basic MySQL Problems (in sqlzoo.net)
0x02. Zixem SQLi Problems (level1 ~ level3)
3
0x01. Basic MySQL Problems (in sqlzoo.net)
4
0x01 Basic MySQL Problems (in sqlzoo.net)
이 문제는 위 그림에서 보이듯이 주어진 world 테이블에서 레코드 추출을 어떻게
할 것인지를 익혀보는 문제입니다.
5
0x01 Basic MySQL Problems (in sqlzoo.net)
1번 문제)
간단하게 world 테이블이 어떻게 출력이 되는지를 쿼리문을 읽고 실행해보라는 문제
입니다.
6
0x01 Basic MySQL Problems (in sqlzoo.net)
2번 문제)
world 테이블에서 name 속성을 가지는 레코드를 추출하는데, 조건이 population 속성의
원자값이 200 million을 초과하는 레코드만 추출하여 출력하라는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
7
0x01 Basic MySQL Problems (in sqlzoo.net)
3번 문제)
world 테이블에서 name 속성과 새로운 속성인 (gdp/population)에 관련된 레코드를
추출하되, 조건으로 population이 200 million 이상인 원자값을 가지는 레코드를 추출
하여 출력하는 문제입니다.
해당 쿼리는 위 그림과 같습니다.
8
0x01 Basic MySQL Problems (in sqlzoo.net)
4번 문제)
world 테이블에서 name 속성과 population/1million 속성을 추출하되, 조건으로
continent 속성의 원자값이 ‘South America’인 레코드를 추출하여 출력하는 문제입니다.
해당 쿼리는 위 그림과 같습니다.
9
0x01 Basic MySQL Problems (in sqlzoo.net)
5번 문제)
world 테이블에서 name 속성과 population에 관련된 레코드를 추출하되, 조건으로는
name 속성의 레코드 중에서 원자값이 ‘France’, ‘Germany’, ‘Italy’인 레코드만 추출하여
출력하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
10
0x01 Basic MySQL Problems (in sqlzoo.net)
6번 문제)
world 테이블에서 name 속성과 관련된 레코드를 추출하되, 조건으로는 name 속성의
레코드 중에서 ‘United’ 라는 문자열을 포함하는 원자값을 가진 레코드만 추출하여 출력
하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
11
0x01 Basic MySQL Problems (in sqlzoo.net)
7번 문제)
world 테이블에서 name 속성과 population 속성, area 속성과 관련된 레코드를 추출하되,
조건으로는 area 속성 원자값 중 3 million 을 초과하는 값과 population 속성 원자값 중
250 million을 초과하는 값을 가지는 레코드만 추출하여 출력하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
12
0x01 Basic MySQL Problems (in sqlzoo.net)
8번 문제)
world 테이블에서 name 속성과, population속성, area 속성을 가진 레코드를 추출하되,
조건으로는 area 속성의 원자값이 3 million 초과이면서 population 속성의 원자값이 250
million 미만인 값을 가지는 레코드를 추출하거나, area 속성의 원자값이 3 million 미만,
population 속성의 원자값이 250 million 초과인 값을 가지는 레코드를 추출하여 출력하는
문제입니다.
해당 쿼리문은 위 그림과 같습니다.
13
0x01 Basic MySQL Problems (in sqlzoo.net)
9번 문제)
world 테이블에서 name 속성과 population/1million 속성, gdp/1billion 속성의 레코드를
추출하되, 조건으로는 population/1million 과 gdp/1billion의 값을 소수점 이하 2자리 수
까지만 표현하고, continent 속성의 원자값이 ‘South America’인 레코드만 추출하여 출력
하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
14
0x01 Basic MySQL Problems (in sqlzoo.net)
10번 문제)
world 테이블에서 name 속성과 gdp/population 속성의 레코드를 추출하되, 조건으로는
gdp/population 속성의 원자값을 1000단위로 표현하고, gdp 속성의 원자값이 1 trillion
을 초과하는 레코드를 추출하여 출력하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
15
0x01 Basic MySQL Problems (in sqlzoo.net)
11번 문제)
이 문제는 case 문을 이용하여 값을 추출할 때, case whre 조건에 맞는 것을 찾아서 다른
방식으로 출력하는 문제입니다.
name 속성과 case문을 이용하여 continent 속성의 원자값이 ‘Oceania’이면 ‘Australasia’
로 대신 출력하고, 나머지는 그냥 출력합니다. 그리고 case 문까지 진행되어 추출된 레코드
중에서 name 속성의 원자값이 ‘N’으로 시작하는 문자열을 가진 원자값의 레코드만 추출
하여 출력하는 문제입니다.
16
0x01 Basic MySQL Problems (in sqlzoo.net)
12번 문제)
world 테이블에서 name과 case 문에 의해, continent 속성의 원자값이 ‘Europe’이거나
‘Asia’이면 ‘Eurasia’로 출력하고, continent 속성의 원자값이 ‘America’를 포함하거나
‘Caribbean’ 이면 ‘America’로 출력하고, 나머지는 그냥 출력합니다. 그리고 case 문까지
진행되고 추출된 레코드 중에서 name 속성의 원자값이 A로 시작하거나 B로 시작하는
값만을 따로 추출하여 출력하는 문제입니다.
해당 쿼리문은 위 그림과 같습니다.
17
0x01 Basic MySQL Problems (in sqlzoo.net)
13번 문제)
world 테이블에서 name과 case 문에 의해, continent 속성의 원자값이 ‘Oceania’ 이면
‘Australasia’로 출력하고, continent 속성의 원자값이 ‘Eurasia’이고 name 속성의 원자값
이 ‘Turkey’이면 ‘Europe/Asia’로 출력하고, continent 속성의 원자값이 ‘Caribbean’이고
name 속성의 원자값이 ‘B’로 시작하는 값이면 ‘North America’로 출력하고, continent 속
성의 원자값이 ‘Caribbean’이고 name 속성의 원자값이 ‘B’로 시작하는 값이 아니면 ‘South
America’로 출력하고, 나머지는 그냥 출력합니다. 그리고 추출되어진 레코드를 name 속성
을 기준으로 오름차순 정렬하여 출력하는 문제입니다.
18
0x02. Zixem SQLi Problems (level1 ~ level3)
19
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 1 (Super Easy)]
Level1은 이러한 문제가 주어집니다.
url을 확인해보면 id 라는 파라미터값이 넘어가게 됩니다.
20
0x02 Zixem SQLi Problems (level1 ~ level3)
우선, ‘ 을 url 뒤에 붙여서 서버로 보냈더니 다음과 같은 화면이 나타났습니다.
이를 통해서 우리는 다음과 같은 사실을 알 수 있습니다.
• http://www.zixem.altervista.org/SQLi/level1.php?id=1 이 취약하다는 것.
• 테이블 중에서 ID 속성이 취약하다는 것.
[Level 1 (Super Easy)]
21
0x02 Zixem SQLi Problems (level1 ~ level3)
컬럼(column) 수를 알아보기
위해 다음과 같이 order by 명
령어를 이용하여 구해보았습니
다.
order by 3은 제대로 출력이
되었습니다.
반면, order by 4는 오류가 나
타났습니다.
이를 통해 현재 사이트의 DB
테이블은 3개의 컬럼(column)
을 가지고 있다는 것을 확인할
수 있습니다.
[Level 1 (Super Easy)]
22
0x02 Zixem SQLi Problems (level1 ~ level3)
지금까지 방식으로 알아낸 사실들은 다음과 같습니다.
• http://www.zixem.altervista.org/SQLi/level1.php?id=1 이 취약하다는 것.
• 테이블 중에서 id 속성이 취약하다는 것.
• 테이블 컬럼(column) 수가 3개 라는 것.
[Level 1 (Super Easy)]
23
0x02 Zixem SQLi Problems (level1 ~ level3)
union select 를 이용하여 어느 컬럼(column)이 인젝션(injection)이 되는지를 알아
보도록 하겠습니다.
id=2+union+select+6661,6662,6663 을 입력하면, 다음과 같은 화면이 출력됩니다.
이를 통해 컬럼(column) 1과 2가 취약하다는 것을 확인할 수 있습니다.
[Level 1 (Super Easy)]
24
0x02 Zixem SQLi Problems (level1 ~ level3)
따라서, 컬럼(column) 1과 2 부분에 user(), version() 명령어를 집어넣으면
인젝션(injection) 공격이 가능할 것으로 보여집니다.
컬럼(column) 1 과 2 부분에 user()와 version() 명령어를 넣어서 injection 공격을 시도했
지만, 에러를 출력하게 됩니다. 아무래도 총 3개의 컬럼(column)이므로 3개 모두 입력을
해야 통과가 되는 것으로 보여집니다.
[Level 1 (Super Easy)]
25
0x02 Zixem SQLi Problems (level1 ~ level3)
컬럼(column) 3개 모두 입력을 해서 1과 2 부분에는 user(), version()을, 3 부분에는
쓰레기 값을 집어넣었습니다.
이로써 다음과 같이 성공적으로 injection 공격이 성공한 것을 확인할 수 있습니다.
Level1 Complete!
[Level 1 (Super Easy)]
26
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
Level2는 다음과 같은 문제가 주어집니다.
27
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
‘을 붙여서 서버로 보내면 다음과 같이 에러 응답을 보내줍니다.
이를 통해 알 수 있는 사실은 다음과 같습니다.
• http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4 가 취약하다.
• [‘] 표기가 반드시 필요하다.
28
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
‘ union select user(), version(), null
을 입력했더니 다음과 같은 오류가 나타났습니다.
이를 올바른 명령문으로 인식을 하게 만들기 위해서 다음의 표를 참고하여 명령문을
다시 작성해보았습니다.
29
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
다음과 같은 코멘트(주석) 추가하는 법을 알 수 있었고, 이를 이용하여
‘ union select user(), version(), null -- -
로 명령문을 바꾸었습니다.
30
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
이제는 명령문에 대한 에러는 나타나지 않고 있고, 이제 컬럼 수가 다르다는
에러를 보내주고 있습니다.
이제 컬럼 수만 맞추어주면 내용을 확인할 수 있을 것입니다.
컬럼 수를 하나 더 늘리기 위해 null을 하나 더 추가해보았습니다.
31
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
‘ union select user(), version(), null, null -- -
을 입력했더니 제대로 통과가 되었습니다.
하지만 아직 user() 정보와 version() 정보는 볼 수 없습니다.
이는 간단하게 showprofile 값만 변경해주면 됩니다. (4 이외의 값으로 변경)
32
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)]
user()와 version() 명령에 대한 정보를 확인할 수 있습니다!
Level2 Complete!
33
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
Level3는 다음과 같은 문제가 주어집니다.
34
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
‘ union select user(), version(), null, null
이 명령어를 작성해서 서버로 보냈더니 위 그림과 같은 에러 메시지를 보여줍니다.
union 명령어의 [union]이 [uni]로 replace 되는 것을 확인할 수 있습니다.
35
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
지금까지 작업을 통해 알 수 있는 사실들은 다음과 같습니다.
• 이 사이트는 취약하다.
• [‘]에 의해 취약점이 발생한다.
• [union]이 [uni]로 대체된다.
[union]이 [uni]로 대체되는 것을 막기 위해서 [unionon]을 작성하면 될 것입니다.
[unionon] = [union] + [on] => 서버로 보내지면 [uni] + [on]으로 인식되기 때문입니다.
36
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
‘ unionon select user(), version(), null, null
이 명령어로 보내서 union이 uni로 대체되는 문제를 해결하였습니다.
그리고 끝부분에 [‘]를 하나 더 붙여서 보내보도록 하겠습니다.
37
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
‘ unionon select user(), version(), null, null’
이렇게 명령어를 보냈더니 제대로 injection 이 되는 것을 확인할 수 있습니다.
이제 item 의 값을 다른 값으로 바꿔주면 원하는 결과를 얻을 수 있을 것입니다.
(3이외의 값 지정)
38
0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)]
성공적으로 결과가 나타난 것을 확인할 수 있습니다.
Level3 Complete!
39
Any questions?
[Contact]
sehands@koreatech.ac.kr
Thank You.

More Related Content

More from Sehan Lee

Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]
Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]
Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]Sehan Lee
 
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)Sehan Lee
 
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)Sehan Lee
 
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]Sehan Lee
 
Attacking Session Management
Attacking Session ManagementAttacking Session Management
Attacking Session ManagementSehan Lee
 
Web Application Technologies
Web Application TechnologiesWeb Application Technologies
Web Application TechnologiesSehan Lee
 
Packet Tracer를 이용한 OSPF 설정
Packet Tracer를 이용한 OSPF 설정Packet Tracer를 이용한 OSPF 설정
Packet Tracer를 이용한 OSPF 설정Sehan Lee
 
레이스 컨디션 기초(Basic Race Condition)
레이스 컨디션 기초(Basic Race Condition)레이스 컨디션 기초(Basic Race Condition)
레이스 컨디션 기초(Basic Race Condition)Sehan Lee
 
Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Sehan Lee
 

More from Sehan Lee (9)

Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]
Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]
Plaid CTF 2017 Write-Up [zipper (MISC 50pts)]
 
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)
GoogleCTF 2016 [Wallowing Wallabies - Part One] Write-Up (ver.korean)
 
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)
GoogleCTF 2016 [In Recorded Conversation] Write-Up (ver.korean)
 
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]
PlaidCTF 2016 Write-Up [hevc (MISC 50pts)]
 
Attacking Session Management
Attacking Session ManagementAttacking Session Management
Attacking Session Management
 
Web Application Technologies
Web Application TechnologiesWeb Application Technologies
Web Application Technologies
 
Packet Tracer를 이용한 OSPF 설정
Packet Tracer를 이용한 OSPF 설정Packet Tracer를 이용한 OSPF 설정
Packet Tracer를 이용한 OSPF 설정
 
레이스 컨디션 기초(Basic Race Condition)
레이스 컨디션 기초(Basic Race Condition)레이스 컨디션 기초(Basic Race Condition)
레이스 컨디션 기초(Basic Race Condition)
 
Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법Packet tracer 설치 및 사용법
Packet tracer 설치 및 사용법
 

Basic My SQL Problems(sqlzoo.net - select from world) & Basic SQL Injection(zixem.altervista.org - Level1 to Level3)

  • 1. Basic MySQL (sqlzoo.net – Select from world) & Basic SQL Injection (zixem.altervista.org/SQLi) (Level1 ~ Level3) by Alchemic (KoreaTech 이세한)
  • 2. 2 INDEX 0x01. Basic MySQL Problems (in sqlzoo.net) 0x02. Zixem SQLi Problems (level1 ~ level3)
  • 3. 3 0x01. Basic MySQL Problems (in sqlzoo.net)
  • 4. 4 0x01 Basic MySQL Problems (in sqlzoo.net) 이 문제는 위 그림에서 보이듯이 주어진 world 테이블에서 레코드 추출을 어떻게 할 것인지를 익혀보는 문제입니다.
  • 5. 5 0x01 Basic MySQL Problems (in sqlzoo.net) 1번 문제) 간단하게 world 테이블이 어떻게 출력이 되는지를 쿼리문을 읽고 실행해보라는 문제 입니다.
  • 6. 6 0x01 Basic MySQL Problems (in sqlzoo.net) 2번 문제) world 테이블에서 name 속성을 가지는 레코드를 추출하는데, 조건이 population 속성의 원자값이 200 million을 초과하는 레코드만 추출하여 출력하라는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 7. 7 0x01 Basic MySQL Problems (in sqlzoo.net) 3번 문제) world 테이블에서 name 속성과 새로운 속성인 (gdp/population)에 관련된 레코드를 추출하되, 조건으로 population이 200 million 이상인 원자값을 가지는 레코드를 추출 하여 출력하는 문제입니다. 해당 쿼리는 위 그림과 같습니다.
  • 8. 8 0x01 Basic MySQL Problems (in sqlzoo.net) 4번 문제) world 테이블에서 name 속성과 population/1million 속성을 추출하되, 조건으로 continent 속성의 원자값이 ‘South America’인 레코드를 추출하여 출력하는 문제입니다. 해당 쿼리는 위 그림과 같습니다.
  • 9. 9 0x01 Basic MySQL Problems (in sqlzoo.net) 5번 문제) world 테이블에서 name 속성과 population에 관련된 레코드를 추출하되, 조건으로는 name 속성의 레코드 중에서 원자값이 ‘France’, ‘Germany’, ‘Italy’인 레코드만 추출하여 출력하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 10. 10 0x01 Basic MySQL Problems (in sqlzoo.net) 6번 문제) world 테이블에서 name 속성과 관련된 레코드를 추출하되, 조건으로는 name 속성의 레코드 중에서 ‘United’ 라는 문자열을 포함하는 원자값을 가진 레코드만 추출하여 출력 하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 11. 11 0x01 Basic MySQL Problems (in sqlzoo.net) 7번 문제) world 테이블에서 name 속성과 population 속성, area 속성과 관련된 레코드를 추출하되, 조건으로는 area 속성 원자값 중 3 million 을 초과하는 값과 population 속성 원자값 중 250 million을 초과하는 값을 가지는 레코드만 추출하여 출력하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 12. 12 0x01 Basic MySQL Problems (in sqlzoo.net) 8번 문제) world 테이블에서 name 속성과, population속성, area 속성을 가진 레코드를 추출하되, 조건으로는 area 속성의 원자값이 3 million 초과이면서 population 속성의 원자값이 250 million 미만인 값을 가지는 레코드를 추출하거나, area 속성의 원자값이 3 million 미만, population 속성의 원자값이 250 million 초과인 값을 가지는 레코드를 추출하여 출력하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 13. 13 0x01 Basic MySQL Problems (in sqlzoo.net) 9번 문제) world 테이블에서 name 속성과 population/1million 속성, gdp/1billion 속성의 레코드를 추출하되, 조건으로는 population/1million 과 gdp/1billion의 값을 소수점 이하 2자리 수 까지만 표현하고, continent 속성의 원자값이 ‘South America’인 레코드만 추출하여 출력 하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 14. 14 0x01 Basic MySQL Problems (in sqlzoo.net) 10번 문제) world 테이블에서 name 속성과 gdp/population 속성의 레코드를 추출하되, 조건으로는 gdp/population 속성의 원자값을 1000단위로 표현하고, gdp 속성의 원자값이 1 trillion 을 초과하는 레코드를 추출하여 출력하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 15. 15 0x01 Basic MySQL Problems (in sqlzoo.net) 11번 문제) 이 문제는 case 문을 이용하여 값을 추출할 때, case whre 조건에 맞는 것을 찾아서 다른 방식으로 출력하는 문제입니다. name 속성과 case문을 이용하여 continent 속성의 원자값이 ‘Oceania’이면 ‘Australasia’ 로 대신 출력하고, 나머지는 그냥 출력합니다. 그리고 case 문까지 진행되어 추출된 레코드 중에서 name 속성의 원자값이 ‘N’으로 시작하는 문자열을 가진 원자값의 레코드만 추출 하여 출력하는 문제입니다.
  • 16. 16 0x01 Basic MySQL Problems (in sqlzoo.net) 12번 문제) world 테이블에서 name과 case 문에 의해, continent 속성의 원자값이 ‘Europe’이거나 ‘Asia’이면 ‘Eurasia’로 출력하고, continent 속성의 원자값이 ‘America’를 포함하거나 ‘Caribbean’ 이면 ‘America’로 출력하고, 나머지는 그냥 출력합니다. 그리고 case 문까지 진행되고 추출된 레코드 중에서 name 속성의 원자값이 A로 시작하거나 B로 시작하는 값만을 따로 추출하여 출력하는 문제입니다. 해당 쿼리문은 위 그림과 같습니다.
  • 17. 17 0x01 Basic MySQL Problems (in sqlzoo.net) 13번 문제) world 테이블에서 name과 case 문에 의해, continent 속성의 원자값이 ‘Oceania’ 이면 ‘Australasia’로 출력하고, continent 속성의 원자값이 ‘Eurasia’이고 name 속성의 원자값 이 ‘Turkey’이면 ‘Europe/Asia’로 출력하고, continent 속성의 원자값이 ‘Caribbean’이고 name 속성의 원자값이 ‘B’로 시작하는 값이면 ‘North America’로 출력하고, continent 속 성의 원자값이 ‘Caribbean’이고 name 속성의 원자값이 ‘B’로 시작하는 값이 아니면 ‘South America’로 출력하고, 나머지는 그냥 출력합니다. 그리고 추출되어진 레코드를 name 속성 을 기준으로 오름차순 정렬하여 출력하는 문제입니다.
  • 18. 18 0x02. Zixem SQLi Problems (level1 ~ level3)
  • 19. 19 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 1 (Super Easy)] Level1은 이러한 문제가 주어집니다. url을 확인해보면 id 라는 파라미터값이 넘어가게 됩니다.
  • 20. 20 0x02 Zixem SQLi Problems (level1 ~ level3) 우선, ‘ 을 url 뒤에 붙여서 서버로 보냈더니 다음과 같은 화면이 나타났습니다. 이를 통해서 우리는 다음과 같은 사실을 알 수 있습니다. • http://www.zixem.altervista.org/SQLi/level1.php?id=1 이 취약하다는 것. • 테이블 중에서 ID 속성이 취약하다는 것. [Level 1 (Super Easy)]
  • 21. 21 0x02 Zixem SQLi Problems (level1 ~ level3) 컬럼(column) 수를 알아보기 위해 다음과 같이 order by 명 령어를 이용하여 구해보았습니 다. order by 3은 제대로 출력이 되었습니다. 반면, order by 4는 오류가 나 타났습니다. 이를 통해 현재 사이트의 DB 테이블은 3개의 컬럼(column) 을 가지고 있다는 것을 확인할 수 있습니다. [Level 1 (Super Easy)]
  • 22. 22 0x02 Zixem SQLi Problems (level1 ~ level3) 지금까지 방식으로 알아낸 사실들은 다음과 같습니다. • http://www.zixem.altervista.org/SQLi/level1.php?id=1 이 취약하다는 것. • 테이블 중에서 id 속성이 취약하다는 것. • 테이블 컬럼(column) 수가 3개 라는 것. [Level 1 (Super Easy)]
  • 23. 23 0x02 Zixem SQLi Problems (level1 ~ level3) union select 를 이용하여 어느 컬럼(column)이 인젝션(injection)이 되는지를 알아 보도록 하겠습니다. id=2+union+select+6661,6662,6663 을 입력하면, 다음과 같은 화면이 출력됩니다. 이를 통해 컬럼(column) 1과 2가 취약하다는 것을 확인할 수 있습니다. [Level 1 (Super Easy)]
  • 24. 24 0x02 Zixem SQLi Problems (level1 ~ level3) 따라서, 컬럼(column) 1과 2 부분에 user(), version() 명령어를 집어넣으면 인젝션(injection) 공격이 가능할 것으로 보여집니다. 컬럼(column) 1 과 2 부분에 user()와 version() 명령어를 넣어서 injection 공격을 시도했 지만, 에러를 출력하게 됩니다. 아무래도 총 3개의 컬럼(column)이므로 3개 모두 입력을 해야 통과가 되는 것으로 보여집니다. [Level 1 (Super Easy)]
  • 25. 25 0x02 Zixem SQLi Problems (level1 ~ level3) 컬럼(column) 3개 모두 입력을 해서 1과 2 부분에는 user(), version()을, 3 부분에는 쓰레기 값을 집어넣었습니다. 이로써 다음과 같이 성공적으로 injection 공격이 성공한 것을 확인할 수 있습니다. Level1 Complete! [Level 1 (Super Easy)]
  • 26. 26 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] Level2는 다음과 같은 문제가 주어집니다.
  • 27. 27 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] ‘을 붙여서 서버로 보내면 다음과 같이 에러 응답을 보내줍니다. 이를 통해 알 수 있는 사실은 다음과 같습니다. • http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4 가 취약하다. • [‘] 표기가 반드시 필요하다.
  • 28. 28 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] ‘ union select user(), version(), null 을 입력했더니 다음과 같은 오류가 나타났습니다. 이를 올바른 명령문으로 인식을 하게 만들기 위해서 다음의 표를 참고하여 명령문을 다시 작성해보았습니다.
  • 29. 29 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] 다음과 같은 코멘트(주석) 추가하는 법을 알 수 있었고, 이를 이용하여 ‘ union select user(), version(), null -- - 로 명령문을 바꾸었습니다.
  • 30. 30 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] 이제는 명령문에 대한 에러는 나타나지 않고 있고, 이제 컬럼 수가 다르다는 에러를 보내주고 있습니다. 이제 컬럼 수만 맞추어주면 내용을 확인할 수 있을 것입니다. 컬럼 수를 하나 더 늘리기 위해 null을 하나 더 추가해보았습니다.
  • 31. 31 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] ‘ union select user(), version(), null, null -- - 을 입력했더니 제대로 통과가 되었습니다. 하지만 아직 user() 정보와 version() 정보는 볼 수 없습니다. 이는 간단하게 showprofile 값만 변경해주면 됩니다. (4 이외의 값으로 변경)
  • 32. 32 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 2 (Easy)] user()와 version() 명령에 대한 정보를 확인할 수 있습니다! Level2 Complete!
  • 33. 33 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] Level3는 다음과 같은 문제가 주어집니다.
  • 34. 34 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] ‘ union select user(), version(), null, null 이 명령어를 작성해서 서버로 보냈더니 위 그림과 같은 에러 메시지를 보여줍니다. union 명령어의 [union]이 [uni]로 replace 되는 것을 확인할 수 있습니다.
  • 35. 35 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] 지금까지 작업을 통해 알 수 있는 사실들은 다음과 같습니다. • 이 사이트는 취약하다. • [‘]에 의해 취약점이 발생한다. • [union]이 [uni]로 대체된다. [union]이 [uni]로 대체되는 것을 막기 위해서 [unionon]을 작성하면 될 것입니다. [unionon] = [union] + [on] => 서버로 보내지면 [uni] + [on]으로 인식되기 때문입니다.
  • 36. 36 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] ‘ unionon select user(), version(), null, null 이 명령어로 보내서 union이 uni로 대체되는 문제를 해결하였습니다. 그리고 끝부분에 [‘]를 하나 더 붙여서 보내보도록 하겠습니다.
  • 37. 37 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] ‘ unionon select user(), version(), null, null’ 이렇게 명령어를 보냈더니 제대로 injection 이 되는 것을 확인할 수 있습니다. 이제 item 의 값을 다른 값으로 바꿔주면 원하는 결과를 얻을 수 있을 것입니다. (3이외의 값 지정)
  • 38. 38 0x02 Zixem SQLi Problems (level1 ~ level3) [Level 3 (Medium)] 성공적으로 결과가 나타난 것을 확인할 수 있습니다. Level3 Complete!