티스토리 뷰
728x90
반응형
처음 접속하면 위와 같이 나오는데요. 언뜻 보면 주어진 문자열을 MD5 암호화해서 input 입력란에 입력하고 Submit 버튼을 누르면 되는 걸로 보입니다.
# md5.py
import hashlib
string = "95FsH2OPEIf6NGnXvDTF".encode("utf-8")
enc = hashlib.md5()
enc.update(string)
encText = enc.hexdigest()
print(encText)
Python 코드로 위에 나오는 문자열을 md5 암호화 해서 출력된 값은 다음과 같습니다.
C:\Users\Domdom>python md5.py
71916fb0702e0f4d9d56f3c733854e24
그리고 이 암호화한 문자열을 input 입력란에 입력하고 Submit 버튼을 눌렀더니 다음과 같이 나옵니다.
너무 느리다고 하네요. 그래서 크롤링 때 써먹었던 BeautifulSoup 을 이용해서 페이지가 로딩되자마자 바로 위에 출력되는 문자열을 가져온 다음에, 즉시 md5 암호화 후 post request로 submit 해보도록 하겠습니다.
import requests as req
from bs4 import BeautifulSoup
import hashlib
url = "http://138.68.162.166:30258/"
# 새로고침 할 때마다 문자열이 달라집니다.
# 그러므로 동일한 세션에서 문자열을 가져와서 암호화해서 보내야합니다.
res = req.get(url, headers={
"cookie": "PHPSESSID=g6rq677fs6el96ehrf73tvrvp7"
})
# 문자열 추출
soup = BeautifulSoup(res.text, 'lxml')
string = soup.select('h3')[0].text.encode("utf-8")
# 암호화
enc = hashlib.md5()
enc.update(string)
encText = enc.hexdigest()
# 암호화된 문자열 전송
res2 = req.post(url, headers={
"cookie": "PHPSESSID=g6rq677fs6el96ehrf73tvrvp7"
}, data={
"hash": encText
})
# Flag 값 추출 후 출력
soup2 = BeautifulSoup(res2.text, 'lxml')
print(soup2.select('p')[0].text)
위와 같이 하면 인터넷환경에 따라 너무 느려졌을 경우 Too slow 가 나올 수 있지만, 일반적으로 Flag 값이 잘 나옵니다.
근데 왠만하면 BeautifulSoup 라이브러리 쓰지 않고 단순히 request 모듈만 사용해서 푸는 것이 더 좋습니다. 왜냐하면 BeautifulSoup 을 사용하게 되면, 아무리 빠른 알고리즘을 사용하더라도 res.text 에서 'lxml' 방식으로 다시 문자열들을 재구성하는 데서 시간이 꽤 걸리기 때문에 가끔 too slow가 나타나기도 하기 때문입니다.
- 끝 -
728x90
반응형
'보안 > Wargame' 카테고리의 다른 글
XSS-Game - Level 5: Breaking protocol (Writeup/문제풀이) (0) | 2021.05.05 |
---|---|
XSS-Game - Level 4: Context matters (Writeup/문제풀이) (0) | 2021.05.05 |
XSS-Game - Level 3: That sinking feeling... (Writeup/문제풀이) (0) | 2021.05.04 |
XSS-Game - Level 2: Persistence is key (Writeup/문제풀이) (0) | 2021.05.02 |
XSS-Game - Level 1: Hello, world of XSS (Writeup/문제풀이) (0) | 2021.05.01 |
댓글