워게임을 하면서 유용했던 팁들을 적어두는 글
SQL Injection은 사용자의 입력을 허락할 때 db의 중요 정보를 탈취하거나
로그인을 우회해 관리자의 권한으로 여러가지 조작이 가능한 공격이다.
SQLI는 기본적으로 참과 거짓의 문제이다.
조건을 참으로 만들어줘야 한다.
방법은 여러 가지가 있는데
예를 들어 user 라는 테이블이 아래와 같다고 하자
id | name | pw |
1 | admin | aaaaaaaaa |
2 | guest | gggggggg |
select name from user where id = [사용자 입력 값] and pw = [사용자 입력 값];
위 같은 문장이 주어지고 admin으로 로그인 하고자 할 때
id,pw을 알면 적어주면 되지만 모르는 경우엔 아래와 같이 해줄 수 있다.
id 입력 란에 'admin' and pw = 'a' or 1=1# 을 입력해주고 pw입력 란에 아무 문자를 넣어준 뒤 전송한다.
or 1=1 때문에 무조건 참이 되서 로그인이 가능해지는 원리이다.
if가 필터링 된다면 case when else end를 사용할 수 있다.
아니면 or, | 연산자나 cot() 함수를 사용해보자.
https://blog.ssrf.kr/40
SQL Injection 정리
주석 #, --, /**/ Express string select 0x6162; -> ab select 0b110000101100010; -> ab select char(0x61, 0x62); -> ab select concat(char(0x61), char(0x62)); -> ab select mid(@@version,12,1); -> n /* U..
blog.ssrf.kr
쿼리문의 에러를 도출해준다면 error based sql injection이 가능하다.
주로 에러를 일으키는 값인 9e307*2을 활용한다.
에러를 출력해주지 않는 경우 time based sql injection을 사용하는 경우도 있다.
sleep() 함수를 주로 사용한다.
select가 필터링되는 문제를 만날 때가 있다.
내장 프로시저 중 analyze() 함수를 사용하면 유용하다.
https://blog.ch4n3.kr/109
MySQL procedure analyze()를 이용한 SQLi
MySQL에서는 특정 쿼리에 대한 성능 개선을 위해 procedure analyse() 함수를 제공한다. 이 함수는 LIMIT statement와 GROUP BY statement 뒤에서도 사용할 수 있다는 특징이 있기 때문에 해당 statement에서..
blog.ch4n3.kr
블라인드 sql을 할 때 결과를 하나씩 보여줄 때가 있다.
이 때 group_concat(column_name)을 사용하면 한 줄에 볼 수 있다.
information_schema에선 테이블 이름, 컬럼 이름, 현재 실행되고 있는 쿼리 등 다양한 정보를 얻을 수 있다.
information_schema.tables : 테이블명
information_schema.columns : 컬럼명
information_schema.processlist : 실행되고 있는 쿼리
https://qkqhxla1.tistory.com/107
information_schema
information_schema 데이터베이스에는 모든 테이블의 정보가 들어있음. 데이터베이스.테이블이름 이런 형식으로 접근 가능함. 많이 쓰이는건 information_schema.tables, information_schema.columns, information..
qkqhxla1.tistory.com
db에 insert 할 때 칼럼의 길이를 초과하면 길이만큼 잘려서 들어간다.
예를 들어 32자까지 입력이 가능한 컬럼이 있을 때 33자를 입력하게 되면 33번째 문자는 잘리고 32자가 들어가게 된다.
이는 admin 계정의 중복 가입이 가능하게 된다.
(입력 값의 대한 길이 검증이 없을 때 가능한 공격)
(추가로 작성 예정)
'background > web' 카테고리의 다른 글
Spring View Manipulation (Thymeleaf SSTI) (0) | 2023.08.07 |
---|---|
Command Injection for PHP (0) | 2022.11.28 |
Command Injection for Linux (2) (1) | 2022.11.27 |
Command Injection for Linux (1) (0) | 2022.11.26 |
[NoSQL] Redis DBMS (0) | 2022.11.24 |