본문 바로가기

web

[defcon 2013] 3dub, babysfirst, exploit sqlite injection 문제. import httplib,urllib; # Blind SQL injection ck = "" referer = "" # barking up the wrong tree -- # setting #toget = "(SELECT password from users where name='root')" #toget = "(SELECT name FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" #toget = "(SELECT count() from keys)" #toget = "(SELECT sql FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" toget = "(SELEC.. 더보기
[HDCon 2013] 3번 문제 write up (2번 문제는 생략하도록 한다. 그냥 네이트온 대화가 오간것을 찾으면 된다.) virtual host 문제였다. 서버가 virtual host일때, HTTP 헤더의 'Host' 헤더에 따라서 폴더의 경로가 바뀔수 있다.이번에 처음 안 사실이고, 신기했다. 그래서, 기본적으로는 host가 kisa로 되어있으며, Host를 localhost로 변경할경우 다른 폴더가 나타난다. import httplib,urllib; import time from socket import * """ s = socket(AF_INET,SOCK_STREAM) s.connect(('118.107.172.213',8888)) s.send("GET /2013_06_04_blog_backup_.zip HTTP/1.1\r\n") s.se.. 더보기
[HDCon 2013] 1번 문제 write up 1번 문제는 sql injection 문제였다. injection 위치는 limit 부분이었다. limit 부분에 인젝션이 가능할때는 union 인젝션만 가능하다고 알고 있었고, 이게 맞는듯 하다.그래서 '(', select, from 등이 필터링이 되어있다는걸 알았을때는 멘붕이었고, 내가 잘못 알고 있나 해서 검색을 엄청나게 했다.하지만, 이 문제는 좀 다른 방향으로 접근해야 했다.문제파일의 확장자는 'do' 였다. do 확장자에 대해 검색해보면, do 확장자에서 jsp를 불러온다는걸 알수있다.그래서 students.do 대신 students.jsp로 요청을 하면 ,select의 필터링이 풀린다. (즉, do에서 필터링을 하고있었다는걸 알수있다.)그 후에는 간단한 union 인젝션이다. import h.. 더보기
[Secuinside 2013] Secure Web, write up 300점 치고는 너무 쉬운 문제였다. 그냥 php 쉘파일 업로드해서 확인하면 된다. 아래와 같은 파일을 업로드한다. ... 그 후에, ./uploads/[ip encoding]/파일이름로 접근하면 끝. 더보기
[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] 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 더보기
[plaid CTF 2013] web 150 write up 이번 plaid CTF 에서 가장 만만했던 문제는 web 150 charseet 문제밖에 없었다. 나머지는 탈탈탈 털렸다. 특히 64비트 elf 문제들....... 그 문제들과는 반대로 web 150문제는 너무 쉬워서 거의 바로 풀었던것 같다. union sql injection 문제였는데, 취약점은 search를 하는부분에 있었다. 우선 로그인을 하고나서, search 부분에 들어간후, ' (따옴표) 를 삽입해보면 아래와 같은 에러가 뜬다. Failed to query database: SELECT c.id, c.cname, DATE_FORMAT(c.lastedited, '%d %M %Y @ %H:%i') as lastedited, c.owner, st.name as tname, ca.name as c.. 더보기
[Codegate 2013] Web 400 simple write up 이 문제는 if문과 rand를 이용한 문제 수학문제 4문제가 주어지고, 다 풀면 원래는 700점이 한계인데, 3000점을 넘어야한다. 처음엔 blind injection을 통해 숨겨진 문제를 찾는거라 생각했다.그래서 시간을 좀 많이 소모했다. 근데 블라인드 인젝션을 힘겹게 해서 데이터를 다 보고나니, 포인트가 있는 문제는 그 4개가 전부였다. 그렇다면, 방법은 1,2,3,4번 문제를 여러번 풀어야 한다는 소리인데.. 파라메터를 조작해서 인젝션을 하다보면, 정답에 + or 1 like 1 #만 붙이면 클리어가 뜨는걸 알수 있다. 첫번째 쿼리에서 이미 풀었는지 확인을 하고, 두번째 쿼리에서 문제의 포인트를 불러오고,세번째 쿼리에서 불러온 포인트를 이용해 업데이트 한다. 이렇게 추측했다. 그렇다면 첫번째 쿼리.. 더보기
[Codegate 2013] Web 300 simple write up 전형적인 블라인드 인젝션 문제다. contact를 하는 부분(이름,메일,question,메세지 보내는 부분)에서 인젝션이 가능하다. question 파라메터를 이용해서 블라인드 인젝션을 했다. 그러면 멤버들의 비밀번호가 md5로 해쉬 되어있는걸 확인할수 있고 사전식으로 online md5 decoding 페이지들을 이용해서 디코딩이 가능하다. 그리고 소스보기를 통해 보면, 자바스크립트가 숨겨져있고, 숨겨진 로그인페이지가 있다는걸 알수 있다 그리고 나서 하나씩 로그인해보면 Hound 해킹을 의뢰한 사람과 시간이 나타난다. [python] import httplib,urllib; import sys import time # Blind SQL injection # setting #toget = 'databas.. 더보기
[Codegate 2013] Web 100 simple write up 비밀번호 해쉬를 하는데 세번째 인자가 true이다. raw 형식으로 hash를 한다는것을 알수있다. 예전에 wargame에서 풀어본 경험이 있는데.. 아마 webhacking.kr에 있었던 문제 같았다. 경험이 있으므로.. 쉽게 풀었는데 예전엔 md5로 해쉬를 했는데, 이번엔 좀 다른방법으로 해쉬를 한다. 그러므로 새로 php를 짰고, 'or' 이나 '||' 이 들어있는 해쉬를 하나씩 돌려서 찾아봤고, 결과를 하나씩 넣어보다 보니 로그인 성공 (숫자 몇이 성공이었는지는 정확히 기억이 안난다) 비밀번호를 찾는 코드 $i의 값이 비밀번호다. $i=0; echo "start\n"; for ($i=119335433; $i 더보기