해당 문제는 대회기간에는 못풀었다가 추후에 풀게되었다.
먼저 문제에 들어가보면 아래와 같이 set as flair라는 버튼하나가 존재하고 별도의 기능은 없다.
버튼을 눌러보면 아래와 같이 쿠키 값 내 prefs값에 json형태의 값을 넘기고 있었고 번호가 4번일 경우 Flag라는 값을 뿌려주고 있는걸 볼 수 있었다.
일단 의심가는게 SQLI여서 아래와 같이 싱글쿼터를 삽입해보니 에러가 터지는걸 볼 수 있었다.
이제 문제는 데이터를 뽑을 수 있는 구문이 필요했는데 union이든 blind든 죄다 WAF에 막혀서 도저히 우회할 방법이 안떠올랐다. 그러다가 구문 필터 우회말고 WAF자체를 우회하려고 이것저것 시도해보다가 중복 파라미터 기법으로 아래와 같이 입력해주면 인젝션 구문이 먹히는걸 볼 수 있었다.
WAF쪽에서는 먼저 입력된 파라미터 쪽 구문으로 필터를 하고 서버 쪽에선 뒤쪽파라미터 값이 먹히는 상황이었다. 근데 의문인게 먼저 입력된 파라미터 쪽에서 싱글쿼터가 들어갔을 때만 위의 현상이 발생했는데 이건 정확히 왜 그런지는 모르겠다.
어쨋든 인젝션 구문을 삽입할 수 있어서 데이터만 뽑아보면 되겠다 했는데 union구문은 union select까진 우회가 되는데 from절부터는 우회를 못회서 블라인드로 뽑아야 되는 상황이었다. 근데 information_schema가 필터당하고 있었고 mysql db쪽은 권한이 없는지 버전이 없어서 존재하지 않는지 접근이 안되서 innodb_table_stats 류로 테이블을 뽑을 수도 없는 상황이었다. 그래서 처음엔 4') and (select 1 from bruteforce_table)=1%23 이런식으로 에러안터질때까지 테이블명을 bruteforce해봤는데 잘안나와서 컬럼명쪽을 바로 찾아보다가 아래와 같이 flag라는 컬럼이 있는걸 볼 수 있었다.
여기서부터는 substring, ascii 등 대부분의 함수들이 필터를 안당해서 그냥 데이터쭉 뽑아서 플래그 값을 찾았다.
[*]Find Flag = DCTF{346cb556a97a4396c7c09461344dc680e5446eea42788fbd729d877d1c75691b}
'CTF > Writeup' 카테고리의 다른 글
InCTF 2018 S3cur3 Bank (0) | 2018.10.08 |
---|---|
InCTF 2018 The Most Secure File Uploader (0) | 2018.10.08 |
D-CTF Quals 2018 Get Admin (0) | 2018.09.24 |
Codegate 2018 CTF RedVelvet (0) | 2018.09.18 |
BugsBunny CTF 2017 Rev150 (0) | 2018.09.17 |