본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 8번

by 자운대고라니 2023. 2. 14.
반응형

접속해보면 hi guest 라는 문구와 함께 view-source가 있다. view-source를 클릭해 php 소스를 확인해본다.

$agent는 USER_AGENT에 관한 데이터고, $ip는 현재 User가 접속한 IP를 뜻한다. $agent에 from은 preg_match에 의해 필터링 됐다.

 

if($ck) 분기문에서 admin id로 로그인했을 시 문제가 풀리는 걸 확인할 수 있다.

if(!$ck) 분기문에서 insert into를 활용해 agent, ip, id 값을 value로 DB에 넣는 것을 확인할 수 있다.

$ip의 값은 조작할 수 없으므로 $agent 값을 proxy를 활용해 SQL INJECTION 문으로 변형해야한다.

agent에 qwer', '내 IP', 'admin')#' 를 넣는다고 가정해본다. (IP는 구글에 "내 IP" 라고 검색하면 나온다.

기존 쿼리문 : "insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')"

SQL INJECTION문 : "insert into chall8(agent,ip,id) values('qwer', '내 IP', 'admin')#' ','{$ip}','guest')"

                                  "insert into chall8(agent,ip,id) values('qwer', '내 IP', 'admin')

즉 agent = qwer, ip = 내 IP, id = admin이라는 데이터가 DB에 저장된다. 

proxy를 활용해 User-Agent 값을 변경한다.

이 후 intercept is off로 바꾸면

done! (1/70) 즉 id= admin으로 된 데이터가 저장됐다. 이를 테이블로 표현하면 아래와 같다.

agent ip id
qwer 내 IP admin

solve 함수를 실행하기 위해 id=admin이라는 계정으로 로그인해야한다.

$_SERVER['HTTP_USER_AGENT'] 는 User-Agent를 뜻하므로 User-Agent에 qwer을 대입하면 admin 계정으로 로그인하게된다.

 

반응형

댓글