목록Web (18)
D1N0's hacking blog
문제 풀이 코드를 보면 id가 admin이기만 하면 되는 것 같다 그러나 admin과 '를 필터링해서 우회를 해야 한다 풀이 id=Admin preg_match 구문을 잘 보면 /뒤에 i가 없는데, 이는 대소문자 구분을 한다는 것이다 SQL은 대소문자 구분을 하지 않기 때문에 id의 일부를 대문자로 쓰면 필터링에 걸리지 않으면서 admin취급을 받는다
문제 풀이 코드를 보니 or과 and를 필터링하고 있다 그리고 믿에서 pw를 직접 검사하기 때문에 Blind SQL injection을 통해 pw를 알아내야 한다 STEP 0 - SQL injection 취약점 확인 pw=' || id='admin' %26%26 1=1;%23 이렇게 쓰면 Hello admin이 뜬다 이를 이용해 Blind SQL injection을 한다 STEP 1 - pw 길이 구하기 pw=' || id='admin' %26%26 length(pw) = [길이 추측];%23 이를 이용해 길이를 구할 수 있다 직접 하기 귀찮으니 파이썬 코드를 짠다 import requests target = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be..
문제 풀이 코드를 보면 or과 and를 필터링한다 SQL에서 or과 and는 각각 ||, &&로 쓸 수 있다 이때 &&는 url에 직접 쓰지 못하니까 url인코딩해서 %26%26으로 쓰면 된다 첫 번째 풀이 pw=' || id = 'admin';%23 원래 or가 있던 자리에 ||를 넣었다
문제 풀이 언뜻 보면 pw=' or id = 'admin';%23으로 풀 수 있을 것 같지만 코드를 보면 공백을 필터링하고 있다 불필요한 공백을 지우더라도 or과 id는 띄워야 한다 SQL에서 공백은 Tab, Line Feed, Carrage Return, 주석, 괄호, + 등으로 우회 가능하다 첫 번째 풀이 pw='or%09id='admin';%23 공백이 필요한 부분에 Tab(%09)을 넣어 필터링을 우회했다 불필요한 공백을 다 지웠지만 중간중간 Tab을 더 넣어도 문제는 없다 Tab 대신 LF(%0a), CR(%0d)를 넣어도 된다 두 번째 풀이 pw='or/**/id='admin';%23 pw='or(id)='admin';%23 pw='or%2bid='admin';%23 각각 주석, 괄호, +로 ..
Blind SQL injection이란? DB에 대한 메시지를 알 수 없는 경우 사용되는 공격 방법이다 페이지가 잘 나오는지, 에러가 나는지를 통해 각 조건의 참, 거짓을 받아서 DB를 알아낼 수 있다 예를 들어 up/down게임처럼 원하는 문자가 7인걸 알기 위해 5보다 큰가? T -> 8보다 큰가? F -> 6인가? F -> 7인가? T의 순서로 원하는 정보를 얻어오는 것과 비슷하다 문제 풀이 코드를 보면 SQL문 외에 직접적으로 pw를 비교하는 부분이 있기 때문에 pw를 구해야 한다 SQL 쿼리에 SQL injection 취약점이 존재하므로 Blind SQL injection으로 pw를 알아낼 수 있다 STEP 0 - SQL injection 취약점 확인 pw=' or id='admin' and 1..
문제 풀이 Goblin 문제에 들어가면 이런 모습이 보인다 허걱! 우리의 '를 필터링하고 있다 다행히 no도 '로 시작하지 않아서 SQL injection이 가능하다 id가 admin인 행을 가져와야 한다 첫 번째 풀이 no=12345 or id=char(97,100,109,105,110) 이렇게 쓰면 쿼리가 select id from prob_goblin where id='guest' and no=5 or id=char(97,100,109,105,110)이 된다 일단 guest와 no가 매치되지 않도록 no에 이상한 값을 넣고, or로 id='admin'인 행을 가져오면 된다 그러나 '가 막혀 있으므로 SQL 내부 함수인 char를 이용해 admin을 만들었다 char은 인자로 받은 정수를 각각에 해당..
문제 풀이 Cobolt 문제에 들어가면 다음과 같은 모습이 보인다 Gremlin과 다를 바 없지만 이번에는 불러온 행의 id가 admin이어야 하고, pw는 md5 암호화를 한다 이를 보면 Gremlin에서처럼 pw를 이용한 SQL injection은 어려워 보인다 때문에 id를 사용해 SQL injection을 진행하면 된다 첫 번째 풀이 id=admin'%23 이렇게 쓰면 쿼리가 select id from prob_cobolt where id='admin'#' and pw=md5('')가 된다 주석을 사용해 pw검증을 실행하지 않는 건 Gremlin과 같지만 id를 admin으로 지정해주었다 두 번째 풀이 id=admin' or '1' = '1 이렇게 쓰면 쿼리가 select id from prob_..
들어가기 전에 이 글은 기본적인 SQL injection에 대해 다룬다 php나 SQL 같은 웹에 대한 지식이 아예 없다면 간단히라도 공부하고 읽는 것을 추천한다 SQL 인젝션이란? SQL 삽입(영어: SQL Injection, SQL 인젝션, SQL 주입)은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다. [위키백과] 간단히 말해 사이트 내에서 sql 쿼리를 사용하는 부분의 취약점을 이용해서 데이터베이스를 조작하는 웹 해킹 기법을 말한다 Lord of SQL injection(이하 los)는 Rubiya님이 운영하는 워게임 사이트로, 다양한 SQL 인젝션 공격을 실습해볼 수 있다 문제 풀이 Grem..