controlpro
[Webhacking.kr] 8번 sql injection 본문
내가 풀었던 문제 중에는 제일 어렵고 점수도 높은 문제이다. 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단계가 필요하다.
- agent에 id값이 admin인 것을 chall8에 insert해주기 (sql injection)
- 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 (값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를 보내서 문제를 해결해보자
'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 |