e_yejun
Jun_ : Pwn
e_yejun
전체 방문자
오늘
어제
  • 분류 전체보기 (240)
    • Profile (1)
    • Pwnable (54)
    • Reversing (14)
    • Network (8)
    • Forensic (10)
    • Embedded (4)
    • Android (2)
    • Web (18)
    • 알고리즘 (42)
    • 프로그래밍 (24)
    • 프로젝트 (6)
    • 1-day (7)
    • CTF (15)
    • 기타 (33)
    • 일기장 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • rev-basic
  • dreamhack.io
  • x64
  • Heap
  • dvwa
  • how2heap
  • 1-day
  • BOF
  • wargame
  • X86

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
e_yejun

Jun_ : Pwn

[LOS] Level2 cobolt 풀이
Web

[LOS] Level2 cobolt 풀이

2021. 6. 1. 15:44

Level2 : cobolt 

 

GET 방식으로 id와 pw를 입력받고, db에서 id와 pw가 각각 일치하는 레코드의 id를 select 한다.

이때, select 된 id가 admin이면 문제가 풀린다.

 

id 부분은 admin을 입력해주면 되면 쉽게 True를 만들 수 있지만, admin에 해당하는 pw는 알 수 없다.

 

mysql에서 한줄 주석은 '#' 이기 때문에 id를 입력 후 싱글쿼터로 닫고, 그 뒤 구문을 다 주석처리 하는 것이다. 

그러면 pw를 몰라도 pw의 조건식을 무효화 시킬 수 있고, id값만 인증하면서 문제를 풀 수 있다.

 

'?id=admin'#' 

 

'#'를 입력했지만 쿼리문에서는 '#'문자가 사라지는 것을 보면 필터링을 거치는 것 같다.

'#'가 인코딩 되면 ASCII로 %23이기 때문에 이 값으로 대신 넣어보자.

 

 

'?id=admin'%23' 

 

 

COBOLT Clear.

 

 

또다른 방법

id에서 뒤에 주석을 넣어서 풀 수도 있지만, pw에서도 풀 수 있다.

 

?id=''&pw=') or id='admin'%23

 

 

+ 추가적으로

두번째 방법은 AND와 OR의 우선순위를 이용해서 문제를 해결했다.

WHERE문에서 연산의 우선순위는 AND가 더 높기 때문에

 

where id='''' and pw=md5('') or id='admin'#')

 

파란색 부분이 먼저 연산된다. 이 값은 중요하지 않다. 아무 값이나 넣으면 FALSE가 나올 것이다.

이 후 OR 연산을 수행한다.

 

where False or id='admin'#')

 

OR 연산이기 때문에 앞에 and연산이 무슨 값이 나오던 상관없이 id가 'admin'이라면 db에서 해당 레코드의 값을 select 할 것이다.

 

 

 

    'Web' 카테고리의 다른 글
    • [DVWA] XSS 문제풀이
    • [LOS] Level3 goblin 풀이
    • [LOS] Level1 gremlin 풀이
    • [Node.js] Node.js 설치 (Windows)
    e_yejun
    e_yejun
    정리노트 •_•

    티스토리툴바