다른 테이블을 이용하는 내용이 다시 나왔다. 지난 문제에서는 Error Based SQL Injection 을 이용하여 table 명과 pw를 leak 하였다. 이번에는 Error Based 는 아니지만 echo 명령어가 있기 때문에 이를 이용하여 table 명과 pw를 leak 할 수 있을 것 같다. 그리고 'sys' 라는 문자열이 필터링에서 빠졌다. mssql 에서는 information_schema 말고도 sysobjects 라는 메타데이터를 이용할 수 있다. 테이블의 이름에 해당하는 column은 'name' 이다. 우선 바로 query를 보내보자. sysobjects where type='TYPE' 과 같은 형식으로 사용한다. 주요한 [TYPE]에는 다음들이 있다. - FN SQL 스칼라 함수 ..
mongo db 환경에 대한 문제이다. mongo db 는 NoSQL로 분류된다고 한다. NoSQL Injection 에서 많이 쓰이는 연산자들을 정리해보았다. - $ne : != - $lt : - $lte : = - ' : ' : 비교 연산자, 콜론을 기준으로 비교 우선 단순하게 기존에 쓰는 방식으로 주석을 사용하여 query 를 참으로 만들어보자. id=admin"}%23 오. NoSQL 에서는 addslashes 함수가 자동적으로 적용되는 것 같다. 더블쿼터를 이용하여 pw 단을 무효화하는 작업은 안 될 것 같다. 앞서 연산자를 정리했으니 연산자를 사용해보자. pw를 알 길이 존재하지 않는다. 따라서 '같지 않다'를 나타내는 '$ne' 연산자를 사용하자. NoSQL 에서는 column 명 뒤에 연산..
'waitfor' 이라는 문자열의 필터링이 사라졌다. Time Based SQL Injection 을 수행하면 될 것 같다. MSSQL 에서는 sleep 함수 대신에 waitfor dealy 문을 사용한다고 한다. pw=' or id='admin' and iif(len(pw)>0,waitfor delay '00:00:02',1)-- waitfor delay 는 명령어이기 때문에 iif 조건문에 들어가지 않는 것 같다. 일반 if 조건문으로 exploit 코드를 짜면 될 것 같다. import requests import time requests.packages.urllib3.disable_warnings() org_url = "https://los.rubiya.kr/chall/yeti_e6afc70b89..
필터링에서 괄호와 슬래시를 사용하지 못하게 막아놨다. 또한 query 에서 0x01 ~ 0x20 값이 인식되면 exit 된다. 이번에는 신기하게 query 전체를 내가 구성할 수 있게 되었다. 공백을 우회하는 문제와 Blind SQL Injection 문제가 융합된 형식인 것 같다. $result[0] 이 무슨 의미인지 궁금해서 sqlsrv_fetch_array 함수의 return 값을 검색해 보았다. success 할 경우에는 나오는 데이터를 array 형식으로 return 하고, fail 한다면 NULL 값을 반환한다. query 자체를 참으로만 만들면 'Hello anonymous'라는 문자열이 출력된다. 간단한 문제인 것 같다. 앞선 문제에서 column 명이 특수문자를 포함하거나 숫자로 시작할 ..