WEB/Lord of SQLinjection (37) 썸네일형 리스트형 [LOS] step39. poltergeist 풀이 온전히 내 힘으로 풀 수 있었는데.. 아쉽다.. 문제는 다음과 같다. 일단 앞선 문제들과 동일하게 Hello admin을 띄워서 blind injection을 시도하는 것 같아 보였다. 1차적으론. 그런데 빨간 박스 친 부분을 보면 flag값이 member table에 없다. -> 즉, 다른 테이블에 있는 정보를 끌고 와야 한다. 가장 먼저, pw를 우회하였다. pw = ' ' or 1=1 -- ' Hello guest 우리는 admin을 찾아야 한다. 1=1 이 들어가는 조건에 id = admin 조건을 넣어주면 Hello admin 메시지를 볼 수 있다. 우리는 flag가 있는 다른 테이블의 이름을 가장 먼저 파악해야 한다. flag_ 로 시작하는 힌트를 받았으니 like '%' 를 통해 찾아낼 수 .. [LOS] step38. BANSHEE 풀이 이번 문제도 똑같이 sqlite를 해결하는 문제이다. 코드를 자세히 보면 " login success! "를 통해 로그인은 우회하되, 아마도 이 응답을 통해 blind injection을 하겠다는 생각을 1차적으로 먼저 하게 되었다. 일단 pw를 알아야 로그인이 되므로, pw를 한글자씩 알아내야 한다. 가장 기본적인 pw = ' ' or 1=1 -- 로 우회를 시도했더니 우회 성공! 그러면 이제 or 뒤에 조건문과 참/ 거짓을 판별할 수 있는 공격 쿼리를 넣어주자. 처음에 이런식으로 넣어줬다. ( id = 'admin' and pw =' ' ) 거짓 or (1=1) 참 and ( length(pw)=5 ) 참?거짓?몰라 일단, 쿼리문에서 and가 or보다 높은 우선순위를 따지므로.. 만약 length(p.. [LOS] step37. manticore 풀이 이번 문제 역시 sqlite 에 관해서 문제를 해결해야 한다. 코드를 보면 이전 문제들과 다르게 addslash 함수가 추가되었다. 그래서 특정값이 들어가면 \ (slash)를 추가하게 된다. 정석대로,, id = admin' -- 를 시도하였으나, 들어가는 싱글쿼터 앞에 \ 가 추가된다. 아마도 싱글쿼터를 입력하면 자동으로 \를 붙이는 것 같다. 하지만 이상하게도? admin' 만 입력하면 기존 코드들이 보이지 않는다 ? => 즉, 비정상 실행, 쿼리문이 동작하지 않는다.. 이게 이해가 되지 않아서 테스트 사이트에서 sqlite를 테스트해봤다. https://sqliteonline.com/ SQL Online Compiler - Next gen SQL Editor Chart for Data Scienc.. [LOS] step36. chupacabra 풀이 이번 문제는 뭘까.. select id 로 id값을 db에서 가져오라는 것 같은데... 소스코드를 보던 중, 조금 다른 점이 있다면 sqlite_open 이라는 함수를 써서 데이터베이스를 열고 있다. 저 함수의 용도가 정확히 뭐든지 간에 sqlite와 관련되어 있을 것으로 보인다. 가장 기본이 되는 SQLi 공격 구문을 넣어보자. id = 'admin' # 주석처리를 했음에도 아무런 공격이 성공하지 않는다 또 다른, 대표적인 주석 기호를 넣었더니 문제가 매우 간단히 풀렸다.!! [LOS] step35. cyclops 풀이 이번 문제 역시, 33 34번 문제를 풀었으면 그것을 이용하는 것이 좋다. ModSecurity 방화벽을 우회하는 것이 핵심이다. 단, 이전 문제들과 다르게 union select도 우회해야 한다. 문제를 보면 id값에는 first가, pw값에는 second 값이 들어와야 한다. LOS 문제 구조상 2개의 필드가 있을 것이며, 1번 필드는 ID , 2번 필드는 PW가 있을 것이다. union select를 통해 각각 값을 추가하도록 만들면 된다. 위에 예시처럼 기존에는 값이 없지만 union select를 통해 행을 추가해줄 수 있다. *union select 문을 쿼리로 사용할 때는 and로 연결하지 않는다! (괜히 and 썼다가 시간만 쓰고 ;; 안 풀렸..) 이전에 필터링을 우회한 구문 [LOS] step34. godzilla 풀이 이전 33번과 동일하게 방화벽을 우회하는 문제이다. 무난하게 페이로드를 작성하고 던지면, 다음과 같이 Forbidden 에러를 확인할 수 있다. 이전에 배운 방화벽 우회 payload를 사용해보자. - { a 1 } (true) - 문자 print("password : ", pw) break return pw pw_real(pw_len()) 성공... [LOS] step33. cthulhu풀이 이번 문제는 방화벽을 우회하는 문제이다. 기본적인 필터링은 admin 문자열만 필터링하고 있다. 어쨌든 전달되는 파라미터 id값만 방화벽에서 필터링되지 않고 넘어가면 된다. payload: ?id=1234' or 1=1 # 가장 기본적인 sql injection payload를 넣어주면 forbidden 으로 WAF에서 걸린다. 이번에 방화벽을 우회하는 payload에 대해 배웠다. - { a 1 } (true) - [LOS] step32. alien풀이 ## 조건 ## 1) query 2개 존재 → 1개의 요청으로 2개의 쿼리 동작시키기 2) 필터링 대상 : admin and or if coalesce case _ prob time 입력값 no에 대한 특이한 조건사항이 있다 1) query1 admin이어야 한다. 2) query1 admin이 아니어야 한다. 3) query2 admin이 아니어야 한다. 4) query2 admin이어야 한다. 조건 1에 맞추기 위해서 위 조건사항을 조금 바꿔서 살펴보면 아래와 같다. admin → admin X → admin X → admin 어려워서 다른 풀이를 조금 참고해서 보니.. 시간차 공격을 해야 하는 것 같다. 그래서 time을 필터링하기에 시간지연 함수가 필요하다. → sleep()과 같은.. 일단, 1.. 이전 1 2 3 4 5 다음