본문 바로가기
반응형

전체 글87

Python 자동화 코드 구현하기 : Blind SQL Injection Lord of SQLInjection 4단계 문제를 풀면서, 자동화 코드의 필요성을 느꼈다. 파이썬으로 LOS 4단계 풀이용 코드를 구현해보았다. LOS 4단계 풀이 : [WarGames/SQL Injection] - Lord of SQL Injection : Orc[4] 생각보다 간단하게 짤 수 있으니 포스팅을 참고하여 직접 구현해보면 좋을 것 같다. ① Requests LOS 4단계를 자동화 코드로 풀기 위해서는 해당 URL에 접속해서 SQL 구문을 넣어보고, 맞는지 틀리는지에 따라 또 다른 구문을 넣는 작업을 반복해야 한다. 따라서 HTTP 라이브러리인 requests를 import 해준다. requests는 위와 같이 간단하게 사용할 수 있다. get 메소드를 사용하여 url에 접속하고, stat.. 2021. 11. 16.
XSS : Cross-Site Scripting ① XSS란? XSS는 이용자가 입력한 값이 서버에서 그대로 응답되는 것을 이용한 공격이다. (Dom Based XSS 제외) 웹 페이지에 스크립트를 삽입할 수 있기 때문에 생기는 취약점이다. 스크립트는 Server Side Script : Php, Jsp, Asp & Client Side Script : HTML, JavaScript로 나눌 수 있는데, XSS는 Client 측 스크립트를 삽입하는 공격이다. 클라이언트 언어인 JavaScript를 실행하여 공격하는 방식이기 때문에 서버에 직접적인 영향을 미치지는 못해서 파급력이 낮다고 알려져 있지만, XSS를 응용한 공격이 많기 때문에 간과해서는 안된다. ② XSS 종류 XSS는 스크립트 삽입 위치와 방식에 따라 크게 Stored, Reflected, .. 2021. 11. 15.
Bandit : Level 31 ~ Level 33 [Level 31] Git Tag 전 단계와 동일하게 /tmp에 bandit30 폴더를 하나 만들어준 후 클론을 받아온다. (무아하하라니ㅋㅋ) 전 단계에서 사용했던 Commit 기록과 Branch는 모두 하나밖에 존재하지 않았다. $ man git을 통해 사용할만한 명령어가 있나 찾아보았다. 몇 가지를 써보다가 $ git tag를 하니 secret이라는 태그가 하나 등장했다. 태그는 처음 들어보는데, Commit에 알기 쉬운 이름을 붙이는 용도로 쓰인다고 한다. 종류도 두 가지로, 이름만 붙일 수 있는 Lightweight tag와 서명이나 설명까지 포함 가능한 Annotated tag가 존재한다. Commit 이름이 복잡한 문자열로 생성되니 태그를 붙여 쉽게 Checkout 하기 위해 사용되는 것 같다.. 2021. 11. 14.
Lord of SQL Injection : Orc[4] [Level 4. Orc] Sol → ?pw=095a9852 우선 코드를 분석해보자. id가 admin인 사용자가 들어오면 Hello admin이 뜬다. 단계를 클리어하기 위해서는 DB에서 가져온 pw와 addslashes()를 통해 '앞에 \를 붙여준 pw가 일치해야 한다. Blind SQLi를 사용해서 id가 admin인 사용자의 패스워드를 직접 알아내 보자. Blind SQLi는 쿼리의 참과 거짓에 따라 응답이 달라지는 것을 이용해야 하므로 pw=' or 1 = 1 #과 pw=' or 1 = 2#를 넣어 응답을 살펴보자. (or로 연결한 이유는 pw = ''가 무조건 거짓이기 때문에 뒤에 오는 쿼리에 참/거짓에 따라 응답이 달라지기 때문이다.) /?pw=' or 1 = 1 %23 /?pw = ' o.. 2021. 11. 13.
SQL Injection 대응 방법 지금까지 SQL Injection의 개념과 다양한 공격 방법에 대해 알아보았다. SQL Injection 취약점은 데이터 유출로 이어지므로, 이를 막기 위한 대응 방안이 필요하다. Q) 왜 발생하는가? SQL injection이 가능한 이유는 결국 사용자가 입력한 값을 그대로 SQL 구문에 포함하기 때문이다. 따라서 SQL Injection에 대응하기 위해서는 사용자의 입력 값을 한번 검사할 필요가 있다. ① Prepared Statement prepared statement 혹은 parameterized statement는 SQL 구문을 먼저 컴파일한 이후에 사용자의 입력값을 바인딩하는 방식을 사용한다. 특정 값을 지정하지 않은 SQL 구문을 하나의 템플릿으로 만들어둔 후, 실행할 때 변수에 값을 지정.. 2021. 11. 12.
Php로 웹 개발하기 : 게시판(4) - Create 이번에는 글 작성 기능을 만들어보자! 우선 제목과 내용을 적고 제출할 수 있는 form 하나를 만들자. input text과 textarea로 값을 받아서 board_create.php로 전달한다. 기존에 만든 게시판 데이터를 관리하는 board 테이블은 내용을 넣을 컬럼이 없으니 content 컬럼을 추가해주자. ALTER table `board` ADD `content` varchar(10000) NOT NULL; update board set content = 'hello' where username = 'normaltic'; ALTER로 컬럼을 추가해준 후, update 방식으로 content를 추가해준다. 이제 제목과 내용을 title과 content에 추가해야 하는데, 그 외에 username.. 2021. 11. 11.