본문 바로가기

웹/webhacking.kr

webhacking.kr 29번

29번입니다. 문제에 들어가면 이렇게 파일업로드 기능이 구현되어 있고, flag is isn another table이라고 적혀있습니다. 앞서 information schema를 이용한 문제를 풀었기 때문에 여기서도 그것을 사용해야 할 것 같다는 예상을 하긴 했습니다.

 

그냥 b 파일을 만들어서 업로드 해보니 time, ip, file 명이 화면에 출력됩니다. 아마 select 문을 통해 가져오는 것 같은데, 파일 이름을 이용해서 injection 공격을 해야할 것 같습니다. 여기서 일단 공격을 위해서는 db에서 가져오는 구문이 어떤 형식으로 가져와야 하는지를 알아내야 합니다.

 

여기서 경우 의 수가 있는데 정리하면 아래와 같습니다. 여기서 time과 ip는 파일이름 위치를 먼저 알아낸뒤 다르면 바꿔주기  때문에 3가지로 정리했습니다.)

 

1. 파일 이름이 첫 번째 인자일 경우 : (file, time, ip) 

2. 파일 이름이 두 번째 인자일 경우 : (time, file, ip)

3. 파일 이름이 세 번째 인자일 경우 : (time, ip, file) 

 

이런 식인데, 파일 이름을 바꿔보며 삽질해본 결과, (file,time,ip)였습니다. 여기서 시간은 2번 문제처럼 9:00:00에서 time으로 주어지는 값을 더해서 출력하는 듯 했습니다.

 

제가 사용한 파일 이름은 a',1,'자신의 ip') # 입니다.

그러면 제가 시간에 1을 넣었는데 값이 수정된것으로 보아 일단 injection 공격이 가능한 것으로 보입니다.

 

그리고 지금 가져오는 insert 구문을 정리하면

 

INSERT INTO 테이블 VALUES('', ~~, ~~),(injection, ~~, ~~) #', ~~, ~~) 이런 식의 쿼리문을 통해 db에 저장하고 저장한 값을 select문으록 가져오기 때문에 여기서 서브 쿼리등을 통해 information schema injection 구문을 넣고 그 결과값을 db에 저장하는 방식의 공격을 진행하면 될 것 같습니다.

 

그럼 먼저 db이름을 가져와 보겠습니다. 사용한 파일명은 아래와 같습니다.

 

a',1, '180.224.43.160'), ((select database()),1,'180.224.43.160') #

원하는 결과가 잘 출력되었고, db이름은 chall29인것을 알 수 있습니다.

 

그 다음은 table 이름입니다. 2번에서 사용한 information schema 구문과 매우 유사한 구문으로 가져왔습니다. 그리고 문제에서 준 힌트로 인해 table이름이 여러 개인 것을 유추할 수 있으니 여러 개의 테이블 이름을 한 줄로 가져오기 위해 group_concat함수를 사용했습니다.

 

사용한 파일 이름입니다.

a',1, '180.224.43.160'), ((select group_concat(table_name) from information_schema.tables where table_schema='chall29'),1,'180.224.43.160') #

예상대로 table이 2개이며, 아마 flag_congratz가 flag가 들어가 있는 구문이지 않을까 추측했습니다.

 

이제 column 이름을 가져오겠습니다. 사용한 파일 이름은 아래와 같습니다.

a',1, '180.224.43.160'), ((select group_concat(column_name) from information_schema.columns where table_name='flag_congratz'),1,'180.224.43.160') #

 

column 이름은 단순하게 flag였습니다.

 

이제 플래그를 읽어오겠습니다. 아래가 마지막으로 사용한 파일이름입니다.

a',1, '180.224.43.160'), ((select flag from flag_congratz),1,'180.224.43.160') #

이렇게 얻은 플래그를 auth에 넣어주면 점수를 획득할 수 있습니다.

 

' > webhacking.kr' 카테고리의 다른 글

webhacking.kr 33번  (0) 2021.03.02
webhacking.kr 32번  (0) 2021.02.23
webhacking.kr 28번  (0) 2021.02.22
webhacking.kr 22번  (0) 2021.02.22
webhacking.kr 2번  (0) 2021.02.22