controlpro

[Webhacking.kr] 8번 sql injection 본문

Webhacking/Webhacking.kr

[Webhacking.kr] 8번 sql injection

controlpro 2020. 12. 22. 22:40
728x90

내가 풀었던 문제 중에는 제일 어렵고 점수도 높은 문제이다. 350점

 

마지막 if문을 보면 다음과 같은 구문이 있는 데

  $q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");

이 구문을 해석을 해보자면, chall8이라는 table에 agent, ip ,id에 agent와 ip guest라는 것을 입력하겠다는 것이다. 

 

이 문제를 해결하기 위해서는 

$result mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");

이 구문을 해석을 잘해야하는 데 , HTTP_USER_AGENT = agent  조건에 만족하는 id를 불러온다. 이 값을 query를 result에 넣고 뒤에 

ck[0] = admin이면 문제가 풀리게 된다. 

 

그렇다면 총 2단계가 필요하다. 

  1. agent에 id값이 admin인 것을 chall8에 insert해주기 (sql injection)
  2. id=admin인 agent값(내가 입력한것)을 입력해줘서 문제해결하기

 

1. agent에 id값이 admin인 것을 chall8에 insert해주기 

그전에 agent값에 입력을 어떻게 할까?

$agent=trim(getenv("HTTP_USER_AGENT"));

위에 보면 이러한 구문이 있는데 user_agent값을 agent로 입력이 가능하다. 

 

burp suite를 사용해보자 

문제를 새로 고침하면 잡히는데 여기서 user-agent값이 보이지 않는가? 그러면 여기에 내가 입력을 하면 되겠다. 

 

입력을 어떻게 하면 될까??? 

insert into는 여러개의 테이블에 한번에 여러개의 value를 넣을 수 있는데 이 방법을 참고 하겠다. 

INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값1,값2,값3......);
INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값4,값5,값6......);
INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값7,값8,값9......);
INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값10,값11,값12......);
INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값13,값14,값15......);
                                                     .
                                                     .

                                                     .

INSERT INTO 테이블명 (칼럼1,칼럼2,칼럼3.....) VALUES (값1,값2,값3......),(값4,값5,값6......),(값7,값8,값9......),(값10,값11,값12......),(값13,값14,값15......);


출처: https://wimir-dev.tistory.com/18 [[위미르 개발팀] Android, iOS , Web 제작]

그래서 두개의 입력 value 집합을 만들어주면 된다.(sql injection으로)

그래서 burp suite로 잡은 패킷을 repeater에 넣어주고 조작을 해보자 

그래서 다음과 같이 입력을 하면 chall8 table에 [agent : aaa , ip : [IP] , id : admin] 과 [agent : aa , ip : [IP] , id :guest] 같이 만들어졌을 것이다 (마지막 a를 지워야한다 )

 

 

2. id=admin인 agent값(내가 입력한것)을 입력해줘서 문제해결하기

그러면 써줬으니까 aaa를 보내서 문제를 해결해보자 

 

728x90
반응형

'Webhacking > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] 20번  (0) 2020.12.29
[Webhacking.kr] 56번  (0) 2020.12.29
[Webhacking.kr] 21번 blind sql injection  (0) 2020.12.24
[Webhacking.kr] 38번 log injection  (0) 2020.12.22
Webhacking.kr 6번  (0) 2020.12.10