본문 바로가기
워게임/LOS

[los - SQL injection] troll ( 8단계 )

by B T Y 2017. 9. 23.
반응형

[los - SQL injection] troll ( 8단계 )







[ 풀이과정 ]



troll은 if($result['id'] == 'admin') 조건을 만족해야 solve("troll");가 실행되면서 문제가 풀린다.

다만, 이 문제를 풀기전에 코드를 전체적으로 보면 if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");와

if(@ereg("admin",$_GET[id])) exit("HeHe"); 코드가 있어서 싱글 쿼터를 이용할 수가 없고

admin이라는 문자를 입력 할 수가 없다...


싱글 쿼터를 없애서 참/거짓을 판단하고 sql 인젝션을 시도하려고 해도 싱글 쿼터로 감싸져 있기 때문에

다른 SQL 함수들의 기능이 동작하지 않고 문자열로만 출력이 됬다.


그래서 다른 방법을 찾아보다가 https://dev.mysql.com/doc/refman/5.5/en/string-literals.html에서 방법을 발견했다..

SQL에서는 싱글 쿼터로 감싸져 있어도 '\' 문자를 해당 문자열 사이에 작성하면 

문자를 잘라서 입력하는것과 같은 기능이 있다.




그래서 이 기능을 이용해서 id='ad\min'과 같이 입력을 하면 php에서는 \가 문자로 인식되 'ad\min'으로 인식하지만

SQL에서 동작할때는 \는 문자가 아닌 하나의 기능으로 인식이 되기 때문에

php 패턴 매칭에서 admin이라는 필터링도 피할수 있고 id에 admin 값을 입력 할 수가 있었다.

해당 방법을 몰라서 오래 고민을 했는데 의외로 답은 간단하였다..

SQL에 대해서 더 잘 알고 있었다면 금방 방법을 찾아낼수 있는 문제였다...


select id from prob_troll where id='ad\min'


  - 문자열 필터링

  - ereg() 함수 취약점, 대소문자


물론 이방법 외에도 ereg() 함수의 취약점을 이용하거나 대소문자를 이용해서 문제를 풀어낼수도 있고

그외에도 방법은 더 있을수 있다..


SQL 전체적인 인프라에 대한 이해가 필요함을 느끼게 해주는 문제였다.. 더 공부해야된다..




8단계 클리어~~


반응형

댓글