비밀 데이터를 찾아보라네요.

이런 데이터베이스 안에 숨겨져 있는 비밀 데이터? 같은걸 꺼낼때 union을 많이 사용합니다. 이유는 보시면 알게 될겁니다.
일단 첫번째 sql 취약점이 있는지 확인을 해봐야 합니다.
sql 문을 사용했을때 정상적인 동작을 하는걸로 보아 sql 취약점이 확실히 있네요.
그 다음은 컬럼 갯수를 알아야합니다.
컬럼 갯수는 order by 1 # 이런식으로 숫자를 하나씩 올려가면서 에러 나올때까지 하는데요. 해보겠습니다.
이런식으로 에러가 나왔네요. 그러면 컬럼갯수는 4개 입니다.
컬럼갯수도 알았겠다. 출력 컬럼을 확인해보겠습니다.

출력 컬럼은 1,2,3,4 어디에나 출력을 하네요. 그다음은 데이터베이스 이름을 알아보겠습니다. 1,2,3,4 아무곳에서나 database()를 입력하게 되면 데이터 베이스 이름을 알려주게 됩니다.

이런식으로요. 그러면 데이터베이스 이름은 sqli_1이 되겠네요. 그 다음은 테이블이름을 알아야 하는데요. 데이터베이스 에는 이 데이터베이스를 관리하기 위한 또 다른 데이터 베이스가 존재합니다. information_schema 라고 합니다. 이걸 이용해서 테이블 이름을 알아내 보겠습니다.

제가 적었던 쿼리문은 bel%' union select table_name,2,3,4 from information_schema.tables where table_schema='sqli_1' # 이거입니다. 테이블 이름을 알아야 하니까 table_name을 1번 자리에 그리고 from 하고 information_schema 안에 있는 테이블 이름이 tables 라는 테이블 입니다. 그리고 where이 나오는데요. 제가 where을 작성한 이유는 그게 아니면 쓸데없는 테이블들이 좌라락 뜨기 때문에 where문을 사용하여 불필요한 테이블을 다 날렸습니다. 딱봐도 flag_table이 나오죠.
그러면 테이블 이름도 알았겠다 컬럼 이름도 알아보죠. 구조는 똑같습니다. 테이블 이름을 알고싶을땐 table_name 그러면 컬럼은? column_name 이 되겠죠. 똑같이
information_schema.columns가 될거고요 where문은 table_name=flag_tabel이 되겠네요. 이걸 그대로 적용하면

이렇게 flag라는 컬럼 이름이 나왔네요. 이제 이 컬럼을 출력만 하면 끝나겠네요. 이거는 간단합니다. bel%' union select flag,2,3,4 from flag_table # 이건 기본적인 문법이기 때문에 설명은 하지 않겠습니다.

그러면 이렇게 flag가 나왔죠?? 성공!!