그냥 생각날때 마다 적는 글 (추가 예정)
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붙여줘야 한다.
참고할만할 URL들
- rubiya님이 정리한 sqli정리
https://www.hackerschool.org/Sub_Html/HS_Posting/?uid=43
- 유재욱님이 정리한 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 |