forcelogin 1

초기화면을 보면 /source를 확인하라고 나와있다.

/source를 통해 들어가니 소스 코드를 확인할 수 있었고, 밑줄 친 부분을 보면 select와 \ 등을 비롯해서 다양한 문자와 기호들을 사용할 수 없게 되어있다.
또한 그 아래를 보면 50자로 제한이 되어있는 것도 확인할 수 있다.

소스 코드를 쭉 살펴보니 해당 부분이 제일 중요할 거 같았다.

소스코드에 /flag가 있길래 그냥 넣어보았지만 당연히 안된다.
/loginAction을 통해 flag의 값을 얻을 수 있는 문제 같았다.

소스 코드에서 guest의 아이디와 비밀번호를 알 수 있길래 바로 넣어보았다.
권한이 없다고 뜨면서 admin으로 로그인해야 flag 값을 볼 수 있다는 것을 알 수 있었다.
sql 인젝션에서 select가 막혀있으니 이와 똑같은 역할을 하는 구문이 필요하였고, 이를 구글링을 통해 찾아보았다.
https://dev.mysql.com/doc/refman/8.0/en/values.html
MySQL :: MySQL 8.0 Reference Manual :: 13.2.19 VALUES Statement
13.2.19 VALUES Statement VALUES is a DML statement introduced in MySQL 8.0.19 which returns a set of one or more rows as a table. In other words, it is a table value constructor which also functions as a standalone SQL statement. VALUES row_constructor_li
dev.mysql.com
위 사이트에서 select를 대체할 수 있는 구문을 찾을 수 있었다.

select 대신 union values row를 사용하여 sql 인젝션 구문을 작성해 보았다.

loginAction?id=\&pass=UNION VALUES ROW(admin) 다음과 같은 sql 구문을 작성하여 넣어보았지만 에러가 뜨는 것을 확인할 수 있었다.
admin을 문자열로 인식하지 않아서 위와 같은 오류가 뜨는 거 같았다.
admin을 문자열로 인식시키기 위해 작은 따옴표를 사용하여 다시 구문을 작성한 후 넣어보았다.

작은 따옴표가 필터링이 되어있기 때문에 no hack이 떴다. 따라서 작은 따옴표 필터링을 우회하는 방법을 찾아보았다.
1. 작은 따옴표 대신 큰 따옴표를 사용한다. -> 실패
2. URL 인코딩을 사용하여 우회한다.
작은 따옴표(')를 인코딩하면 %27이고, 이를 대신 넣어보았지만, 위 사진과 같이 실패하였다.
3. 스트링 우회 기법을 사용하여 hex(16진수) 값으로 입력한다.
http://dolcevie.com/js/converter.html
Hex/Ascii Converter
Hex: 41:6e:74:6f:6e:20:69:73:20:67:72:65:61:74:20:3a:29
dolcevie.com
위 사이트를 통해 admin을 16진수로 바꿔주었다.
admin = 61646d696e라는 값을 얻을 수 있었고, 해당 구문을 다시 작성하면 http://localhost:5003/loginAction?id=\&pass=UNION VALUES ROW(0x61646d696e)로 나타낼 수 있다.
이제 이 구문을 다시 넣어보자.

필터링을 우회는 성공한 거 같지만 다시 에러가 떴다.
무엇이 문제일까 다시 구문을 쭉 살펴보고 sql 인젝션에 대해 다시 찾아보았다.
해당 필터링을 어떻게 우회할지에 급급하다 보니 sql 인젝션에서 잊은 것이 있었다.
바로 주석 처리이다.
(주석 처리를 통해 sql 쿼리에서 사용된 주석 이후에 있는 모든 코드를 무시하여 실행되지 않도록 해준다.)

한 줄 주석을 처리하는 문자열인 #을 인코딩하여 %23을 구문에 넣어주니 flag 값이 나오는 것을 볼 수 있다!
성공 Vv
'Web - 실습' 카테고리의 다른 글
simplecalculator (0) | 2023.05.03 |
---|---|
forcelogin 2 (0) | 2023.04.05 |
forelength (0) | 2023.03.26 |
pingservice (0) | 2023.03.21 |
HelloCTF (0) | 2023.03.19 |