본문 바로가기
해킹 공부/웹해킹

Burp Suite Intruder, SQL injection

by zzzmilky 2021. 1. 25.

 

8번 문제. 350점 짜리.

 

350점짜리 8번 문제다. hi guest라고 적혀있고, 밑엔 view-source가 있다.

소스를 살펴보자.

 

 

 

view-source

 

Sql injection을 활용하게 될 것 같다. 일단 코드를 해석해보면, 

 

1) 접속자의 User agent와 ip를 변수에 저장하고

2) agent 변수에 "from"이라는 문자열이 포함되어 있으면 "Access Denied" 된다.

3) id의 컬럼 개수는 count_ck 변수에 저장한다.

4) count_ck의 값이 70 이상이면 (컬럼 개수가 70개보다 크거나 같으면) 테이블을 삭제한다.

5) 접속자의 User agent를 agent 컬럼에서 조회해 일치하는 agent의 id를 반환한다.

6) 접속자의 User agent가 이미 agent 컬럼에 존재한다면 hi id 를 출력한다.

6-1) 만약 id가 admin이라면 테이블을 삭제하고 문제는 해결된다.

7) agent 컬럼에 존재하지 않는다면 새로운 데이터를 삽입하고, done과 함께 count_ck[0]/70을 출력한다.

 

 

일단 버프 슈트를 켜서 기존의 User-Agent 헤더로 request를 보낼 경우, hi guest라고만 뜬다.

그렇다면 User-Agent의 값을 'test'로 바꿔 request를 다시 해보았다.

 

 

User-Agent 값 변경해 request
User-Agent 변경에 따른 response

 

done! 이라고 하며 새로운 데이터가 삽입 됐음을 알리는 response가 온다. 그렇다면, 70개의 각기 다른 데이터가 삽입된다면 테이블이 삭제되는데, 테이블 삭제 직전에 "admin"을 id로 삽입하는 request를 날려 sql injection을 해주면 문제를 풀 수 있지 않을까라는 생각을 하게 됐다.

 

이때, 연속적으로 User-Agent에 다른 값을 69번 request하기 위해 사용된 기능이 Intruder 기능이다 (링크로 확인).

링크로 확인한대로 Intruder 기능으로 69번 request를 해주고, 마지막 70번째에 sql injection을 해주었다.

 

 

 

insert into chall8(agent,ip,id) values ('{$agent}','공인 ip 주소','guest')라는 쿼리에 대해 sql injection을 해주면 된다.

'브라우저 User-Agent','공인 ip 주소','admin'), ('임의의값 을 inject 해주면, (브라우저 User-Agent, 공인 ip 주소, 'admin'),(임의의 값, 공인 ip 주소, 'guest') 와 같은 결과가 데이터베이스에 insert되는 효과가 나온다. 따라서 id 컬럼 값이 "admin"인 데이터를 삽입하기 위해 sql injection을 밑에와 같이 해주면 된다.

 

 

Sql injection을 위한 request
위에 대한 response

 

 

response로 hi admin이 떴지만 login plz라는 경고창이 뜬걸 보아, 내가 "Open browser"기능에서 로그인이 안된 상태로 request를 보내 발생한 문제인 것 같다. 따라서 쿠키값을 내가 이미 로그인해 있는 페이지의 세션 쿠키값으로 바꿔주었다.

 

 

 

 

쿠키값을 바꿔 request후 받은 response

 

이렇게 8번 문제를 풀 수 있었다. 이외에 다른 사람들 풀이를 참고해보니, sql injection 방법을 사용했지만 다른 쿼리문을 삽입해 70번 request해주지 않고도 한번만에 문제 풀이를 성공한 사람도 보았다. 요즘 webhacking.kr에서 sql injection 문제를 많이 풀고 있는데, 이제 조금씩 헷갈리기 시작한다.... 한번 "sql injection 특집"을 포스트로 정리 해봐야겠다는 생각이 든다.

 

댓글