WebHacking/Lord of SQLInjection

문제의 요지 - 주석 우회 가능여부, 자동형변환을 아는가 문제정보 - pw 파람에서 /prob, _ , . , (), # - 필터링하고있음 - pw 파라미터의 길이가 6 초과면 php 가 die - 쿼리문이 실행되는데 id 컬럼의 value 가 있으면 문제가 solve됨. pw=') or 1 /**/ 을 넣어도 최소 길이가 6이 넘어가기 때문에 결국에는 pw 칼람을 True 로 만들어주어야함. 첫번쨰로 pw=') 을 넣으면 아래의 쿼리가 실행되는데 이것은 오류임 두번쨰로 pw=')=0 을 마찬가지고 오류지만 블럭친곳 이후의 문자들이 없다 생각하면 이것은 where 절이 True 가 되어 문제가 solve 될것임. whrere pw=('') 는 빈문자을 뜻하며 빈문자는 곧 False 이고 0 이기 때문에 ..
이번문제는 이전문제와 비슷하다. 소스코드에서 실행되는 쿼리문에 써져있는 싱글쿼터를 어떤 방법으로 우회할 것이냐에 대한 문제이다. 약간 다른점은 id, pw 파람으로 받은 값에 addslash 를 추가하고 그 문자열을 reverse 한다. 거기서 id, pw 컬럼 모두 /prob, _ , . , () 문자를 대소문자 구분없이 필터링하고 있다. 그외에는 딱히 볼것이 없다. id 파람에 " 를 넣으면 addslash 함수 때문에 " 뒤에 백슬래시가 추가된다. 하지만 여기서 취약점이 발생하는데, 백슬래시 뒤에 싱글쿼터가 있어 문자열로 escape 된다. 그리고 나서 pw 파람에 or 1=1 %23 을 넣어주면 아래와같이 클리어를 할 수 있다. 그 이유는 쿼리문에서 밑줄친부분이 문자열취급이 되기 때문이다. 그리고..
이번문제는 간단하다. 소스코드를 보면 id, pw 파라미터 모두 싱글쿼터 (') 를 필터링하고 있으며, /prob, _, . , (), 는 대소문자구분없이 필터링하고 있다. 딱히 설명할게 없는데, id 파람에 백슬래시( \ ) 를 넣고 pw 파람에 or 1=1 %23 을 넣는다. 이렇게되면 소스코드에서 실행되는 select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}' 가 select id from prob_succubus where id='\' and pw=' or 1=1 #' 처럼 변한다. 요약하면, \ 백슬래시를 넣어서 쿼리문에 있는 싱글쿼터를 문자열로 인식하게 escape 시킨 것이다. 따라서, 아래 빨간줄은 모두 문자열로 인..
이번문제는 like 문을 이용해서 admin 의 pw 값을 알아내야한다. 즉, 자동화가 필요한 문제이다. 우선 소스코드를 보면 pw 파람 하나만 받고있으며 이 값은 쿼리문의 like 절 뒤에 들어가 실행된다. 일반 적인 like 문은 아래와 같이 사용된다. like 'admin' like 0x61646d696e 하지만 like 문은 % 와 _ 를 통해 패턴 매칭을 할 수 있는데 % 은 모든 문자를 의미하고. (정규식으로는 아스타리스(*) 와 같은 역할을 한다.) _ 은 문자 하나를 의미한다. (따라서 _ 여러개로 pw 컬럼의 길이를 알아낼 수 있다.) like '%admin' like 'admin%' like '%admin%' like '__' _ 를 통해서 pw 의 길이를 알아낼 수 있는데, 간단하게 ..
이번 문제는 공백우회 문자를 얼마나 알고있냐를 묻는 문제임 소스코드를 보면 실행되는 쿼리문에 GET 으로 받은 shit 파람이 들어가는데 공백이 필요함. 이를 증명하고있는것이 소스코드 초반에 strlen 길이를 검사하는데 1 이상이면 php 가 죽는다는 것으로 이번문제는 단순 공백문자를 우회하면 되는 것 소스코드상에서 공백, \n (개행), \r (%0d : Carriage return) , \t (%09 : 탭)를 막아두고 있는데 이는 %0b(vertical tab = 수직 탭), %0c(np form feed, new page = 프린트 출력 시 현재 페이지를 마침) 문자로 우회 가능함.
no param 은 /prob, _ , . , () , ' , substr , ascii , = , or , and , 공백 , like , 0x , 를 필터링 중 pw param 은 ' 하나 만 필터링중 이전 문제인 darknight 과 비슷하지만 like 와 0x 를 필터링하고 있음. 다라서 문자열을 16 진수로 치환하는것이 불가능 우선 Hello admin 이 출력되도록 쿼리문을 조작해주어야 하는데 no param 을 사용할 수 있음. 1. substr -> substring -> right(right(컬럼,1),1) 2. 공백 -> %09 (탭) 2. = -> like -> in 3. ' ' -> ("admin") 으로 우회 가능 위에 같은 방법으로 우회해주면 우회 Hello admin 을 출력 ..
no param -> /prob , _ , . , () , , substr, ascii , ' , = 문자를 대소문자 구분없이 필터링 pw pararm -> ' 하나만 필터링 id 컬럼을 뽑아와서 Hello id 포맷으로 출력하고 있음 -> Hello guest 말고 Hello admin 이 출력되게 해야함. pw 컬럼을 결과존재 여부와 pw pararm 와 pw 컬럼의 결과를 비교하여 같으면 문제 해결 -> pw 컬럼의 값을 알아내야 함. Hello admin 을 출력시키기 위해 no param 을 사용. substr 과 ascii 함수를 필터링하고 있기 떄문에 substring() 함수를 생각할 수 있는데 이 또한 substr 문자열이 들어가기 때문에 불가. 따라서 mid() 함수나 right(lef..
이번문제는 아래와 같은 스킬이 요구된다. exploit code 작성. substr() 함수 우회, = 우회, or 그리고 and 우회 소스코드 분석은 아래와 같다. GET 으로 pw 파라미터를 받고 대소문자를 구분하지 않고 prob, _ , . , () 문자가 나오면 No hack 이뜨고 PHP 가 죽는다. 그리고 이번에는 or , and, substr 함수, = 문자도 필터링한다. 그리고 쿼리문이 수행되는데 id 가 guest 인 쿼리가 수행되며 이 쿼리에서 출력된 row의 id 컬럼이 echo Hello 와 함께 출력된다. 즉, 이것은 기본적인 인증우회로 id 가 admin 인 쿼리가 수행되도록 해야 한다. 한줄 띄고, 이번에는 id 가 admin 인 쿼리가 수행된다. 그리고 그 결과에서 pw 컬럼..
이번문제는 딱히 설명할게 없다. Basic 한 문제라 생각한다. 소스코드 분석은 아래와 같다. 우선 GET 으로 pw 파라미터를 받는데 정규식으로 prob, _ , . , () 가 들어가면 No Hack 이뜨며 PHP 가 죽는다 그리고 필터링한 pw 파라미터값이 where 절에 들어가서 쿼리문이 수행되는데, 디폴트로 id가 guest 인 값을 찾고 있다. 또한 뒤에 and 1=0 이 나오는데 이는 False 값이기 때문에 where 문이 정상적으로 실행된다해도 and False 때문에 empty 쿼리가 결과로 나올 것이다. 따라서 이번 문제의 요지는 뒤에 and 1=0 을 주석으로 우회하고 ' or id='admin' 으로 우회해주면된다. ' or id='admin' %23 ' or id='admin' ..
해당문제도 간단하다. 이번 문제에서 요구하는 바는 PHP 의 str_replace 취약점을 알고있냐에 대해 물어보는 문제이다. 소스코드분석은 아래와같다. 이전문제와동일하게 싱글쿼터 ( ' ) 를 필터링하고있다. 이어서 GET 방식으로 받은 id 파라미터의 값을 strtolower 로 치환한다음, 그 치환한값에서 admin 이라는 문자열을 공백문자인 "" 로 바꾸고있다. 그리고 필터링되고 치환된 id 파라미터의 값을 where 절에 넣고 이를 기반으로 쿼리문이 수행된다. 마지막으로 result 변수에 쿼리문의 결과가 저장되는데, 여기서 id 컬럼이 admin 이면 문제가 통과된다. 우선 문제풀이를 위해서는 두가지를 해결해야한다. 1. id 컬럼의 값이 admin 이 나오도록 해결해야한다. 2. str_re..
REVI1337
'WebHacking/Lord of SQLInjection' 카테고리의 글 목록