4주차 세션

CS pro·2023년 4월 30일
0

드림핵

목록 보기
3/6

Q1) Path traversal

Path traversal문제
버프 스위프트와 소스코드를 이용하여 문제를 해결해보고자 한다.

일단 서버에 들어가서 아래와 같이 나온다.

Get User Info에 들어가면 /get_info로 들어가게 된다.

소스코드를 참고하여 ../flag에 답이 있다고 생각했다.

그래서 버프스위프트와 연동하여 해봤더니

userid가 undefine으로 되어있는 것을 ../flag로 변경하여 Forward를 해보았다.

이처럼 플래그를 확인할 수가 있었다.

Q2) simple_sqli 문제

simple_sqli 문제

사용자의 입력 데이터가 SQL 쿼리에 들어가는 기능은 로그인이다.
사용자가 아이디와 PW를 입력해 서버에 전송하면 서버는 해당 데이터가 데이터베이스에 존재하는지 확인하고 로그인 성공여부를 판단한다.

MySQL에서 로그인 처리하는 간단한 형태의 쿼리는 아래와 같다.

사용자가 자신의 아이디와 패스워드를 입력하면 웹 어플리케이션에선 {uid},{upw}부분에 사용자가 입력한 문자열을 삽입하고 DBMS로 전달하여 실행하게 된다.

위 SQL커리는 사용자의 입력과 웹 어플리케이션이 작성한 SQL퀴리를 해석할 때 ( ' )를 기준으로 문자열을 구분한다. 사용자가 입력에 ( ' )문자를 포함해 문자열을 탈출하고 뒷부분에 새로운 쿼리를 작성하여 전달하면 DBMS에서 사용자가 직접 작성한 쿼리를 실행가능하다.

admin의 upw를 알지 못할 때 SQL Injection을 통해 논리적으로 참이 되는 구조를 만들어서 admin의 정보가 출력되도록 할 수 있다.

or연산은 A or B일 때 A와 B 둘중 하나라도 참인 경우 결과는 참이 되는데 1' or '1과 같은 공격 페이로드를 통해 모든 정보를 출력할 수 있다는 점을 활용하여 문제를 풀 수 있다.
(참고:https://learn.dreamhack.io/15#7)

이 문제의 코드를 보면

" 문자를 기준으로 문자열을 구분하고 있다. 위 기본 형태의 쿼리문을 응용하여 문제를 해결하면 될 것 같다.

그래서 login버튼을 누르면

플래그를 확인할 수 있다.

Q3) session-basic 문제

드림핵 session-basic 문제
https://learn.dreamhack.io/166#11<-드림핵 강의에서 그대로 적용해보았다.
이를 통해 sessionid를 admin의 세션id값으로 변경해주면 플래그를 얻을 수 있다고 생각했다.

admin의 세션id값을 알아내기 위해 코드를 보았다.

이처럼 메인페이지와 login페이지 이외에 admin페이지가 존재하고, admin 세션id값을 얻었다.

원래 guest 세션id값▼

아래 이미지와 같이 guest 세션id 값을 admin의 세션id값으로 변경해주고

다시 홈으로 돌아가면

플래그를 얻을 수 있다.

profile
보안전문가 되기 위한 과정기록

0개의 댓글