[Dreamhack] sql injection bypass WAF

sy46·2023년 11월 13일
0

dreamhack

목록 보기
19/20

sql injection bypass WAF

소스코드를 읽기 전 uid로 guest와 admin을 넣어보았다.

그랬더니 guest는 출력이 잘 되지만 admin은 block 되었다는 것을 알 수 있다.

소스코드를 뒤져보니

결국 uid를 받아와 sql 구문을 실행시키고, 여러 키워드를 사용하지 못하게 막는 함수가 존재했다.

하지만 keywords의 구분을 보니 대소문자 구분이 없었고, 공백 또한 white space만을 막는 것으로 보아 %09와 같은 tab 문자를 사용할 수 있을 것이라고 판단했다.
그래서 입력한 코드는 아래와 같다.

Admin'	#

역시 출력이 잘 되는 것으로 보아 위의 입력을 변형시켜 upw의 값을 얻어오면 될 것이다.

그래서 작성한 코드

'Union	Select	upw	From	user	where	uid="Admin"#

하지만 위의 코드로는 아래와 같이 Error 500이 출력되었다.

그 이유인 즉슨, union을 사용하기 위해서는 select 구문의 column 개수가 앞의 select 구문 column 개수와 일치해야하는데, 생각없이 column을 하나만 사용했기에 발생한 에러였다.

그래서 column 개수가 몇개인지 확인하기 위해 null값을 넣어주며 알아낼 수 있으나,

애초에 idx, uid, upw 이 세 가지의 column이 존재한다는 것을 코드로 보여줬으므로 쉽게 해결할 수 있다.

그래서 column 개수와 column명에 맞게 작성한 코드

'Union	Select	idx,uid,upw	From	user	where	uid="Admin"#

주어진 코드에서 result=result[1]을 출력하므로
가운데에 원하는 upw를 넣어서 문제를 해결해주면 된다.

아래는 가운데에 idx를 넣어준 결과이다.

'Union	Select	null,idx,upw	From	user	where	uid="Admin"#

0개의 댓글