오늘은 webhacking.kr 8번 문제를 풀어보겠다

hi huest와 소스 코드를 볼 수 있는 링크 밖에 없다 확인해 보자

이게 소스 코든데.. 좀 복잡해 보인다 보는 사람도 혼자 스스로 푼게 아니라면 꼭 꼼꼼히 읽어야 취약점을 발견 할 수 있다
이게 중요하다 꼼꼼히 읽어야 어려운 보이는 문제도 정답이 보인다

먼저 sql 구문으로 자신의 'HTTP_USER_AGENT'라는 변수로 sql 구문에 넣어 맞는지 확인하다
또한 쿼리문 결과가 admin 이여야 플래그를 얻을 수 있을 것 같다
하지만 도중에 보이는 낯선 함수 addslashes는 집적 찾아 보아야 도움이 되지만 간단하게 말해서 쿼리문 버그와 에러를 방지 해 주는 함수다 즉 필터링 함수란 뜻인데 sql의 버그를 상징하는 문자인 따옴표(')가 막히기 때문에 이 쿼리문으로는 sql injection이 불가능 해 보인다
그 아래의 코드를 보자면

다시 쿼리문이 보인다 if문을 잘 살펴보자면 $ck라는 변수가 존재 하지 않을 시 실행 되는 코드로 DB에 집적 새로운 값을 추가 하는 것으로 보인다 여기서 포인트가 있다 잘 보자

chall3라는 테이블은 agent, ip, id라는 구성으로 이루고 있으며 들어가는 값은 $agent와 $ip다 하지만 id라는 값은 guest로 고정 되어 있기 때문에 테이블 안에 추가 되었다 해도 admin으로 로그인 할 수는 없다
하지만 제일 중요한 포인트는 전에 쿼리문과는 달리 addslashes라는 필터링 함수가 없다
즉, sql injection이 가능하다는 뜻이다!!
하지만 문제는 어떻게 공격 할 것인지가 문제다

두 변수는 HTTP_USER_AGENT라는 값과 IP를 추출하는 변수로 설정이 되지만 이 값을 어떻게 바꿀 것인지가 의문이다
그래서 Burp Suite라는 훌륭한 통신 수단을 사용해야 겠다

이 페이지의 패킷을 가로채어 수정하자

패킷에 User-Agent라는 값이 보이는데 아마 이 값을 통해 $agent라는 변수에 이 값이 할당 되는 듯 하다
바로 바꿔보자

일부러 '를 넣어 에러를 발생 시켜 보자

쿼리 에러를 뱉어낸다 반대로 정상적인 값을 넣어보자

이번엔 xpsa로 넣어 보았다

done!이라는 메세지가 출력되었다 이 부분은

테이블에 정상적으로 값을 추가시켰을 때 나오는 문구다 하지만 우린 guest가 아닌 admin으로 로그인 해야 한다
그래서 나온 해결책이
insert into chall8(agent,ip,id) values('xpsa','1','admin'),('guest','{$ip}','guest')
저 파란 부분이 입력 값인데 딱 봐도 쿼리문에 하나씩 넣는 값에 한번에 2개를 넣어 테이블에 id가 admin이라는 유저를 넣는 것이다 이런식으로 쿼리문을 조작하여 admin이라는 유저를 하나 더 넣었다
이제 User-agent값 에 xpsa','1','admin'),('guest 을 넣었다

지도 에러 없다고 인정한 모습이다
이제 쿼리문에 넣을 값에 User-agent 값에 다시 xpsa로 넣는다면


난 이미 깨서 이렇게 나왔지만 다른 사람은 정상적인 flag로 나왔을 것이다
이거 풀면서 느낌점은 코드를 꼼꼼히 봐야 쉽겠구나 라는 생각이 먼저 들 만큼 어려워 보였지만 쉬운 문제처럼 느껴졌다
'CTF 풀이' 카테고리의 다른 글
| [NOOBHACK] Mster Canary 배울때 보기 좋은거 (0) | 2023.02.02 |
|---|---|
| [NOOBHACK] dreamhack LV.3 chocoshop 문제 풀이 (0) | 2023.01.06 |
| [NOOBHACK] DefCoN#21 #1 풀이 (0) | 2022.09.26 |
| [NOOBHACK] Webhacking.kr 5번 (4) | 2022.09.21 |