본문 바로가기

[Secuinside 2013] banking, write up 이번 문제의 핵심은 웹소켓을 이용한다는 점과, 그 후에는 간단한 블라인드 인젝션 문제이다. 웹소켓을 사용하기 위해선, 파이썬 웹소켓 모듈이 필요하다. 구글을 통해서 다운받는다. 그리고나면, desc와 asc를 넣어주는 부분이 있는데, 해당부분을 통해서 인젝션이 가능하다. 정렬을 할때, order by a desc, b asc로 하게되면, a로 정렬한후, a가 같을때 b로 정렬하게 된다.이 특징을 이용해서, by a desc, if(1=1,b,c) asc로 넣어주게 되면 블라인드 인젝션이 가능하다. 상황에 따라 True와 False가 의미하는 결과가 다르기때문에, 주의해야한다. from websocket import create_connection import json import pprint import.. 더보기
[Secuinside 2013] givemeshell, write up 파일디스크립터 문제이다. 쉘에서, $ ls > file 으로 할때, file에 명령어의 결과가 저장된다는것은 다들 알것이다. 사실 이건 $ ls 1>file 을 생략한 버전이다. 1번은 stdout을 의미한다. (쉘 화면에 출력되는것)그외에 0번은 stdin이고, 2번은 stderr 이다. 문제를 보면, 5글자까지 system으로 실행을 시켜준다.하지만, fork로 되어있기때문에, 출력 결과값이 우리에게 돌아오지는 않는다.우리의 소켓번호는 4번으로 일정하다. (fork이기 때문에) 그렇다면, ls>&4 를 치게되면, 그 결과값을 4번 디스크립터인, 연결되어있는 소켓에 쏴준다.그러면 그 결과가 클라이언트에게 날아가게 된다. 대충 느낌이 왔으니, 이제 쉘을 실행한다. 쉘은 원래 0번 디스크립트인 stdin을.. 더보기
[Secuinside 2013] Bigfile of secret, write up http 헤더중 range에 관한 문제이다. Range의 bytes=x-y로 범위를 조작해주면, 응답페이지중 x번째부터 y번째까지의 바이트만을 출력해준다. import httplib,urllib; conn = httplib.HTTPConnection("119.70.231.180",80) conn.connect() conn.putrequest('GET','/secret_memo.txt') conn.putheader('Connection','keep-alive') conn.putheader('Range','bytes=100000000-100005000') conn.endheaders() response = conn.getresponse() data = response.read() print data 더보기