SQL Injection
-
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 15 - assassin Write up (sql injection like 활용)CTF/Web 2020. 3. 23. 18:39
admin의 pw를 가져와야하는 문제이다. 우선 like가 어떤 녀석인지부터 알아야한다. like는 뒤에 오는 ''안에 들어가는 녀석과 같은 것을 가져오는 문법이다. 가령 현재 예로 보면 admin의 pw가 pass라면 where pw like 'pass' 라는 문법에서 like 뒤에 pass와 어드민의 pw에 있는 pass가 일치하기에 참이되는 형식이다. 그런데 여기서 중요한 점은 like는 와일드마스크가 존재 한다. 바로 '%'와 '_'다. '_'는 한개의 글자에 해당하며 '%'는 0~다수의 글자가 해당한다. 우리가 보통 쓰는 와일드마스크 '*'와 '?'와 유사하기에 원리는 넘어가겠다. 아무튼 그리하여 like '%'를 해보았다. guest가 잡혔다. 그 이유는 '%'만 집어넣으면 모든 경우에서 참이..
-
LOS 12 - (darknight) Write Up (blind sql injection/substr, ascii, = 필터링 우회 및 like, in, mid 사용)CTF/Web 2020. 3. 20. 02:49
substr과 ascii, '=', '(싱글쿼터)이 필터링 되어 있다. 싱글쿼터는 사실상 더블쿼터를 사용하면 된다. (이 문제에선 따옴표를 사용할 필요가 없어서 쓰이진 않았다.) 그 이외의 필터링은 전 단계와 동일하다. import requests url ="https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?" headers = {"cookie":"PHPSESSID=qadsf"} pw = '' for i in range(1,9): for c in range(22,133): query ="pw=&no=9||no like 2 and ord(mid(pw,{},1)) in ({})%23".format(i,c) #여기서 no의 ..