Admin page 딱 써있고 auth 라는 버튼이 있다.
소스를 보자
val 이라는 변수를 get 방식으로 가져오고 go 변수에 저장
아무값도 안넣으면 초기값으로 돌아가고,
필터링해서 go 변수에 2,-, +,from , _ , = , \\s, \*. \ 가 있으면 access denied!가나옴
이외의 경우에는 db에 접속한다.
접속할 때 rand라는 random 변수에 들어가는데
( )의 개수가 다른거 빼고는 다 똑같다. 저거를 이용해야 하는 문제겠지.
어느 rand를 가져오던지 result 값을 가져오게 되어있다.
그걸 data 변수에 저장한다.
data[0]이 1인 경우에 alert 창으로 Access_Denied가 뜨고,
data[0]이 존재하지 않으면 나가고, data[0]이 2인 경우에 문제가 풀린다.
________________________________________________________________________________
data[0]이 의미하는게 뭔지 궁금하다 -> 아마도 lv 값이겠거니 해야겠다. 즉 lv=2 를 만들어줘야
한다는 의미이다. 2가 필터링 당했으니까, 잘 해보자.
$result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");
$result=mysqli_query($db,"select lv from chall7 where lv=() or id='admin'%23)") or die("nice try!");
일단 sql injection을 하기 위해서 ( ) 의 개수를 알아야 query 를 작성할 수 있다.
20프로의 확률로 작동하겠지만,,,,, 일단 넣어보자
2 필터링 때문에 ' 이랑 #이 다 걸린다. =도 필터링 된다.
2는 chr(50)으로 우회해주고
=는 like 함수를 이용해서 우회하자.
공백자체는 ( )로 필터링 해줘야되겠다.
주석은 ;%00 으로 우회해주자.
?val=0)union(select(chr(50))
$result=mysqli_query($db,"select lv from chall7 where lv=(0)union(select(chr(50)))") or die("nice try!");
이렇게 되니까
select lv from chall7 where lv=(0) 이거랑
(select(chr(50))) 이거랑 테이블을 합쳐서 생각한다는 것.
앞에 꺼에서는 아무것도 없으니까
뒤에 query 에서 무언가가 나올꺼다.
'WriteUp > Webhacking.kr' 카테고리의 다른 글
webhacking.kr : challenge 12 (0) | 2020.09.11 |
---|---|
webhacking.kr : challenge 8 (0) | 2020.09.11 |
webhacking.kr : challenge 6 (0) | 2020.09.11 |
webhacking.kr : challenge 5 (0) | 2020.09.11 |
webhacking.kr : challenge 4 (0) | 2020.09.11 |