getenv(): 환경변수를 가져오는 함수이다. 여기서는 "HTTP_USER_AGENT"라는 환경변수를 가져온다. $SERER['HTTP_USER_AGENT']는 접속자의 접속 브라우저를 의미한다.
trim(): 문자열의 맨 앞과 맨 뒤의 여백을 제거한다.
$_SERVER['REMOTE_ADDR']: 웹서버에 접촉한 접속자의 IP를 의미한다.
접속자의 IP를 $ip에 저장한다.
$agent에 from이 들어가 있으면 Access Denied를 출력하고, $agent를 출력한다.
count(): sql에서 테이블에 존재하는 데이터의 개수를 가져온다. 이때, NULL인 것은 제외한다.
chall8이라는 table에서 id의 개수를 구해 $count_ck에 저장한다. 만약 그 개수가 70개 이상이면 chall8에 저장된 모든 데이터가 삭제된다.
agent가 현재 접속한 브라우저인 id를 모두 골라 배열로 $ck에 저장한다.
$ck가 존재하면 $ck[0]을 출력하고, 만약 이것이 "admin"이라면 문제는 풀린다.
$ck가 존재하지 않다면 현재의 접속 브라우저, 접속한 pc의 ip주소와 'guest'라는 새로운 데이터 행을 삽입한다.
그 뒤, $count_ck를 출력한다.
화면에 접속하자마자 hi guest가 뜬 것은 아마도, id의 개수가 70개보다 적고, 내가 접속한 브라우저를 agent값으로 가진 행의 id가 있다는 뜻이다. 그리고 접속한 브라우저를 agent 값으로 가진 행의 id는 guest이다.
firefox로 접속했을 때 done!(3/70)이라는 것은 firefox를 agent의 값으로 갖는 id가 없었다는 의미이다. 이로써 table에 데이터가 원래 3개 있었다는 것을 알 수 있다.
테이블을 완전히 비웠을 때, $agent의 값과 $ip의 값을 통해 SQL Injection을 시도할 수 있다.
firefox로 burp suite를 사용하는 것이 처음이어서 어떻게 하는지 몰라 조금 시간을 지체했는데,
여기서 Open browser를 눌러서 열리는 새로운 창으로 들어가 intercept is on으로 상태를 바꾸고 원하는 사이트 주소를 입력하면 그 주소에 대해 repeater를 사용할 수 있다.
request에서 볼수 있는 것들이다. 6번째 줄에 User-Agent가 있는 것을 볼 수 있다. 맨 끝에는 (웹브라우저이름)숫자들 이렇게 있는데, 여기서 맨 끝을 조금씩 변형해가면서 테이블에 새로 추가할 수 있도록 한다.
많은 고생을 통해 여기까지 왔다. repeater를 일일이 손으로 입력하고 클릭하게 만들지는 않았을 텐데... 뭔가 더 편하게 하는 방법이 있을 것이다.
데이터를 70개까지 꽉 채웠다.
Safari/537.36','아이피주소','admin')#
이렇게 입력하면, 새로운 브라우저라고 인식하게 되어 바로 이 가짜 브라우저 명을 쿼리문에 넣는다. Safari/537.36이 브라우저로, 입력해준 아이피 주소가 ip로, guest 대신 admin으로 저장된다. #을 넣은 덕에 뒤에 guest 같은 것들은 전부 무시된다.
아이피 주소를 10.10.10.10으로 하고 다시 접속을 하는데(Fire fox 브라우저로) hi guest가 떠서 ip를 알아봐주는 사이트로 들어가 내 아이피 주소를 확인해서 넣어보기도 하고, 터미널에서 ip 주소를 알아내는 명령어를 써서 알아낸 것을 넣어보기도 했다. 그 이후에 뭐가 잘못됐는지 알고 싶어서 버프 스위트를 통해 브라우저를 열어 문제에 접속했더니 갑자기 문제가 풀렸다. 아마 버프 스위트로는 chromium-browser로 접속했고 확인한 것은 파이어 폭스를 이용해서 그런 것 같다.
'SISS > Webhacking.kr' 카테고리의 다른 글
old-03(350) (0) | 2020.11.22 |
---|---|
old-53(350) (0) | 2020.11.07 |
old-49(300) (0) | 2020.10.31 |
old-48(350) (0) | 2020.10.04 |
old-11(300) (0) | 2020.09.26 |