본문 바로가기
Web Hacking

12. SQL 작업환경 구축 및 기초 구문

by 귀멸 2022. 7. 9.

0. SQL 기초 - 작업 환경 구축
  1) apm Monitor (CLI 환경)
      apmsetup 완료 후 cmd창에서 netstat -an
      80확인 3306포트 Listening 확인
      apmonitor에서 MySQL 콘솔로 들어가서 암호 입력 후 로그인

  2) MySQL (GUI 환경)
     MySQL 설치 후 MySQL 쿼리 브라우저 실행
     server host 127.0.0.1   : 3306
     username : root
     password : apmsetup
     default schma : webhack


1. SQL 기초 구문
  1) DB 테이블 만들고 자료 삽입 apm monitor 콘솔에서 진행
      use webhack              : 사용하고자 하는 schema 선택

create table member(
no integer primary key,
name varchar(20),
user_id varchar(10),
user_pw varchar(10),
nickname varchar(20),
email varchar(40)
);

  2) 생성한 Table에 자료 입력

insert into member(no, name, user_id, user_pw, nickname, email)
 	values(1, '에이', 'a', 'dpdl', '에이', 'a@kgitbank.com');
insert into member(no, name, user_id, user_pw, nickname, email)
	values(2, '비', 'b', 'ql', '비', 'b@kgitbank.com');
insert into member(no, name, user_id, user_pw, nickname, email)
	values(3, '씨', 'c', 'Tl', '씨', 'c@kgitbank.com');

 3) 입력한 자료 확인

show tables;
select * from member;


 4) 서버컴퓨터에서 MSSQL 쿼리 분석기 사용

use webhack
select * from member

insert 구문
insert into member
values('test', '1234', '테스트', '테스트', '23','','','','','')  -- 테이블의 컬럼개수에 맞게 value입력

insert into member(user_id, user_pw, name, nickname)
values('test2', '1234', '테스트2', '테스트2')

 

client에서 웹페이지 회원가입 시 아래 파일로 요청한다
POST http://192.168.1.20/member/member_register_ok.asp HTTP/1.0
서버에서 파일을 열어보면

strSQL="insert into member(user_id,name,user_pw,nickname,zipcode,address1,address2,email,homepage)"
strSQL=strSQL&"values ('"&user_id&"','"
strSQL=strSQL&name&"','"
strSQL=strSQL&user_pw&"','"
strSQL=strSQL&nick_name&"','"
strSQL=strSQL&zipcode&"','"
strSQL=strSQL&address1&"','"
strSQL=strSQL&address2&"','"
strSQL=strSQL&email&"','"
strSQL=strSQL&homepage&"')"
DBconn.execute(strSQL)


 5) update구문

update member -- member 테이블 use_id가 test인 행의 name을 테스트1으로 변경
set name='테스트1'
where user_id='test'

회원정보 수정 시 GET method로 update SQL 구문을 사용함
GET http://192.168.1.20/member/member_modify_ok.asp?
if exec = "modify" then
strSQL = "update member set nickname = '" + nickname + "' , email = '" + email + "' where user_id = '" + user_id +"'"
set Rs=DBconn.execute(strSQL)

 6) delete구문

delete from member
where user_id='test2'  --  member 테이블의 user_id가 test2인 행을 모두 삭제

게시글 삭제 시 POST method로 delete 구문을 사용함
POST http://192.168.1.20/board/board_delete_ok.asp
if Trim(userPassword) = Trim(strRealPassword) then
strSQL = "delete from board where strNumber = " & intNum
DBconn.Execute strSQL
DBconn.Close
Set DBconn = nothing
%>

 

 7) select구문 (조회)

select name, age
from member
where age>=25 -- member table에서 age가 25 이상인 행의 name, age 칼럼을 보여줘
  
-- where에 다양한 조건을 사용할 수 있음
where age between 20 and 25 -- age가 20 ~ 25인
where zipcode like'신%' -- zipcode가 신**으로 시작하는 
order by age -- age 오름차순 정리
order by age desc, name desc -- 내림차순 정렬(desc) age를 1순위로 내림차순으로 정렬하고, 그안에서 name을 2순위로 내림차순 정렬

select avg(age) /count/max/min/sum -- 다양한 함수 사용가능
select count(distinct age) -- distinct 중복을 제외하고

-- NULL 이랑 빈칸은 다르다

select age, count(*) as 인원수 -- 몇개인지 숫자 세줘 '인원수'라는 별칭을 컬럼으로 해서
from member
where name like '이%' -- 이름이 '이'로 시작하는 회원
group by age  -- 해당 컬럼의 경우의 수대로 그룹을 지어서 
having age>=25 -- age가 25이상인 값들 중에서
order by age desc -- 나이 순으로 내림차순 정렬

 

 8) substring
substring (MSSQL)   mid(MySQL, Oracle)  

select substaring('abcd', 1, 3)
select substring(db_name(), 2, 1) -- blind SQL Injection에서 사용

 9) union (합집합)

   ** union을 사용 할 수 있는 조건
    1. field의 개수가 일치
    2. 각 field의 type이 일치
    3. select 문에서 column의 순서가 같아야 함

select name from member union
select strName from board


실습 문제 member에서 조회
[문제 1] 나이가 가장 많은 회원의 이름을 조회하라
select name, age
from member
where age = (select max(age) from member) 

[문제 2] 모든 회원들의 나이를 7살 높여라
update member
set age = age + 7

[문제 3] id 중에 's'가 들어가는 회원의 tuple을 삭제하라
delete from member
where user_id like '%s%'

[문제 4] 이름 중에 '지'가 들어가는 회원의 모든 정보를 조회하라!!
단 나이와, 이름을 내림차순으로 정렬하라.
select name, are from member
where name like '%지%'
order by age desc, name desc

[문제 5] 나이가 30 이하인 회원들을 그룹별로 인원수를 조회하라
select age, count(*) as 인원수
from member
group by age
having age<=30

[문제 6] 성이 '김'씨인 회원의 성을 '이'씨로 변경하라
update member
set name='이'+ substring(name, 2, 2)
where substring(name, 1, 1) ='김'

'Web Hacking' 카테고리의 다른 글

13. String SQL Injection (Webgoat)  (0) 2022.07.29
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

댓글