목록분류 전체보기 (33)
D1N0's hacking blog
문제 풀이 코드를 보면 ', substr, ascii, =, or, and, 공백, like, 0x를 필터링하고 있다 '는 no 부분에 '가 없기 때문에 우회 가능하고, substr은 mid, ascii는 char, or는 ||, and는 &&(%26%26)로 우회 가능하며, 공백은 tab이나 괄호 등으로 우회 가능하다 문제는 =과 like인데, 이와 비슷한 기능을 하는 instr을 이용하면 우회할 수 있다 STEP 0 - SQL injection 취약점 확인 no=1234||instr(id,char(97,100,109,105,110));%23 instr은 일치하는 문자열의 개수를 반환하는 함수인데, instr([문자열], [찾을 문자열])을 통해 =을 우회할 수 있다 STEP 1 - pw 길이 구하기 ..
문제 풀이 코드를 보면 pw를 직접 비교하기 때문에 pw를 구해야 한다 blind SQL injection을 쓰면 될 것 같은데 잘 보니 '를 필터링한다 그러나 no에 '가 없으니 Goblin문제처럼 SQL injection이 가능하다 substr, ascii, =를 필터링하는 것은 Golem문제처럼 각각 mid, ord, like로 우회 가능하다 STEP 0 - SQL injection 취약점 확인 no=1234 or id like char(97, 100, 109, 105, 110);%23 like와 char을 이용해 필터링을 우회하면 Hello admin을 띄울 수 있다 이제 pw를 찾아보자 STEP 1 - pw 길이 구하기 no=1234 or id like char(97, 100, 109, 105,..
문제 풀이 문제를 보면 pw를 직접 비교하기 때문에 Blind SQL injection으로 pw를 알아내야 한다 그러나 or, and, substr(, =을 필터링하고 있다 or과 and는 전처럼 ||, &&로 우회 가능하고, =은 like로 우회 가능하다 참고로 like는 부분적으로 일치하는 부분이 있는지 확인할 때 사용하는 구문이지만 특정기호 없이 글자만 넣으면 =과 같은 역할을 한다 substr을 우회할 수 있는건 많이 있지만 여기서는 mid를 이용했다 STEP 0 - SQL injection 취약점 확인 pw=' || id like 'admin';%23 or -> || , = -> like로 하면 Hello admin이 뜬다 이를 이용해 pw를 구해보자 STEP 1 - pw 길이 구하기 pw=' ..
문제 풀이 코드를 보면 id를 guest로 두고 심지어 뒤에 false구문까지 뒀다 그러나 다행히 '를 필터링하지 않기 때문에 전에 간단한 SQL injection으로 인증할 수 있다 첫 번째 풀이 pw=' or id='admin';%23 or을 사용해 id가 admin인 행을 가져오고 1=0 부분은 주석으로 날린다 두 번째 풀이 pw=' or id='admin' or ' 주석을 쓰지 않고 1=0 부분을 or로 처리할 수도 있다
문제 풀이 코드를 보면 '를 필터링하고 있고, id를 전부 소문자로 바꾸고, "admin"을 ""으로 바꾼다 Troll문제에서 사용한 대소문자로 우회하는 것도 사용할 수 없다 때문에 str_replace에서의 취약점을 이용할 것이다 풀이 id=adadminmin 언뜻 보면 str_replace("admin","",$_GET[id]);에서 모든 admin이 지워져서 admin을 쓰지 못할 것 같지만, 문제는 admin을 한 번만 날린다는 것이다 id를 adadminmin처럼 쓰면 가운데의 admin이 사라지면서 양 끝의 ad와 min만 남아 admin이 된다
문제 풀이 코드를 보면 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..