Challenge 7
7번 문제입니다. Union을 이용한 SQL Injection 문제입니다.
auth 버튼을 눌러보면 그림과 같이 Access_Denied!라는 알림창이 하나 뜹니다.
페이지 소스보기를 하니 index.phps가 있네요
처음 힌트입니다. DB에는 val=2라는 값이 존재하지 않으니 Union을 이용하여 문제를 해결해야 합니다.
문제의 PHP소스 입니다.
문제를 해결할 수 있는 조건을 생각해야합니다.
소스를 천천히 보니 사용할수 없는 문구를이 있습니다.
rand 부분은 패스하겠습니다. 이 부분은 괄호 갯수만 맞추어 주면 됩니다.
If문이 보이네요. 쿼리 결과 값으로 1도 아니고 2도 아니면 중지됩니다.
마지막으로 쿼리 결과 값이 2라면 문제가 해결되는 방식입니다.
해결 조건 :
1. DB에 2라는 값은 없다. Union을 사용해야한다.
2. 금지된 해당 단어를 사용하면 안된다. 공백포함
3. 결과 값이 1이거나 2이어야 한다.
4. 결과 값이 2라면 문제가 해결된다.
SQL Injection 문제를 풀는데 있어서 제일 좋은 방법은 비슷한 환경을 만들어서 여러번 실습을 해보시는 것이 좋습니다.
물론 저런식으로 소스가 있을때 말이죠. 물론 약간씩 차이점이 있긴하지만 저는 이런식으로 많이 연습을 해보았습니다.
Union을 이용하여 2가 출력되도록 쿼리를 실행 시켜 보았습니다. 2가 출력되었습니다.
하지만 조건에 부합하지가 않죠!
공백을 처리해야 하며, 숫자 2를 사용할 수 없죠 ㅠㅠ
여기서 아스키코드와 Hex값을 이용하려해도 금지되어 있습니다. 하지만 Select문에서도 연산이 가능합니다.
이런 식으로 충분히 우회가 가능합니다.
이제 결과 값이 2가 되는 조건을 만족 시켰으니 공백과 괄호 부분만 만족시키면 됩니다.
공백의 경우에는 URL인코딩을 한다면 %20이나 +가 되죠. 이 부분도 막혀있기 때문에 %0A(개행문자)를 사용하면 될 것 같습니다.
조건을 모두 만족시켜 쿼리문을 입력한다며 이러한 형태로 돌아갈 것 같습니다.
이제 이 쿼리문을 문제에 적용시켜 보겠습니다.
랜덤한 괄호수 때문에 몇번 새로고침을 하니 문제가 해결되었습니다.
'Wargame | CTF > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge 9 (0) | 2016.11.13 |
---|---|
[Webhacking.kr] Challenge 8 (0) | 2016.11.13 |
[Webhacking.kr] Challege 6 (0) | 2016.11.07 |
Webhacking.kr Challenge 5 (0) | 2016.11.06 |
Webhacking.kr Challenge 4 (0) | 2016.11.06 |