본문 바로가기

보안공부

(87)
Lord of SQLInjection Darkknight 풀이 이번에는 대놓고 no를 통해 침투해달라고 코드에 나와있다. 이번에는 다음과 같이 치환하였다. 필터링되는 단어 치환 작은 따옴표(') 0x로 시작하는 Hex값 substr mid ascii 사용 안함 = like 위 치환 테이블을 코드에 적용하였다. ...더보기 import requests import binascii URL = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php" Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'} ConfirmKey = "Hello admin" Dict = '0123456789qwertyuiopasdfghjklzxcvbnm' length = 0 p..
Lord of SQLInjection Golem 풀이 admin으로 로그인해야하는데 기존에 사용하던 substr, = 등의 연산자 또는 함수들을 필터링하는 코드들이 추가됐음을 확인할 수 있었다. 하지만 substr는 mid로, =는 like로, 비슷한 기능을 하는 대체제를 사용할 수 있었다. 필터링되는 단어 대체제 substr() mid() = like or || and && Orc 문제에서 사용한 코드를 기반하여 위 테이블과 같이 치환하여 다음과 같은 코드를 완성할 수 있었다. ...더보기 import requests URL = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'} Conf..
Lord of SQLInjection Skeleton 풀이 admin으로 로그인해야하는데 1=0이라는 조건때문에 무슨값을 입력해도 무조건 false라는 결과가 나오도록 되어있다. 하지만 pw값이 저 조건의 앞에 들어가니 만사 OK~ pw에 값을 넣지 않고 id를 admin으로 만들어주는 값(' or id='admin' -- ')을 삽입하여 풀어주면 풀린다.
Lord of SQLInjection Vampire 풀이 뭐 당연히 admin으로 로그인해야한다. 하지만 입력값을 모두 소문자로 바꾸고 admin을 없애는 코드가 있다. 하지만 저것쯤이야 adadminmin처럼 써주면 우회가 가능하다. Clear~
Lord of SQLInjection Troll 풀이 코드를 한번 훑어보았다. admin으로 로그인되면 되지만 admin이 필터링되어 입력할 수 없다. 하지만 여기서 preg_match 정규식에 /i가 없는것이 눈에 띄었다. PHP상에서 대소문자 구별을 안하고, SQL은 원래 대소문자 구별을 안하니 대문자가 포함되어 있으면 문제를 풀 수 있다는 가정을 할 수 있다. 따라서 a 한글자만 대문자로 바꿔 입력해보았더니 풀렸다.
Lord of SQLInjection Orge 풀이 문제의 목표 자체는 Darkelf 문제와 같으나, 이번에는 비밀번호가 admin의 비밀번호와 같아야 한다. 비밀번호를 받아오는 로직(글자수 체크 -> 한자리 한자리 비교하여 비밀번호 추출)이 같으므로 뭔가 Orc 문제에서 사용했던 코드를 재활용할 수 있을것 같다는 생각이 들었다. 그래서 주소와 OR, 그리고 AND만을 변경하였다. OR -> || AND -> && 이렇게 코드를 동작했더니 예상대로 비밀번호를 추출하는데 성공했다. 이 비밀번호로 인증하니 풀렸다.
Lord of SQLInjection Darkelf 풀이 뭐 이젠 당연하다. admin으로 로그인하는것이다. pw에 SQL 구문을 삽입해야한다. 하지만 or과 and가 필터링되어 포함되어 있으면 HeHe가 뜨는 페이지로 이동하게 된다. 하지만 SQL은 or은 || 와 같고, and는 && 와 같이 동작할 수 있으므로 이를 활용하여 구문을 작성하면 ' || id='admin' -- '가 된다. 가볍게 Clear~
Lord of SQLInjection Wolfman 풀이 이 문제의 목표는 admin으로 로그인하는것이다. 뭐 당연하겠거니 하고 ' or id='admin' -- '를 입력하게 되면 공백(Whitespace) 필터링때문에 걸리게 된다. Whitespace 필터링을 우회하기 위해서는 Line Feed(다음줄로), 즉 %0a를 사용하면 된다. 그럼 우리가 삽입할 SQL 구문은 '%0aor%0aid='admin'%0a--%0a'가 된다. 위 구문을 pw에 삽입하면 문제가 풀린다.