본문 바로가기

파이썬 프로그래밍

webhacking.kr [문제 26번] 25번에 이어 26번문제를 풀어보자. 해당 문제의 배점은 100point이며, 이 문제 또한 다소 쉬울 것으로 예상된다. 해당 문제를 접속하니 index.phps라고 인덱스 페이지의 소스코드가 주어진 것을 확인할 수 있다. 클릭해보자. 소스코드를 보니 상당히 쉽다. 분석) if(eregi("admin",$_GET[id])) { echo("no!"); exit(); } // GET방식으로 넘어온 id 변수의 값이 'admin'이면 "no!"를 출력 후 종료한다. $_GET[id]=urldecode($_GET[id]); // GET 방식으로 넘어온 id값을 urldecode하여 담는다. if($_GET[id]=="admin") // 해당 변수의 값이 'admin'일 경우 { @solve(26,100); //.. 더보기
webhacking.kr [문제 25번] 25번 문제를 풀어보겠다. 해당 문제의 배점은 150point로 확인된다. 해당 페이지를 확인하니 리눅스에서 디렉토리 및 파일을 확인(ls -l)할 때 나오는 화면이다. 조금만 해당 페이지를 분석해보자. 별다른 정보는 찾을 수 없다. 한번 url을 변경하여 해당 페이지에 접속해보자. 해당 파일을 접속해본 결과 메인 페이지의 인풋박스 안에 보여졌던 hello world라는 문자열을 담고있었다. 그리고 한가지더 해당 url에서 hello라는 문자열을 GET방식으로 전달한 결과 보여졌다. 그러나 hello가 아닌 임의의 다른 문자열을 입력해도 hello.txt.의 내용을 보여줬다. 그렇다면 확장자 .txt는 고정되어있고, 만약 해당 파일이 없으면 디폴트로 hello.txt 파일을 보여주는 것으로 확인된다. 이.. 더보기
webhacking.kr [문제 24번] 24번 문제를 풀어보겠다. 해당 문제의 배점은 100point이며, 다소 쉬운 문제로 예상된다. 군말없이 클릭해보자. 현재 접속 클라이언트의 IP주소가 보여지며, Wrong IP!라는 메세지를 보여준다. 무언가 적절한 아이피 주소로 변경한다면, 해당 문제를 풀 수 있을 것 같다. 소스코드 또한 확인해보자. 소스코드에 눈에 띄는 부분이 있다. index.phps 를 제공하고 있다. 의심의 여지없이 확인해보자. 다음과 같은 소스코드를 보여주며, 해당 소스코드를 분석하여, 공격방법을 생각해보자. 코드 분석) 분석에 주석을 구체적으로 달아놓았으니 참고하자. 여기서 눈여겨 봐야할 부분이 '12'와 '7.' '0.'을 공백으로 대체한다는 것이다. 만약 112277..00..00..1 해당 문자열을 대입했을 경우, .. 더보기
python을 이용한 다중 채팅 구현하기 다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로 한 포스팅입니다. 파이썬을 이용하여 TCP 소켓을 이용한 다중채팅을 구현하여 보겠다. 구현에 앞서 몇가지 고려해야할 사항이 있는 데, 이를 언급하고 직접 코드로 보이겠다. 다중채팅은 기본적으로 에코서버를 기반으로 한다. 대화에 참여한 모든 클라이언트에게 받은 메세지를 전송하여 주면된다. [사용자ID : ] + ["사용자가 보낸 문자열"] 두번 째로 고려해야 할 사항은, 다중 클라이언트 채팅과 같은 경우는 비동기(asynchronous handling)로 처리해야한다. 이 말인 즉슨, 만약 소스코드에서 반복문을 이용하여 순차적으로 사용자에게 메세지를 처리하는 코드를 작성한다면, (동기식으로) 하나의 클라이언트에 대한 요청을 모두처리하고 두 .. 더보기
python을 이용한 파일 송수신 프로그램 다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로 한 포스팅입니다. 현재 21세기에서 우리는 네트워크를 통해 수많은 데이터를 주고받는다. 예를들어 우리가 아는 아프리카 TV는 UDP 이용한 동영상 스트리밍 서비스가 될 수 도있고, 즐겨하는 게임의 설치파일을 다운로드 하는 등의 다양한 파일이란 데이터도 주고 받을 수 있다. 이번 예제에서는 소켓을 이용한 파일의 송수신을 다뤄보겠다. 먼저 임의의 파일을 제공하기 위한 파일을 가지고 있는 서버가 필요하며, 실제로 파일을 요구하는 클라이언트가 필요하다. 이해를 돕기위한 모식도를 그려보면 다음과 같이 왼쪽의 3가지 컴퓨터(노트북, 스마트폰, 데스크톱)이 실제로 인터넷을 통해 서버에 파일을 요청하는 것을 알 수 있다. 그렇다면 우리는 파일을 제공하기.. 더보기
python을 이용한 간단한 슈팅게임 만들기 다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로 한 포스팅입니다. C나 C++을 이용해서 일반적인 게임을 구현하기 위해서는 파이썬에 비해 상대적으로 고려해야 할 것이많다. 허나 파이썬에서는 pygame이란 SDL(Simple DirectMedia Layer)기반의 게임 제작을 위해 사용되는 파이썬 확장 라이브러리를 이용하여 보다 손쉽게 게임을 개발할 수 있다. SDL은 C언어로 구현된 크로스플랫폼 멀티미디어 라이브러리이며, 비디오, 오디오, 사용자 입력 등과 같은 관련된 처리를 편리하게 수행 할 수 있도록 해준다. 실제로 만들 게임은 비행기(플레이어)가 날아오는 적을 격추시키는 간단한 형태의 슈팅게임인데, 시간이 지날수록 적의 속도가 빨라진다. 일반적인 게임의 규칙은 적과 비행기(플레이.. 더보기
python을 이용한 웹서버 로그 처리하기 다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로한 포스팅입니다. IT시대에서 많은 사람들은 인터넷 익스플로러나 크롬 등과 같은 인터넷 웹브라우저를 이용하여 웹서버에 접속하여 다양한 콘텐츠를 제공받습니다. 웹서버는 웹브라우저의 요청에 대해 필요한 작업을 수행하고 HTML 페이지를 구성한 후 웹브라우저로 응답합니다. 이때 웹서버는 웹브라우저의 요청에 대한 응답 내용을 요약하여 접근로그(access log)파일에 기록합니다. 아파치 웹서버에서는 접근로그의 파일을 다음과 같은 형식의 로그로 저장합니다. 127.0.0.1 - - [01/Oct/2016:13:55:36 +0900] "GET /apache_pb.gif HTTP/1.0" 200 2326 각 형식의 요소는 다음과 같이 분리됩니다. Ho.. 더보기
python을 이용한 연도별 출생아 수 계산하기 다음 프로젝트는 서적 '초보자를 위한 파이썬 200제'를 기반으로한 포스팅입니다. 미국의 Social Security Administarion은 1880년 이후 현재까지 미국에서 출생한 남녀 아기들의 이름별 출생아 수를 년도별로 저장한 데이터를 일반인에게 공개하고 있다. 다음의 링크 https://catalog.data.gov/dataset/baby-names-from-social-security-card-applications-national-level-data로 접속하면 다음과 같은 홈페이지를 확인할 수 있다. 다음의 압축파일을 다운로드 한뒤 압축 해제하게 되면 연도별로 이루어진 텍스트 파일을 확인할 수 있으며,그 중 하나를 확인해보자 아기이름,성별,출생아수 로 이루어진 데이터들을 확인할 수 있다. .. 더보기