Los
-
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 을 입력하면 라는 ..
-
LOS 20 - dragon Write Up (sql문 개행하기)CTF/Web 2020. 3. 27. 20:00
이건 뭐 대놓고 미리 주석처리를 해서 우리에게 절망을 주려는 쿼리문이다. 우리가 pw에 어떠한 값을 주더라도 이미 주석처리 되서 동작하지 않을 것이다. 이럴때는 우리가 개행을 해주면 어떨까? 공백우회에서 쓴 %0a는 사실 개행의 역할을 한다. 즉 개행이 없이 우리가 값을 넣어주면 select id from prob_dragon where id='guest'# and pw='입력값' 이되지만 %0a를 통해서 개행을 시켜주면 select id from prob_dragon where id='guset'# and pw='%0a
-
LOS 18 -nightmare Write up (sql injection ;%00주석 활용)CTF/Web 2020. 3. 26. 18:59
나에게 악몽같았던 문제이다. 글자수 제안을 걸어버렸다. 하필이면 pw가 ''가 아닌 ('')여서 더 골치아파 졌다. 일단 주석을 해야하는데 #을 막아놔서 2글자 주석만 된다. 우리는 샾 말고도 ;%00이라는 주석을 활용해야한다. 이렇게 쿼리를 만들어주고 남은 글자는 단 두글자 처음엔 or을 써야하나 해서 굉장히 머리가 아팠었다. 고심끝에 pw 자체 값과 무언가를 비교해서 참을 만들어주면 어떨까? 라는 생각이 들었다. 1과 0을 이용해보기로 했다. =0 혹은
-
LOS 17 - zombie_assassin Write UpCTF/Web 2020. 3. 25. 18:25
strrev(addslashes($_GET['id'])); strrev(addslashes($_GET['pw'])); strrev와 addslashes가 적용되어 있다. 임의의 값을 넣어보면 그 의미를 알 수 있다. strrev로 인하여 입력한 값이 거꾸로 들어간다. ?id=abcd를 입력해보았다. 이것을 이용해서 addslashes 함수를 우회할 수 있는 기회가 된다. \와 '를 잘 활용해야한다. 원래라면 addslashes로 인하여 ' 가 \'로 바뀌는데 이것이 리버스 되면서 '\로 바뀌게 된다. 이런 원리를 이용해서 더블 쿼터를 사용해서 \를 한개 추가함으로써 id의 마지막 싱글 쿼터를 문자처리 시켜주었다. 굉장히 알쏭달쏭하게 풀게 만든 문제였다.
-
LOS - 16 Succubus Write Up [ '(싱글쿼터) 필터링 우회, \(역슬래쉬) 활용 방법]CTF/Web 2020. 3. 24. 16:58
sql injection의 생명과도 같은 '(싱글쿼터)가 필터링 되어 있다. 이런 경우에는 id 파라미터에서 먼저 작업을 해주어야 한다. 그건은 바로 escape문자인 '\' 역슬러시를 사용하는 것이다. '\'를 사용하면 역슬러시 다음에 오는 문자가 문자형으로 쓰이는 특수문자라는 것을 알려준다. 이러한 특징을 이용하여 기존에 적혀있는 싱글 쿼터를 살려서 풀어햐 하는 문제이다. 자세한 설명으로 보자면 빨간색 네모를 '(싱글쿼터)로 감싸고 있는 구조가 된다. id='빨간 네모' '(싱글 쿼터 하나가 남는다.) 이렇게 된 이유는 id 입력값을 닫아주는 싱글쿼터를 이스케이프 문자를 이용하여 텍스트 문자로 변환되어 제기능을 상실한 것이다. 그래서 pw의 입력값을 여는 싱글쿼터가 본의아니게 id의 값을 닫는 싱글쿼..
-
LOS 13 - bugbear Write Up (blind sql injection)CTF/Web 2020. 3. 21. 03:27
필터링을 먼저 확인해보면 싱글쿼터, substr, ascii, =, or, and,' ', like, 0x 정말 많은 것들을 사용하지 못하게 되었다. 이럴 때 우리는 어떻게 해야할까? 사실 저번 단계에서 한 것과 큰 차이는 없다. import requests url = "https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?" headers = {"cookie":"PHPSESSID=qdc234242342"} pw ='' for i in range(1,9): for c in range(22,133): query = "no=6||no%0ain%0a(2)%26%26mid(pw,{},1)%0ain%0a(%22{}%22)%23".form..