level61[old]

2022. 4. 12. 12:03Site/Webhacking.kr

이번시간에는 level61을 풀어보겠습니다

공부하는 입장이니 틀린것 이있더라도 양해부탁드리겠습니다


level61번에 들어가니 view-source 가 보입니다

소스코드부터 확인해 보겠습니다


$_GET[' id '] 가 없다면 guest를 $_GET[' id ']에 넣음

addslashes함수로 $_GET[' id ']를 필터링

pregmatch함수로 ( ) select from , by . 을 필터링

$_GET[' id ']의 길이가 15보가 크면 아웃

쿼리문에서 chall61테이블에서 입력값 $_GET[' id ']을 출력하는데 id를 내림차순으로 정렬한뒤 출력개수를 1개로 제한함

select {$_GET['id']} from chall61 order by id desc limit 1

$_GET[' id '] 가 admin이면 클리어

 

이 문제에서 특이한 부분은 쿼리문 부분에 $_GET[' id ']를 넘겨주지 않고 select 구문이 들어가네요...

$_GET[' id ']에 admin만 넣어주면 chall61테이블에서 admin의 id값이 출력이되어서 result[' id '] == "admin" 조건을 만족할것 같습니다.

 

"select 'admin' from chall61"# order by id desc limit 1"

order부터 주석처리해주고 select 부분에 admin을 넣어주면 클리어 될 것 같은데 제약사항이 2개가 존재합니다

1. addslashes함수 때문에 ' 필터링

2. from 필터링

 

 admin을 hex값으로 변경해서 넣어주면서 '를 우회하고 추가적으로 찾아보니 as를 이용해서 admin의 hex값의 컬럼명도 id로 변경해주면은 해결이 될 것 같습니다[admin -> 0x61646d696e]

 

값을 넣어주었는데 Acess Denied라고 뜹니다[?]

 

다시 소스코드를 확인해보니깐

소스코드에서 $_GET[' id '] 길이가 15 보다 길면 아웃이라는데 보니 15보다 길었네요

sql에서는 alias는 생략이 가능하기 때문에 생략시켜주면 길이가 15보다 작아서 가능할 것 같습니다

 

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

level19[old]  (0) 2022.04.13
level31[old]  (0) 2022.04.12
level58[old]  (0) 2022.04.10
level33[old]  (0) 2022.04.10
level20[old]  (0) 2022.04.10