문제 화면입니다.
새로고침을 하자 hi guest가 나왔습니다.
문제의 소스 코드입니다.
순서대로 해석을 해보면
http_user_agent가 $agent에 저장됩니다.
remote_addr는 $ip에 저장됩니다.
$agent에 from이 있으면 exit 합니다.
chall8 테이블의 id컬럼의 개수를 $count_ck에 저장하고 $count_ck가 70 이상이면 테이블을 초기화 합니다.
agent컬럼에서 값이 http_user_agent인 id를 찾는 쿼리를 $result에 저장합니다.
쿼리의 결과는 $ck에 저장됩니다.
$ck 중 첫 번째 값이 admin이면 문제가 풀립니다.
$ck가 존재하지 않으면 insert into로 chall8 테이블에 넣어주고 $count_ck를 출력해줍니다.
드림핵 강의 중 DML에서 원하는 값을 가져오는 쿼리를 삽입해서 원하는 정보를 탈취하는 쿼리가 있는데
여기서 데이터를 넣을 때 원하는 데이터(쿼리)를 넣고 뒤 부분을 주석 처리 함으로써
원하는 데이터(쿼리)를 삽입할 수 있다는 점에서 아이디어를 얻었습니다.
문제 소스 코드에선 agent, ip, id 순으로 들어가므로 agent 칸에 agent, ip, id 값을 입력하고
뒤 부분을 주석처리하는 방식으로 문제를 풀어보자는 생각을 하였습니다.
파이썬으로 코드를 짜줍니다.
리퀘스트할 때 헤더 목록 중 User-Agent 값을 바꿀 수 있습니다.
여기에 user-agent','ip','admin'-- - 을 집어 넣어줍니다.
user-agent는 개발자 도구 -> 네트워크 탭 -> Headers에서 확인할 수 있고
ip는 본인의 ip를 넣으면 됩니다.
실행 결과 반복문을 통해 70이 되어 테이블이 초기화되고
이후 한 번 더 요청을 통해 테이블의 첫 번째 값까지 작성되었습니다.
(반복 횟수는 1/70이 나올 때까지 해주면 됩니다)
이제 브라우저에서 새로고침을 해주면
문제가 풀립니다~
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge old-34 write-up (0) | 2022.08.19 |
---|---|
[Webhacking.kr] Challenge old-44 write-up (0) | 2022.08.18 |
[Webhacking.kr] Challenge old-09 write-up (0) | 2022.08.15 |
[Webhacking.kr] Challenge old-04 write-up (0) | 2022.08.15 |
[Webhacking.kr] Challenge old-56 write-up (0) | 2022.08.14 |