분류 전체보기
-
이번 문제는 굉장히 어려워 보였다. 그 이유는 이전 문제인 Darkknight 문제와 같은 문제이지만, 풀이에 사용하는 =, LIKE, ascii, 0x를 필터링을 하고 있기 때문이다. 문제 풀이를 위해 공격 백터와 공격 백터에 대한 검사를 정리하겠다. 공격 백터는 pw와 no가 있다. pw의 필터링은 '이며, addslashes 함수로 특정 특수 문자를 사용 못하게 치환하고 있다. no의 필터링은 prob, _, ., (), ‘, SUBSTR, ASCII, =, or, and, 공백, LIKE, 0x이 있다. 일단 생각한 방법은 '를 우회할 수 없으니, no를 이용하여 공격를 시도해야할 것 같다. 인터넷에 =, LIKE를 대신하여 사용할 만한 것을 찾을 수 있었다. 바로 IN 연산자라는 것이다. 사용하..
[Lord of SQLInjection] Bugbear Write UP이번 문제는 굉장히 어려워 보였다. 그 이유는 이전 문제인 Darkknight 문제와 같은 문제이지만, 풀이에 사용하는 =, LIKE, ascii, 0x를 필터링을 하고 있기 때문이다. 문제 풀이를 위해 공격 백터와 공격 백터에 대한 검사를 정리하겠다. 공격 백터는 pw와 no가 있다. pw의 필터링은 '이며, addslashes 함수로 특정 특수 문자를 사용 못하게 치환하고 있다. no의 필터링은 prob, _, ., (), ‘, SUBSTR, ASCII, =, or, and, 공백, LIKE, 0x이 있다. 일단 생각한 방법은 '를 우회할 수 없으니, no를 이용하여 공격를 시도해야할 것 같다. 인터넷에 =, LIKE를 대신하여 사용할 만한 것을 찾을 수 있었다. 바로 IN 연산자라는 것이다. 사용하..
2021.07.20 -
이번에도 전 문제와 유사한 문제가 왔다. 하지만 필터링되는 부분이 다른 것을 확인할 수 있다. 이 문제에선 파라미터로 pw와 no를 서버로 전달한다. 서버에선 pw와 no에 대한 검사를 후 쿼리문에 삽입한다. 이때 검사는 pw의 경우 prob, _, ., (), '를 필터링하며, addslashes 함수를 이용하여 특정 특수 문자를 사용 못하게 치환한다. no의 경우 ', SUBSTR, ASCII, =를 필터링한다. 공격 백터는 pw와 no가 있는데 pw의 경우 ''으로 감싸져 있어서 공격을 시도했을 때 '를 사용해야지만 가능할 거 같다. 하지만 pw의 필터링 목록 중 '이 있어서 pw의 경우 공격 백터로 사용을 못할 것으로 판단되었다. 남은 건 no 파라미터인데 no의 경우 감싸진 것이 없어서 HEX와..
[Lord of SQLInjection] Darkknight Write UP이번에도 전 문제와 유사한 문제가 왔다. 하지만 필터링되는 부분이 다른 것을 확인할 수 있다. 이 문제에선 파라미터로 pw와 no를 서버로 전달한다. 서버에선 pw와 no에 대한 검사를 후 쿼리문에 삽입한다. 이때 검사는 pw의 경우 prob, _, ., (), '를 필터링하며, addslashes 함수를 이용하여 특정 특수 문자를 사용 못하게 치환한다. no의 경우 ', SUBSTR, ASCII, =를 필터링한다. 공격 백터는 pw와 no가 있는데 pw의 경우 ''으로 감싸져 있어서 공격을 시도했을 때 '를 사용해야지만 가능할 거 같다. 하지만 pw의 필터링 목록 중 '이 있어서 pw의 경우 공격 백터로 사용을 못할 것으로 판단되었다. 남은 건 no 파라미터인데 no의 경우 감싸진 것이 없어서 HEX와..
2021.07.19 -
level 4번 시작! 바로 소스보기를 통해 확인.. 첫번째 소스코드를 처음부터 살펴보자. 2가지 내용을 확인할 수 있었다. 1.SQL이란 객체를 생성하고 connect 함수를 실행시키고 query에 쿼리문이 담겨있다. 2.leet_hax0r 쿠키값을 base63로 디코딩을 한 후 unserialize를 하는 것을 확인 할 수 있다. 두번째 소스코드를 보면 첫번째 소스코드에서 알 수 있었던 connect 함수를 여기서 호출하는것을 확인할 수 있다. 그리고 마지막 __destruct() 함수를 볼 필요가 있다. __destruct() 함수는 소멸자로서 특정 객체를 참조 후 또는 객체가 명시적으로 파기된 후 메소드를 호출한다. 정리하면 SQL 객체가 실행되고 파기된 후 destruct()함수가 호출되면 us..
[websec.fr] babysteps - Level 04level 4번 시작! 바로 소스보기를 통해 확인.. 첫번째 소스코드를 처음부터 살펴보자. 2가지 내용을 확인할 수 있었다. 1.SQL이란 객체를 생성하고 connect 함수를 실행시키고 query에 쿼리문이 담겨있다. 2.leet_hax0r 쿠키값을 base63로 디코딩을 한 후 unserialize를 하는 것을 확인 할 수 있다. 두번째 소스코드를 보면 첫번째 소스코드에서 알 수 있었던 connect 함수를 여기서 호출하는것을 확인할 수 있다. 그리고 마지막 __destruct() 함수를 볼 필요가 있다. __destruct() 함수는 소멸자로서 특정 객체를 참조 후 또는 객체가 명시적으로 파기된 후 메소드를 호출한다. 정리하면 SQL 객체가 실행되고 파기된 후 destruct()함수가 호출되면 us..
2021.07.18 -
이번 문제는 Orge 문제와 유사한 문제이다. 하지만 좀 더 강력한 필터링이 걸어져 있었다. prob, _, ., (), or, and, substr(, =이 필터링이 걸어져 있었고, 거기에 addslashes 함수로 특정 특수문자를 사용 못하게 치환하였다. 내가 SQL Injection에 사용하는 문자열들은 or, LENGTH(pw)=, SUBSTR(PW, 1, 1)=이 있다. 필터링에 걸리는 것은 or, SUBSTR(, =이 걸린다. 이것을 우회하려면 ||, LIKE로 우회가 가능하다. 하지만 SUBSTR 함수는 우회 방법이 없어서 다른 함수를 사용해야할 것 같았다. 일단 pw의 길이를 구해보겠다. Orc 문제처럼 admin의 pw가 여러 개는 아닌 듯 하다. admin의 pw 길이는 8개이며, gu..
[Lord of SQLInjection] Golem Write UP이번 문제는 Orge 문제와 유사한 문제이다. 하지만 좀 더 강력한 필터링이 걸어져 있었다. prob, _, ., (), or, and, substr(, =이 필터링이 걸어져 있었고, 거기에 addslashes 함수로 특정 특수문자를 사용 못하게 치환하였다. 내가 SQL Injection에 사용하는 문자열들은 or, LENGTH(pw)=, SUBSTR(PW, 1, 1)=이 있다. 필터링에 걸리는 것은 or, SUBSTR(, =이 걸린다. 이것을 우회하려면 ||, LIKE로 우회가 가능하다. 하지만 SUBSTR 함수는 우회 방법이 없어서 다른 함수를 사용해야할 것 같았다. 일단 pw의 길이를 구해보겠다. Orc 문제처럼 admin의 pw가 여러 개는 아닌 듯 하다. admin의 pw 길이는 8개이며, gu..
2021.07.18 -
이번엔 좀 특이한 쿼리문이 나왔다. 내 생각에는 만약 where절의 pw에 ' or id='admin'를 삽입하여 select id from prob_skeleton where id=‘guest’ and pw=‘’ or id=‘admin’ and 1=0와 같은 쿼리를 만들었을 때, id='admin' and 1=0을 False (True and False)로 만들어줘서 작동이 안되겠끔하기 위해서 맨 뒤에 and 1=0를 넣은 듯 하다. 하지만 우리에겐 주석처리라는 방법이 있다! 위와 같이 and 1=0을 주석처리를 하면 True만 남게 됨으로 쿼리문의 결과는 admin을 반환하게 된다.
[Lord of SQLInjection] Skeleton Write UP이번엔 좀 특이한 쿼리문이 나왔다. 내 생각에는 만약 where절의 pw에 ' or id='admin'를 삽입하여 select id from prob_skeleton where id=‘guest’ and pw=‘’ or id=‘admin’ and 1=0와 같은 쿼리를 만들었을 때, id='admin' and 1=0을 False (True and False)로 만들어줘서 작동이 안되겠끔하기 위해서 맨 뒤에 and 1=0를 넣은 듯 하다. 하지만 우리에겐 주석처리라는 방법이 있다! 위와 같이 and 1=0을 주석처리를 하면 True만 남게 됨으로 쿼리문의 결과는 admin을 반환하게 된다.
2021.07.18 -
이번 문제는 '를 필터링하고 있으며, id 파라미터의 값을 소문자로 만들어서 만약 값이 admin이 있으면 replace 함수를 이용하여 지우는 알고니즘을 갖고 있다. 나는 '의 필터링과 admin의 replace를 우회하기 위해 Hex 값을 사용하는 것을 생각했지만, where절의 id가 ''으로 묶어져 있기 때문에 통하지 않는다. 그래서 나는 Xss 공격을 방어하기 위한 replace 함수를 우회하는 방법 중 하나인 를 이용하기로 하였다. adadminmin을 넣어줘서 ad admin min으로 replace처리가 되어 지워지면 값은 admin이 되기 때문에 간단하게 쿼리의 결과를 admin를 반환받을 수 있었다.
[Lord of SQLInjection] Vampire Write UP이번 문제는 '를 필터링하고 있으며, id 파라미터의 값을 소문자로 만들어서 만약 값이 admin이 있으면 replace 함수를 이용하여 지우는 알고니즘을 갖고 있다. 나는 '의 필터링과 admin의 replace를 우회하기 위해 Hex 값을 사용하는 것을 생각했지만, where절의 id가 ''으로 묶어져 있기 때문에 통하지 않는다. 그래서 나는 Xss 공격을 방어하기 위한 replace 함수를 우회하는 방법 중 하나인 를 이용하기로 하였다. adadminmin을 넣어줘서 ad admin min으로 replace처리가 되어 지워지면 값은 admin이 되기 때문에 간단하게 쿼리의 결과를 admin를 반환받을 수 있었다.
2021.07.18