본문 바로가기
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 - 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.
LORD OF SQLINJECTION - vampire ▶ 코드 확인 작은 따옴표를 쓰게 되면 상단의 필터링에 걸리게 된다. 따라서 작은 따옴표 없이 풀어야함을 생각해볼 수 있다. strtolower을 사용하여, 전부 소문자로 교체해주기에, Lv. troll 과 같은 방법으로는 우회할 수 없다. 하단의 필터링을 자세히보면, admin이라는 단어가 있으면 없애버리고 출력함을 알 수가 있다. exit(); , die(); 는 없으니, admin이라는 단어만 빼고 코드실행은 계속됨은 쉽게 알 수 있다. SQL Injection WAF bypass 글에서 (3)에서 정리했다시피, 특정 단어를 빼는 경우는 해당 단어를 중간에 삽입하는 식으로 우회할 수 있다. ▶ 풀이 select id from prob_vampire where id='aadmindmin' select.. 2022. 11. 29.