티스토리 뷰

60번째 글.

 

 

1. 코드 분석

single, double quote는 필터링되고 있었다.

query에서 쿼리 스트링으로 id와 pw 값을 받고 그 조건에 맞는 id와 pw를 조회하여 그것을 다시

query2의 조건문에 조건으로 입력한다.

결과적으로 query2의 결과의 id가 admin이면 문제는 풀리게 된다.

 

 

2. Exploit

'\'을 이용해서 single quote를 escape하는 것은 전에 풀던 문제에서도 나왔기 때문에 알았다.

하지만 id=admin을 해봐도 결과가 출력되지 않아서 한 가지 의문이 들었다.

테이블에 값이 없는 것이다. 그렇다면 적절하게 union을 섞어주면 임의의 값을 넣을 수 있지 않을까?라는 생각을 하였다.

 

 

?id=\&pw=union select 1,2%23

이렇게 주게되면

 

 

조회하는 구문은 조건문이 dummy이기 때문에 분명 아무런 값도 조회하지 못할 것이고 union에 의해서 1과 2만 조회가 되어서 1과 2가 query2의 조건으로 들어간다.

그렇다면 union select에서 적절하게 query2가 동작할 수 있도록 해야 한다.

사실 여기서 오래 걸렸다. hex값을 이용해야 한다는 생각을 하지 못했기 때문...

union select '\', union select 'admin'# 이런 식으로 전달을 해야 하는데 single quote가 막혀있기 때문에

hex 값으로 변환해서 전달해야 한다.

의문이 드는 부분이 있었는데 스트링을 hex값으로 변환하면 single quote는 상관이 없을까?라는 의문이 들었다.

테스트를 할 수 있는 사이트에서 hex값으로 변환 후에 select하는 테스트를 해봤는데 

 

 

결괏값으로 'albert'가 잘 찍혔다. (0x616c62657274=albert)

 

 

?id=\&pw=union select 0x5c,0x756e696f6e2073656c6563742030783631363436643639366523%23

(0x756e696f6e2073656c6563742030783631363436643639366523=union select 0x61646d696e#)

(0x61646d696e=admin)

 

 

'writeup > LOS' 카테고리의 다른 글

[Lord of SQL injection] blue_dragon  (0) 2021.08.09
[Lord of SQL injection] red_dragon  (0) 2021.08.05
[Lord of SQL injection] evil_wizard  (0) 2021.07.29
[Lord of SQL injection] hell_fire  (0) 2021.07.27
[Lord of SQL injection] dark_eyes  (0) 2021.07.26