해당 취약점은 사용자의 IP 주소와 User-Agent 값이 저장되는 게시판 구조이다. User-Agent는 서버에서 사용하는 웹 브라우저 버전을 알려주는 HTTP 헤더값 종류 중에 하나다.

 

 

이제 여기서 새로고침을 누르고, 버프 스위트를 이용해 패킷을 캡처했다.

 

 

위와 같이 GET 메소드를 사용하여 정보를 가져온다. 문제가 User-Agent인 만큼 User-Agent에 SQL문을 삽입하기 전에 '(싱글쿼터)를 넣고 에러 유무를 확인했다.

 

 

패킷 전송 결과 200 OK 응답 코드가 왔으나 아래 SQL 에러가 발생했다. 저 결과를 바탕으로 1','2')# SQL문을 User-Agent에 넣었다.

 

 

위와 같이 IP 주소와 User-Agent값이 1과 2로 변경되었다. 이제 버전을 확인하기 위해 2',(select @@version))#을 넣었다.

 

위와 같이 넣고 전송한 결과 아래와 같이 IP 주소 값에 버전을 확인할 수 있었다.

 

 

블로그 이미지

꼴통보안인

,

해당 취약점은 SQLite로 DB를 구성한 게시판에 게시물을 올릴 때, 올린 게시물에 DB의 중요 정보가 입력되어 게시물에 출력되게 만드는 취약점이다.

 

 

'(싱글쿼터)를 입력하면 글이 저장되었다는 말은 나오지만 실제로 웹상에 출력되진 않는다.

 

 

그 외 나머지는 모두 게시물로 저장된다.

 

 

그래서 '(싱글쿼터) 이후에 SQLite에서 사용하는 sql문을 작성했다. 앞서 풀었던 Stored (blog)와 SQL문이 같을거라 생각했다. 그래서 ',(select sqlite_version()))-- 를 넣어서 SQLite의 버전을 확인했다. 확인 결과 아래와 같이 버전이 출력되었다.

 

 

블로그 이미지

꼴통보안인

,

해당 취약점은 블로그 같은 곳에 글을 저장할때 발생하는 sql injection 취약점에 관한 내용이다.

 

 

'(싱글쿼터)를 입력하여 저장하면 에러가 나온다.

 

 

에러가 지금까지 보던 것들과는 다르다. db에 insert문을 이용하여 게시물을 저장하는 방식인데 이미 bee라는 사용자는 지정이 되어있다. date도 글 올리면 올라가는 것으로 보아서는 insert문에 함수로 자동 지정 되어있는것 같다. 그렇다면 insert into (x,x,x) values (date, x, owner)같은 방식으로 구문이 구성되어 있는것 같다. 에러에 나온 'bee')를 지워야 insert문을 알맞게 넣으면서 원하는 정보를 얻을수 있을 것 같다. 그래서 union이 아닌 select문을 이용했다. 우리가 넣는 값이 entry로 들어가기 때문에 ,(콤마)를 이용해서 entry값을 넣고 그 뒤에 owner 컬럼에 select문과 함수를 이용해서 버전을 확인했다. (구문 : ',(select @@version))#)

 

해당 구문을 넣은 결과 owner에 버전이 입력된걸 확인했다.

 

 

 

블로그 이미지

꼴통보안인

,