auth 버튼을 누르면 단순히 alert() 만 띄워주게 됩니다.

실질적으로 URL을 보면 val라는 인자가 추가 되어있는데 해당 값을 2로 넘겨주면 성공하는 문제입니다.



소스를 보면 val=2는 없다 하고, union을 사용하라는 말이 있습니다.

union sql injection을 이용해 문제를 해결하면 됩니다.



Injection Pointer는 select문입니다. 

$go 변수에 알맞은 union select를 입력하면 됩니다.


rand 함수로 괄호의 개수만 다른 Query가 있지만 여러 번 반복하면 되니 하나의 Query에 집중합니다.



결국 Union SQL Injection을 하여 data[0]에 2가 오면 성공합니다.



우선 다른 숫자나 필터링된 문자열을 입력하면 Access Denied!가 나오게 되니 피해서 해결해야 합니다.



select lv from lv1 where lv=($go)

여기서 각 해결해야 할 조건에 해답은 아래와 같습니다.

  ① $go 변수가 괄호로 묶여있다.

   단순히 ()로 다시 묶어주면 됩니다.

   Ex) lv=(1) and (1=1)

  ② 공백을 사용할 수 없다.

   괄호는 공백과 유사한 역할을 합니다.

   Ex) lv=(1)and(1=1)

  ③ 2를 사용할 수 없다.

   수식을 사용할 수 있습니다.

   Ex) lv=(1)and(1=2-1)



select lv from lv1 where lv=(3)union(select(3-1)) 로 완성 시키면 됩니다.

하지만 서버에 문제로 인해 문제가 해결이 안되네요....


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

[webhacking.kr] prob 59  (0) 2018.12.20
[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

JOIN을 해서 가입 후 LOGIN을 하는데 lv 값이 'admin'이여야 합니다.



JOIN에 대한 소스를 확인해보면 id, phone에서 다양한 필터링을 하고 있고,

insert문에 'guest'가 하드코딩 되어있어 'admin'으로 바꿔주는 과정이 필요합니다.



간단하게 test/1 로 가입을 해봤는데 lv이 'guest'로 나와있는 것을 보면 insert문에 마지막 부분은 lv칼럼인 것이 확실해 졌습니다.




처음에 id부분에 별다른 필터링이 없기에 해당 부분을 공략했습니다.

insert into c59 values('hi',1,0x61646d696e)--',1,'guest')

하지만 해당 값은 싱글쿼터가 서버에서 막혀있는지 실행되지 않았습니다.



싱글쿼터를 사용하지 않고 해결을 해야 할 것으로 보이는데 phone부분에 reverse() 함수를 이용해서 해결할 수 있습니다.

insert into c59 values('nimda',1,reverse(id))--,'guest') 이와 같이 reverse()로 필터링 되어있는 admin의 값을 넣어줄 수 있습니다.


하지만 주석이 안되는지 실패하기에 insert문의 특징을 이용해서 해결했습니다.

insert into c59 values('nimda',1,reverse(id)),(1,1,'guest') 정확히 19글자로 20자리의 필터링에 걸리지 않습니다.






[LOGIN SQL문]



LOGIN부분에 바로 INJECTION이 가능하나 확인해 봤는데 되지 않았습니다.

tset/1, test/123 을 만들어 놓고 실험해봤습니다.




phone 값을 123aa로 입력해보니 올바른 값으로 인식하고 있습니다.



그렇다면 phone값을 1a23aa로 입력해봤는데 이 값도 올바른 값이라고 인식하고 있습니다.

여기서 생각해볼 수 있는 내용은 phone 값 중 문자가 나오는 순간 그 뒤에 값들을 모두 무시한다는 것입니다.

만약 서버쪽에서 설정되어 있다면 해당 부분은 injection pointer로 사용할 수 없습니다.



id부분에는 싱글쿼터를 반드시 사용해야 하는데 해당 기능이 서버에서 막혀있으면 injection pointer로 사용할 수 없습니다.



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

[webhacking.kr] prob 7  (0) 2018.12.21
[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

값을 1을 입력할 때는 zzibong가 나오고 다른 값을 입력하면 아무것도 나오지 않습니다.



① union select 필터링

② order by 필터링

③ limit 필터링

이 되어 있습니다.

해당 방법들을 제외하고 문제를 해결해야 합니다.




우선 lv 값을 모르기에 새로운 조건으로 검색하기 위해서 or를 대신한 || 를 사용합니다.

공백과 %09을 대신해서 %0a로 대신합니다.

또한, 싱글쿼터가 막혀있어 HEX값으로 대신합니다.


그렇게 만들어지는 값인 2%0a||%0aid=0x61646d696e 를 URL에 입력하면 성공합니다.

URL이 아닌 TEXT BOX에 입력하게 되면 URL 인코딩되어 올바른 값을 전달할 수 없습니다.


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

[webhacking.kr] prob 7  (0) 2018.12.21
[webhacking.kr] prob 59  (0) 2018.12.20
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

+ Recent posts