본문 바로가기

Lord Of Sql injection

(20)
LOS 20번 DRAGON 요번 문제는 애초에 주석이 달려있던 문제... 생각보다 쉬웠는데 삽질을 많이 했네 :) 처음에는 NULL BYTE가지고 우회하려다 아무리 생각해도 뒤에 쿼리문을 작성할 수 없어서 한참동안 고민하다가 계속 Mysql 서버로 테스트해보던 중 내가 왜 이걸 놓치고 있었지? 라는 생각이 든다. 그 테스트는 바로 아래와 같다. 습관적으로 한줄로 쿼리문을 작성하다가 주석때문에 세미콜론이 씹혀서 프롬포트가 떨어지고 나서 다시 세미콜론을 치고 명령어를 실행시켰는데... 답이 앞에 있었네.. 주석은 총 3가지가 있는데 1가지(/* something */)을 제외한 2가지 ( #, --)는 해당하는 줄만 주석 처리를 한다. 아이고.. 그래서 아래와 같이 쿼리문 작성 후 클리어! pw=''뒤에 공백은 %20(space)가 ..
LOS 19번 XAVIS 기존 블라인드 인젝션 코드를 실행 시켜보니 모든 경우에서 참이 리턴되는데, 정상적인 코드인데 불구하고 이러는 것을 보면 왠지 패스워드가 ASCII가 아닌 utf8 등등일 것 같은데... 삽질중. CHAR_LENGTH 쓰려니 언더바 필터걸리네 생각을 달리해서 CHAR 함수를 이용해서 힌트를 얻고자 했다. ASCII를 제외한 유니코드 등을 이용하면 CHAR 함수 사용시 1바이트가 리턴되는 것이아닌 캐릭터셋에 맞는 바이트가 리턴될것이라고 생각 (utf8이던 ASCII이던 CHAR함수가 1바이트씩 읽는 함수라면 그냥 기존 범위를 0x20 - 0x7f가 아닌 0x00 - 0xff로 해서 비교하면 되니 그것도 그것대로 작동할 것이라고 생각했으나, 정상적으로 동작하지 않는 것 같아 위와같이 유추 하였음) 따라서 해보..
LOS 18번 NIGHTMARE 푸는데 생각보다 오래걸렸던 문제네요 :) 6자 이내로 pw의 조건을 참으로 바꾸고 뒤에 and id!='admin'을 우회해야 하는 문제입니다. 6자 이내가 아니였다면 조금더 쉬웠을 것 같은데.. or 1 만 생각하는 사고에 갇혀서 조금 헤맸네요 :) mysql 서버를 구축하여 이래저래 해보다가 pw=('')의 값이 리턴 값의 형태일 것이라고 유추하여 연산자를 이용해서 비교해보니 참이 아닐때는 0값을 리턴하더라구요 :) 그래서 pw=('')=0과 같이 and 이전의 값을 true로 셋팅해주었습니다. 그리고 이제 뒤의 and를 주석처리해야해야하는데 # (%23)이나 --가 필터링 되어있습니다. mysql에서 테스트 하던 도중 세미콜론을 이용하여 문장의 끝을 가르킨다는 것에 착안하여 ';'를 해봤지만 실패...
LOS 17번 SUCCUBUS
LOS 16번 ZOMEBIE_ASSASSINE 이번 문제는 ereg취약점을 이용한 우회가 핵심인 문제입니다. php코드를 보는데 ereg만 따로 저렇게 처리되어있는 부분이 의문이여서 구글링을 해보니 취약점이 있더라구요! 취약점은 맨처음이 null byte로 시작할 경우 문자열의 끝으로 처리하여 그 이후부분은 filter를 하지 않는 취약점이 있네요. 따라서 아래처럼 쿼리문을 작성하면 됩니다! 다만 쿼리문 작성시 %00을 앞에 넣어 취약점 공략을 해주셔야 해요!
LOS 15번 ASSASSIN 이번 문제는 LIKE를 이용한 문제네요! LIKE는 = 과는 다르게 와일드카드를 이용할 수 있다는 점이 있습니다. 따라서 저는 패턴 검색을통해 x* xx*과 같이 맞는 패턴을 하나씩 찾아 나가기로 했어요. LIKE에서는 %을 붙이면 와일드카드 *와 같은 효과를 나타냅니다. 그래서 저는 Python을 이용해 코딩을 했습니다. 이때 Guest와 Admin이외에 계정은 없다고 먼저 산정하고 코드를 짰는데 운좋게 걸려든 것 같네요. 추후 시간이 된다면 탐색 알고리즘을 생각해서 다시 짜보고 싶은 문제였습니다 :) from bs4 import BeautifulSoup import requests def login(id, pw): url = 'https://los.rubiya.kr/?login' data = {'id..
LOS 14번 GIANT 이번 문제는 띠용...입니다. 볼게요! 특이하게 from뒤에 저희가 shit에 준 값이 붙는군요. 그리고 그건 길이가 1이넘지 않아야합니다. 우리는 개행을 할 수 있는 뭔가를 찾아야하고, 찾을겁니다. 그래서 ASCII코드표를 보려했으나 귀찮음이 발동해서.. 어차피 ASCII코드중 하나이겠지 싶어 brote force를 돌려봤습니다 하하하하하 from bs4 import BeautifulSoup import requests def login(id, pw): url = 'https://los.rubiya.kr/?login' data = {'id': id, 'pw': pw} res = requests.post(url, data=data) if res.status_code != 200: print('Please..
LOS 13번 BUGBEAR 갈수록 문제가 괴랄해지는 느낌..! 이번엔 White space뿐만 아니라 LIKE도 막혔네요... 대체제를 찾아봐야겠어요.. id가 admin인걸 찾아야하는데 LIKE도 안되고 =는 물론 '도 되지 않기 때문에 https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html 여기서 쓸만한 친구가 있나 찾아봤습니다. 그래서 in을 사용하기로 했어요! 그리고 whitespace를 이용해 구분을 해야하는데.. 왠지 ()를 이용해 감싸면 될 것 같은 느낌이라 해줬는데 잘 동작하네요! 따라서 아래와 같이 pwning_url을 작성했습니다 :) 그리고... 소스코드 재탕좀 해먹으려했더니 또 고쳐야겠네요. 2019/01/12 - [Lord Of Sql injec..