2022. 4. 12. 12:03ㆍSite/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 |