또 multiline sqli.

 

set @a='query';

prepare pstmt1 from @a;

execute pstmt1;

 

 

지난번엔 위에처럼 pstmt 가지고 풀었었는데 이번엔 아쉽게도 from과 '(%27)이 필터링이다.

 

한가지 특이한점은 어떤값을 넣어도 1이 나온다는 것이다.

 

이로 미루어보아

 

select $_GET["q"]||1 from Flag;

 

처럼 쿼리가 구성이 되어있지 않을까 유추해볼 수 있따

 

근데 찾아보니 이건 unintended라고 한다.

 

 

intended

 

예상 쿼리가 {input}||1이 아니라 {input}||flag였다고 하네?

 

1;set sql_mode=PIPES_AS_CONCAT;select 1

 

||를 concat으로 해석하게 하여 플래그를 출력한다는 것이당,,,

 

oracle에선 ||이 기본으로 concat이 되지만 mysql에선 or 와 동일하다. 이 모드를 바꿔주는것,,

 

 

 

 

 

'Web > BUUCTF' 카테고리의 다른 글

[BUUCTF] - [强网杯 2019]高明的黑客1  (0) 2020.02.14
[BUUCTF] - [HCTF 2018]admin1  (0) 2020.02.13
[BUUCTF] - [SUCTF 2019]EasySQL1  (0) 2020.02.13
[BUUCTF] - [护网杯 2018]easy_tornado1  (0) 2020.02.13
[BUUCTF] - [强网杯 2019]随便注1  (0) 2020.02.12
[BUUCTF] - [HCTF 2018]WarmUp1  (2) 2020.02.11

하.. 중국어라 번역이 잘 안돼서 좀 짜증나긴 하지만 그래도 괜찮다.

 

보이는가? 이 개발 번역이

 

허..

 

 

 

오 sqli..

 

 

오 필터링..

 

 

주요 문법들이 다 안된다.

 

 

만고의 sqli 삽질 끝에 뭔지 몰겠어서 찾아보니 아니 이럴수가..

 

 

앗... multi query라니..

 

존재만 알고 CTF나 문제로 한번도 나온적이 없어서 생각의 틀에 갇혀있었던 것 같다.

 

multi query에서 할 수 있는 공격은 찾아보니

 

preg_match로 필터링 하는것 중에 rename이 필터링 안되어 있어서

 

1. 현재 조회되고있는 테이블 명을 rename으로 tmp로 변경

2. flag가 담겨있는 테이블을 현재 조회되고있는 테이블명으로 변경

3. '||1# attack

 

이런 방법이 있었다.

 

근데 이보다 더 쉬운 방법이 있는데, mysql 자체에서 제공하는 prepared statement 기능을 이용하는 것이다.

 

출처 : mysqlkorea.com

 

 

 

'Web > BUUCTF' 카테고리의 다른 글

[BUUCTF] - [强网杯 2019]高明的黑客1  (0) 2020.02.14
[BUUCTF] - [HCTF 2018]admin1  (0) 2020.02.13
[BUUCTF] - [SUCTF 2019]EasySQL1  (0) 2020.02.13
[BUUCTF] - [护网杯 2018]easy_tornado1  (0) 2020.02.13
[BUUCTF] - [强网杯 2019]随便注1  (0) 2020.02.12
[BUUCTF] - [HCTF 2018]WarmUp1  (2) 2020.02.11

+ Recent posts