-
[2019 DIMI CTF Quals][WebHacking] simple sqliCTF write_up/기타 CTF 2019. 7. 15. 00:21
문제 URL에 들어가보면 다음과 같습니다.
소스를 확인해 보면 다음과 같습니다.
해당 문제는 SQL Injection 문제 이기 때문에 필터링 값을 먼저 확인 해야 합니다.
admin or = "공백" # ' _ where 이 필터링 되는 것을 확인 할수 있습니다.
쿼리문을 한번 확인해 보면 다음과 같습니다.
SELECT * FROM `users` WHERE `id` = trim('{$id}') AND `pw` = trim('{$pw}')
trim()함수는 양쪽끝 공백을 제거하는 함수입니다.
일단 아이디 비밀번호 페이로드를 먼저 작성하고 왜 그렇게 되는지 이야기 해보겠습니다.
아이디 : \
비밀번호 : )|| id like "ad" "min"-- - (공백을 Tab으로 대체)
일단 저는 필터링이 되어있는 문자들을 우회할수 있는 문자를 미리 지정해 둡니다.
admin => "ad" "min"
or => ||
= => like
"공백" => "Tab"
# => --
소스코드를 보면 우리는 id가 admin일때 Flag가 출력됩니다.
\(역슬래시)가 필터링이 안되어 있어서 다음과 같이 id값에 \ 를 넣어주면서 다음과 같은 쿼리문으로 바뀌게 됩니다.
\를 넣게 되면서 닫는 싱글쿼터가 문자로 변환되서 pw쪽의 여는 싱글쿼터가 id를 닫는 싱글쿼터의 역할을 하게 됩니다.
)|| 를 pw 처음에 넣는 이유는 trim( 의 여는 괄호가 있어서 그것을 닫고 or를 사용해 주는 것입니다.
그래서 결국에는 다음과 같이 쿼리문이 적용이 됩니다.
공백은 탭으로 바꿔서 입력을 넣어주시면 됩니다. 공백도 필터링이 되기 때문에
Flag : DIMI{sQl_inj3Cti0n_ju5t_d0_it~}
'CTF write_up > 기타 CTF' 카테고리의 다른 글
[SUA CTF][Forensic] Forensic1 (0) 2019.07.22 [2019 DIMI CTF Quals][WebHacking] simple xss (0) 2019.07.15 [2019 DIMI CTF Quals][Web Hacking] 5shared (0) 2019.07.15 [2019 DIMI CTF Quals][Misc] Mic Check (0) 2019.07.15 [35C3 CTF][Forensic] epic_mount (0) 2019.05.28