LORD OF SQLINJECTION - red_dragon ▶ 코드 확인 참 고민하고 풀었지만, 예상외로 허무했던 문제. 핵심은 is_numeric 에 대한 이해인 것 같다. ▶ 풀이 처음에 내가 php 공식 홈페이지에서 읽은 is_numeric에 대한 설명은 다음과 같았다. 'Determines if the given variable is a number or a numeric string.' 주어진 변수가 numeric string인지 판단한단다. 아래 예시를 보면 좀 더 명확해진다. 여기서 생각한건 헥스값으로 no를 입력해서 개행시키고 숫자의 대소를 비교하는 식으로 풀이하는 줄 알았다. 그러나.. select id from prob_red_dragon where id=''||no>%23' and no=0x0a3939 와 같이 입력하면, 0x를 numeric.. 2023. 1. 25. LORD OF SQLINJECTION - green_dragon ▶ 코드 확인 핵심은 따옴표 필터링 우회와 UNION SELECT 문의 활용인 것 같다. 이런 경우는 따옴표를 역슬래시(\)로 무력화시켜서 사이의 쿼리문을 문자열로 만들어버려서 우회할 수 있다. ▶풀이 문제는 쿼리문 무력화 다음인데, admin을 id정보로 조회해도 뜨지 않는다. admin이라는 정보가 DB에 없다는 것을 예상해볼 수 있다. 이러한 경우, 두번 거쳐서 UNION SELECT payload로 admin정보를 넣어서 구성하면 된다. 글자수 제한이 넉넉한 것을 확인한 후, 다음과 같은 payload를 입력했다. https://los.rubiya.kr/chall/green_dragon_74d944f888fd3f9cf76e4e230e78c45b.php?id=\&pw=%20UNION%20SELECT.. 2023. 1. 22. LORD OF SQLINJECTION - bugbear ▶ 코드 확인 또 보는 Blind SQL Injection 문제이다. substr을 필터링하니 대신 쓸 함수가 필요하다. 저번과 같이 mid를 쓰면 될 것 같다. ascii가 필터링 됐지만, 이번에는 conv를 이용해서 풀어보려 한다. conv함수는 다른 진수의 숫자를 특정 진수로 변환하는 함수이다. 예를 들어 conv(22,8,10) 의 경우 8진법의 22를 10진법으로 고치는 역할을 한다. =와 like를 같이 필터링해버렸다. 이런 경우 REGEXP를 쓰면 된다. or 과 and를 필터링하긴 하지만, ||와 &&은 필터링하지 않으므로 쉽게 우회할 수 있다. 띄어쓰기 필터링이야 우회할 수 있는건 많다. %0a, %0b.... 그 중에서 %0b를 사용해서 우회 payload를 짜고 python 코드로 만.. 2023. 1. 18. LORD OF SQLINJECTION - darkknight ▶ 코드 확인 또 보는 Blind SQL Injection 문제이다. 마찬가지로 어떻게 풀지는 필터링한 문자를 보면 알 수 있다. blind SQL Injection의 핵심이라고 할 수 있는 substr와 ascii, =를 필터링하고 있다. Injector에 관한 글을 쓰면서 blind SQL Injector 보수공사(?)를 조금 해서 코드 구성이 조금 더 간결하게 바뀌으니 참고하길 바란다. 이진탐색 알고리즘은 귀찮아서 구현 못했지만, lpad를 사용하는 더 나은(개인적인 생각임) 방법을 터득했으니, 추후 해당 방식으로 고칠 예정이다. 어쨋든, 우회할 수 있는 쿼리문을 생각해보자. substr을 필터링하니 대신 쓸 함수가 필요하다. 여기서 등장하는 것이 mid인데, left, mid, right 이렇게 .. 2023. 1. 1. LORD OF SQLINJECTION - golem ▶ 코드 확인 오랜만에 보는 Blind SQL Injection 문제이다. 어떻게 풀지는 필터링한 문자를 보면 알 수 있다. and, or, substr 문자열이 필터링되어 있다. 또한, 등호(=)도 필터링 되어있다. and, or는 앞서 봤던 'ORGE'에서 &&와 ||로 우회하는 것을 봤고, 등호 필터링은 'like'로 우회할 수 있다. substr은 필터링되어 있기에, substring으로 쓸 수 있는지 확인해보니, substring은 또 필터링을 하지 않는다. Injector를 만드는데 Injector코드의 구조는 일전에 만들었던, ORGE 와 ORC의 코드구조와 크게 다르지 않다. 다음과 같은 쿼리문을 반복해서 입력한 뒤 값을 찾는다. select id from prob_golem where i.. 2022. 12. 5. LORD OF SQLINJECTION - Skeleton ▶ 코드 확인 좀 심각하게 쉬워져서 어이가 없는 문제였다. 뒤에 반드시 거짓인 1=0 가 있다. 간단히 id='guest and pw='' 와 1=0 사이에 or과 id='admin'을 넣고 id='admin' 혼자만 참이 되면 id='admin'에 해당하는 쿼리를 수행할 것임은 쉽게 생각할 수 있다. 또한, 주석처리 기호 필터링이 없으므로 #(%23)을 넣어서 1=0 부분을 날려서 id='admin'만 참이 되는 쿼리문을 구성할 수도 있다. ▶ 풀이 select id from prob_skeleton where id='admin and pw='' or id='admin' or '1'='1' and 1=0 select id from prob_skeleton where id='admin and pw='' .. 2022. 11. 30. 이전 1 2 3 다음