'분류 전체보기' 카테고리의 글 목록 (7 Page)
본문 바로가기

분류 전체보기

(161)
[LOS] step27. blue_dragon 풀이 아우 이번에도 addslashes 함수에 걸리는 것으로 보아 자동화코드 해서 pw를 모두 구해야한다.. 1) id와 pw에 모두 prob, _, . 필터링되어있다. 2) \ 와 ' 도 필터링 3) id=admin에 맞는 pw를 찾아야 한다. 뭔가 이전에 풀었던 문제들과 유사했는데.. 뭘까.. 차이점을 찾아보자 가장 큰 차이점은 일부러 에러를 발생해봤는데 예전에는 query문을 보여주지 않았는데, 이 문제는 query를 보여주고 no hack ~_~ 을 띄운다. 즉, 2번 필터링 조건들은 query가 정상적으로 동작한 후 응답값을 No hack 으로 바꿔버리는 것이다. 필터링 조건은 있지만 query는 정상적으로 동작한다. 그러면 싱글쿼터가 정상 작동을 하니 No Hack ~_~ 이 메시지를 띄우는 시간 ..
[LOS] step26. red_dragon 풀이 이전문제랑 비슷할 거 같았는데 뭐가 추가되고 필터링이 달라졌다 id 파라미터에는 prob _ . 까지 이고 싱글쿼터는 필터링 되지 않았다 그리고 길이 제한. 긴 payload는 쓰기 어려울 것 같다. 일단 문제를 풀기 위해서는 admin에 해당하는 no 값을 찾아야 하는 것 같다. 이것저것 해보기.. guest는 왜 없냐? no 1일 거란 안일한 생각.. admin은 있네. id = admin and no= ? 하려고 했으나.. 너무 길어서 and → || 변경해도 너무 길다고 필터링에 걸린다. 그래서 힌트를 조금 얻으니 굳이 id = admin이라는 조건이 필요없다 왜? 이미 쿼리에 id = admin이라는 조건이 있고 no 만 찾으면 된다. payload : id = ' ' || no >10 ' id..
[LOS] step25. green_dragon 풀이 어려워보인다.. 일단, id와 pw 파라미터에 prob, _ , . , ', " 모두 필터링된다.... 그럼 싱글쿼터 우회로 풀리는 단순한 게 아니라는 뜻.. 이전 문제들과 다른 점은 id 파라미터에 값이 들어오면 query2 가 또 보여진다는 것.. query2가 실행되고 그 query2에서의 id값이 admin이어야 풀리는 문제이다. 그럼 일단은 id가 유효하게 쿼리를 던져야 한다. 일단은 예전에 풀었던 문제처럼 \ 를 이용하는 것 같다 예전 payload와 거의 동일하게 했는데도 안 풀렸다.. id의 값 [ \' and pw=] 를 문자열로 만들고 id = '[~]' or 1=1 로 true 로 만들어도 소용이 없다. 아마도 id값이 이상해서 그런 거 같다. (id에 포함되어진 싱글쿼터는 \ 로 인..
[LOS] step24. evil_wizard 풀이 이 문제는 앞서 푼 23번 문제와 유사하다. 차이점은 단 1개, 시간지연함수들이 필터링 되는 것.. 이번에는 time-based를 쓰지 않고 문제를 풀어야 한다. 아마도 이전 문제에서 겪었던 시행착오처럼 응답값을 보고 판단해야 하는 것 같다. 이전 문제에서는 id 기준으로 정렬값 (admin이 첫번째)과 score 기준으로 정렬한 값(admin이 두번째)이 상이했다. 하지만 이번 문제에서는 이걸 사용할 수 없다. 왜냐면 둘다 정렬된 값이 둘다 admin이 첫번째가 되기 때문이다. 그러면 어떠한 응답 차이를 찾을 수 있을까 생각하다가... id를 기준으로 정렬하되, 오름차 / 내림차 순으로 차이를 두면 될 것 같았다 ASC, DESC 로 정렬 차이를 보였다. 이를 이용해보자! 시행착오 1) 이렇게 했더니 ..
[LOS] step23. hell_fire 풀이 이번 문제부터 조금 다르다. 이전에는 그냥 쿼리를 통해 hello admin 같은 문자열을 찾으면 되었지만, 이번에는 DB 테이블 자체를 보여주었다. 또, 예전과 동일하게 prob, proc, _ , . , union 필터링하고 있다. 이번에는 pw대신 email 을 직접 찾아야 한다. union을 막은 걸로 봐선 union injection은 할 수 없을 것 같다. 진단하면서 order by 절과 같이 정렬하는 부분에서 injection이 터지는 경우를 본 적이 있어서 딱 봐도 order by절 뒤에 (case when) 이나 (select)절을 넣는 것 같다. ?order=id 일단 간단하게 order 파라미터에 컬럼명을 넣었다. 그랬더니 id값 대로 정렬이 되었다. ?order=score 반대로 s..
[LOS] step22. dark_eyes 풀이 필터링되는 기준에 대해서 찾기 1) _ . prob 등 필터링 2) col , if , case when, sleep, benchmark 필터링 3) 에러시 에러 메시지 반환하지 않음 4) 슬래쉬가 붙기 때문에 / ~ / pw에 대한 실제 값을 알아야 해결되는 문제 저번 문제와 동일한 방식인 듯하다. 대신 특이점은 에러 메시지를 반환하지 않기에 error based injection이 아닌 것 같고.. if / case when 을 필터링하는 것으로 보아 if / case when 을 사용하지 않고 조건문을 사용해서 풀어야 하는 것 같다! 또, sleep / benchmark 와 같은 time based injection도 아니다. 천천히 풀어보자. pw = ' 만 입력하여 일부러 쿼리문에 에러를 발생하..
[LOS] step21. iron_golem 풀이 이번 LOS문제에서 역시 필터링을 먼저 확인하면 1) prob, _ , . 등 2) sleep, benchmark 와 같은 timebased 에서 사용되는 함수 3) addslashes() pw 입력시 양쪽에 / / 가 추가됨 보통 3번 때문에 문제 풀이할 때 pw값을 입력할 때마다 / / 들어가므로, pw에 공격구문을 넣어도 소용이 없어진다. 또한 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("iron_golem"); 로 인해 직접 pw값을 찾아야 한다. 아마도 blind injection을 사용할 것으로 보임.. 여기서 왜 sleep, benchmark 와 같은 timebased 에서 사용되는 함수를 필터링시켜놨는지는 나중에 알아보도록 하..
[LOS] step20. dragon 풀이 이번 문제는 보자마자 Hello guest로 고정이 되어있다. 쿼리문을 보면 id = 'guest' # 로 주석처리가 되어있어서 pw에 그 어떤 값을 넣어도 주석처리되어 실행되지 않았다. id = 'guest' # 을 어떻게 내가 바꿀 수 없기에 생각했던 방법이 개행을 통한 주석처리 우회였다. sql 테스트 페이지에서 개행을 시도해보았다. 비슷한 구조로 쿼리를 짰다. 일단, 우리는 위에 해결해야 하는 쿼리에서 id = guest가 아닌 id = admin인 결과가 필요하다. 이 테스트에서는 id = 1이 고정되어있는데, id = 2 결과를 출력해야 하는 셈이다. 그러면 id = 1 인 쿼리를 false로 만들고 or를 통해 id = 2 를 실행시켜야 한다. # 이하는 주황색으로 주석처리 되었지만, 그 뒤..