Wargame/The Lord of the SQLI

    Los.Rubiya.kr - goblin write up

    문제의 소스코드를 분석해보자 우리가 할 수 있는 건 no 파라미터에 값을 전송하는 것이다. 하지만 preg_match 함수(문자열 체크 함수)를 살펴보면 '(싱글쿼터) 와 "(더블쿼터), `(백쿼터) 를 막고있는 것을 확인할 수 있다. 즉, 우린 쿼터 없이 문제를 풀어야 한다. no 파라미터를 보면 현재 숫자로 입력받는 것을 알 수 있다. 숫자로 입력을 받는 경우, '(싱글쿼터) 없이 공백으로 no에 들어가는 값을 조절할 수 있다. ?no=1 or id=0x61646d696e %23 no 엔 아무 숫자나 넣고, id가 admin이여야 solve 함수가 실행되므로 id엔 admin 문자열을 넣어줘야 한다. 하지만 id=0x61646d696e 라는 이상한 값을 집어넣어줬다. 이 값은16진수로, string ..

    LoS.Rubiya.kr - cobolt write up

    문제 첫 화면에 늘 그랬듯이 php 소스코드가 보인다. 이 소스코드를 분석해보자면 기본적인 공격가능한 문자를 막고있고, query문을 통해 입력받은 id와 pw를 통해 MySQL DB에서 정보를 가져온다. 또, DB에서 가져온 id값이 admin이면 solve("cobolt") 함수를 실행해주고 있다. 그런데 pw를 받는 코드를 자세히 보면 md5() 함수를 통해 암호화하고있다. 즉, 이번문제에선 pw를 사용하지 않고 풀 수 있다는 것이다. id 파라미터를 넘길 때 값을 admin'%23 으로 넘겨주면, id 변수엔 'admin'이란 문자가 담기게 되고, '(싱글쿼터)를 사용함으로써 query문의 싱글쿼터가 닫히게 되고(SQL injection의 기본적인 escape 방식), id 변수에 들어갈 값은 여..

    LoS.Rubiya.kr - gremlin write up

    gremlin 이라는 문제에 들어가보면 이러한 php 코드가 나온다. 대충 코드를 분석해보자면 기본적인 database 를 어택할 수 있는 키워드들은 막아놓은 상태이고, 파라미터로 id와 pw를 GET방식으로 입력받아 Query 를 작성하여, 만약 그 쿼리에 입력된 id값이 있다면 solve("gremlin") 함수를 실행시켜준다. 이 함수를 실행시키면 문제가 풀릴 것이라 생각하고 문제를 풀어보았다. 이 문제는 기본적인 SQL Injection 문제이다. 따라서 간단한 쿼리를 작성해보았다. ?id=admin' or '1==1' %23 # id가 admin이거나 1이 1과 같으면 참(%23 : #으로, 뒤 쿼리 내용을 주석처리) # 무조건 같게 만드는 식이므로 결과적으로 참이 나와 쿼리문이 실행된다. 그리..