본문 바로가기
개인 공부/WEB

[웹해킹] LOS 18 - (Nightmare)

by 아메리카노와떡볶이 2021. 6. 19.
728x90
Lord of sql injection - Nightmare 풀이

los 18번 Nightmare에 대한 풀이 포스팅입니다.

 

문제 접근

where 뒤에 오는 pw의 입력값을 조절하여 id를 획득하면 문제를 해결할 수 있습니다.

필터링 조건은 다음과 같고, 입력값이 6자리 이상이면 안된다는 추가적인 조건도 있습니다.

if(preg_match('/prob|_|\.|\(\)|#|-/i'$_GET[pw])) exit("No Hack ~_~"); 
if(
strlen($_GET[pw])>6) exit("No Hack ~_~"); 

여러 시도를 해보아도 접근 방법이 잘 안떠올라서 힌트를 찾아 본 결과 자동 형 변환이라는 키워드가 나왔습니다.

Auto type cast란
 
Mysql은 비교나 검색을 수행할 때 데이터의 타입이 서로 다른 경우, 내부적으로 타입이 같아지도록 자동으로 형변환 처리를 합니다. 즉 서로 다른 데이터형의 값을 비교해도 이 auto type cast가 실행되어 문제가 발생하지않는다는 것입니다

이것을 sql injection에 적용해서, 변수에 숫자를 사용할 수 없는 경우에는 아래와 같이 자동형변환을 우회법으로 사용할 수 있습니다.

false = 0
true = 1
true+true = 2
floor(version() ) = 5

 

자동 형 변환에 의해서 문자열이나 ''가 숫자 0으로 반환되기때문에 이것을 이용합니다.

 

그리고 뒤의 and 부터 구문은 주석처리해야하는데

주석 처리하는 다음 4가지 방법 중 필터링 하지 않는 방법을 사용합니다.

1. --%20
2. %23
3. /**/
4. ;%00

따라서 형변환과 4번방식의 주석처리를 사용하여 다음과 같이 작성합니다.

?pw=')=0;%00

그 결과

query : select id from prob_nightmare where pw=('')=0;') and id!='admin'

뒤의 구문이 주석처리되고, 앞의 ('')은 0으로 반환되면서 항상 참이 되어 반환됩니다.

 

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] LOS 20 - (Dragon)  (0) 2021.06.19
[웹해킹] LOS 19 - (Xavis)  (0) 2021.06.19
[웹해킹] LOS 17 - (Zombie Assassin)  (0) 2021.06.19
[웹해킹] LOS 16 - (Succubus)  (0) 2021.06.19
[웹해킹] LOS 15 - (Assassin)  (1) 2021.06.19

댓글