개념정리○ SQL InjectionSQL Injection은 웹 어플리케이션에서 입력 데이터의 유효성 검증을 하지 않아서 개발자가 의도하지 않은 동적 쿼리를 생성하여 DB 정보를 열람하거나 조작할 수 있는 보안 취약점이다. 웹 어플리케이션은 유저의 행동(클릭, 입력 등)에 따라 DB에 있는 데이터를 서로 다르게 표시한다. 이를 위해 Query는 유저가 입력한 데이터를 포함하여 Dynamic 하게 변하므로 개발자가 의도하지 않은 정보를 열람할 수 있게 된다. 예를 들어 다음 쿼리문을 이용해서 로그인을 수행한다고 해보자.select * from user where id = "{$id}" and pw = "{$pw}"만약, admin 계정으로 로그인하고 싶은 상황이라면 admin 계정에 맞는 id와 pw를 입..
개념정리○ WAF웹 방화벽(Web Application Firewall, WAF)은, 일반적인 네트워크 방화벽 (Firewall)과는 달리 웹 애플리케이션 보안에 특화되어 개발된 솔루션이다. 웹 방화벽의 기본 역할은 SQL Injection, Cross-Site Scripting(XSS)등 웹 공격을 탐지하고 차단하는 것이다. 웹 방화벽은 직접적인 웹 공격 대응 이 외에도 정보유출방지솔루션, 부정로그인방지솔루션, 웹사이트위변조방지솔루션 등으로 활용이 가능하다. 정보유출방지솔루션으로 웹 방화벽을 이용할 경우, 개인정보가 웹 게시판에 게시되거나 개인 정보가 포함된 파일 등이 웹을 통해 업로드 및 다운로드 되는 경우에 대해서 탐지하고 이에 대응하는 것이 가능하다. 문제분석 & 풀이SQLi 으로 WAF를 우회하..
문제분석 & 풀이md5 함수에 대한 언급이 있다. md5 함수 취약점에 관한 문제인 것 같다. password를 입력하는 칸과 코드가 있다. 코드 분석1. 전송한 password를 이스케이프 처리 (22번줄, sqli를 방지하기 위해 사용)2. sql 쿼리를 실행하고 결과 레코드를 $row에 저장 (23번줄)3. 결과가 존재하면 flag를 화면에 출력 (24~26번줄) DB에 저장된 password를 맞추면 해결된다. 그러나 DB에 저장된 password를 알 수 없고 sql 인젝션으로 DB에 있는 데이터를 알아내야한다. 코드분석 2번에서 실행하는 쿼리는 다음과 같다.select * from admin_password where password='".md5($ps,true)."' 입력한 passwor..
문제에 접속하니 소스만 있어서 바로 분석해봤다. 1. id 파라미터가 없으면 id 파라미터 값을 "guest"로 설정한다. (5번줄) 2. id에 addslashes()로 이스케이프 처리를 한다. (8번줄) 3. id에 ( , ) , select , from , 콤마 , by , . 이 있으면 access denied 를 띄우면서 종료된다. (9번줄) 4. id의 길이가 15자리가 넘으면 프로그램 종료된다. (10번줄) 5. sql 쿼리를 실행해서 결과 id가 "admin"이면 문제가 해결된다. (11~14번줄) select id from chall61 order by id desc limit 1 우선 chall61 테이블에 존재하는 id 값 중 가장 높은 순서의 값이 뭔지 보기 위해 id 파라미터에 i..
문제에 접속하니 점수와 함께 초록모양의 아이콘이 있다. 마우스를 움직이면 점수가 쌓이면서 초록모양 아이콘이 마우스 방향으로 이동한다. rank 링크를 눌러서 들어가보니 순위표가 나열되어있다. 하단을 확인해보니 위와 같은 php 코드가 보인다. 소스를 자세히 보면 insert 문 맨 오른쪽에 $flag 값이 있는 것을 확인 할 수 있다. insert 문을 이용해 DB에 rank를 저장하는데 이때, flag값도 같이 저장하는 것 같다. 다시 돌아와서 순위표를 보면 score 부분에 하이퍼링크가 있어서 눌러보니 id 와 점수가 상단에 뜨는 것을 확인 할 수 있다. 추가적으로 URL 부분을 보니 score 파라미터를 이용해 점수를 보내서 상단에 정보를 출력하는 것을 알 수 있다. 이번에는 score 파라미터 값..