-
Crackus 6 Write Up (Sql Injection)CTF/Web 2020. 4. 9. 17:22
preg_match를 보면 적어도 내가 아는 주석은 다 막혀있다. 그렇다면 마지막 파라미터인 pw 값을 활용해주어야한다. 현재 sha1('')로 sha1 암호화를 진행하고 있는 것을 볼 수 있다. 그렇다면 pw=')를 하면 어떨까? 어떻게 풀어야 할지 감이 오기 시작할 것이다. 이제 그 뒤에 값을 넣어보면 필자가 무슨말을 하고싶은지 눈치챌것이다. 라는 값을 넣어보았다. pw=sha1('') 후에 입력값을 넣어줄 수 있다. ?pw=')||1=1 을 입력해보면 이렇게 된다. 우리는 주석을 사용할 수 없음으로 1')를 활용해야 할 것 같다. 모양을 맞춰주면 어떨까? 이런식으로 참고로 '1' 과 1을 비교하게 되면 참으로 입력이 된다. 그 이유는 나중에 다루려고 한다.
-
Crackus 5 Write Up (hex값을 이용한 Sql Injection)CTF/Web 2020. 4. 9. 02:34
if문을 보면 id값에 'admin'이 들어가야하는데 preg_match에 'admin'이 필터링 되어 있다. 우리는 이 필터링을 어떻게 우회해야할까? 여러 방법이 있는데 여기선 hex값을 이용한 방법을 한번 살펴보겠다. Hex값을 이용 id 쿼리에 아스키말고 hex값을 넣어 줄수도 있다. 다만 0x라는 표현을 적어주어 16진수인 것을 명시해주어야한다. admin의 헥스값은 0x61646D696E이다. 사용방법은 ?id=0x61646D696E 이다. 여기서 중요한 점은 싱글쿼터로 감싸지면 안된다는 점이다. 그냥 url에 이렇게만 적으면 웹페이지 코드를 보면 싱글쿼터로 감싸져 있는데 이 때문에 헥스값이 텍스트로 들어가버리게 된다. 그러므로 이 쿼리 말고 임의의 새로운 id 파라미터를 조작해주어야한다. #도..
-
Crackus 4 Write Up (', "/ 싱글쿼터, 더블쿼터 필터링 우회, 역슬래시를 사용 sql injection)CTF/Web 2020. 4. 5. 20:59
이번 문제는 상당히 난이도가 있는 문제이다. 바로 싱글쿼터, 더블쿼터 필터링을 우회할줄 알아야만 풀리는 문제이다. 이럴때는 '\' 이 역슬래시를 통해서 기존의 쓰인 싱글쿼터를 살려야한다. 자세한 개념은 지난번 Los문제에서 설명했었다. 2020/03/24 - [CTF/Web] - LOS - 16 Succubus Write Up (' 필터링 우회, \ 활용 방법) 이렇게하면 풀리게 된다. \'and pw=가 id 값으로 들어가기 때문이다.
-
Crackus 3 Write Up (Sql Injection and, or 필터링 우회 기법/'&','|')CTF/Web 2020. 4. 3. 20:49
'or' 와 'and'가 필터링 되었다. 이럴때는 연산 기호를 이용해 주면 좋다. 그건 바로 '&'(and)와 '|'(or)이다. 다만 이 연산기호를 사용할 때에는 두번 입력해주어야 한다는 특징이 있다. 이렇게 or을 '||'로 대신하여 사용하였다. 장점이 있다면 이러한 특수문자를 사용하면 띄어쓰기가 필요하지 않다는 것이다. 이 장점은 무시못할 장점으로 다른 문제에서 쓰일 때가 많으니 참고하면 좋다.
-
Crackus 1 WriteUp (Sql Injection)CTF/Web 2020. 4. 2. 02:47
1단계는 심플하다. 막혀있는 구문이 없으므로 자유롭게 우회를 해서 풀어주면 된다. 하지만 1번 문제를 검색해서 오셨다는 것은 이제 막 sql injection 문제를 접하기 시작하신 분들일 것이다. 그런 분들을 위해 간단히 설명하자면 1은 bool 타입에서 true로 사용된다. 그래서 id='' or(||) 1 이라고 하면 거짓 혹은 참 이라는 where 절이 되고 '#' 은 mysql에서 주석 역할을 하여 {and pw=''} 쪽은 주석처리가 된다. 결론적으론 거짓 혹은 참일때 id 값을 가져오라는 쿼리문이 되고 데이터를 읽어올 때 where절에 있는 1이 참임으로 데이터를 가져오게 된다. 그래서 result에 데이터가 실려서 1단계 문제가 풀리게 되는 것이다.
-
LOS 22 - dark_eyes Write up (union select를 이용한 에러 기반 blind sql injection, if문 필터링 우회)CTF/Web 2020. 4. 1. 03:15
이번 문제도 에러 기반의 문제이다. 하지만 저번 문제에서 쓴 if문이 막혀버렸다. 이럴 때는 union select를 사용하면 된다. union select 는 어떤 원리로 이용 할 수 있을까? 우선 기존 union select 를 통한 우회방법을 인지하고서 풀 수 있는 문제이다. 그점은 이번 라업에선 넘어가도록 하겠다. 간단히 짚고 넘어가면 select 1을 하면 필드에 1이 들어간다. 그런데 여기에 union select를 하면 어떻게 될까? 1뒤에 3이 밑에 들어간다. 이걸 어떤식으로 이용하는 걸까? 그건 바로 2줄이라는 특징을 이용하는 것이다. 우선 우리가 푸는 Los 문제는 sql문을 읽고 가져오는 데이터가 1줄이다. 하지만 우리가 2줄의 결과값을 억지로 넣어서 가져오게 한다면 어떻게 될까? ?..
-
LOS 21 - iron_golem Write Up (Error Based Blind Sql Injection)CTF/Web 2020. 3. 31. 03:44
이번 문제를 보면 if(mysqli_error($db)) exit(mysqli_error($db)); 라고 적힌 새로운 문장을 볼수 있다. 이 문장의 뜻은 에러가 발생시 에러페이지 처리를 하겠다는 뜻이다. 우리는 어떤식으로 에러를 일으킬 수 있을까? syntax error ?pw='asdf 라는 문법적 오류를 터트려보았다. 'asdf' 근처에서 syntax 에러가 뜬 것을 확인 할 수가 있다. Logical error logical error를 이용하는 방법도 있다. 그것은 숫자를 특정 범위 이상으로 터트리는 것이다. 가장 대표적으로 9e307*2 라는 숫자를 사용하면 logical error가 뜬다. 허용하는 숫자 범위가 아니기 때문이다. 가령 ?pw=' ||( 9e307*2)%23 을 입력하면 라는 ..