Instagramμ΄ λ°©κΈ instagram.com/accounts/login/ajax
μ ν΅μΌλ‘ λ§λ€μλμ, μλλ©΄ μ λ§ κ·Έλ° κ±΄κ°μ?
λλ κ·Έκ²μ μλμν¬ μ μμ΅λλ€.
π±
κΈ°λ³Έ μΈμ¦ νλ‘μΈμ€λ₯Ό ν
μ€νΈνμκ² μ΅λκΉ?
λΆννλ λμμ Swiftμμ λ무 λ§μ μ’
μμ±μ νμλ‘ ν©λλ€(ν΄μμ RSAλ₯Ό λͺ¨λ μ¬μ©νκΈ° λλ¬Έμ).
@sssssssssss γ γ
νΈμ§: Swiftagramμμλ μλνμ§ μμ΅λλ€... π± μ λ§ λ°©κΈ μ κ±°ν 건κ°μ?
κ·Έκ²μ λλ₯Ό μν΄ μΌνμ§λ§ SMSμμ μ±λ¦°μ§ μ½λλ₯Ό μ»μ μ μμμ§λ§ μ΄λ©μΌμμλ μλνμ΅λλ€.
Swiftagram
μ BasicAuthenticator.handleSecond
λ°ν invalid response
, λλ SwiftyInsta
ν
μ€νΈνμ§ μμμ΅λλ€.
SwiftyInsta μμλ μλνκ² ν μ μμ΅λλ€ π’ @bariscck
μΈμΈλμμ μ°μ²΄λΆμμλ μλμ΄ μλλλ°... π±
Instagramμ μΌμμ μΈ λ¬Έμ μκΈ°λ₯Ό λ°λλλ€. @TheM4hd1 μ΄ λ€λ₯Έ μ§μμμ μλνλ μ΄μ λ₯Ό μ€λͺ
ν μ μμ΅λλ€.
Instagramμ μΉ μ±μ΄ νμ¬ μ΄ λμ μ μ¬μ©νκ³ μκΈ° λλ¬Έμ μΌμμ μΈ κ² κ°μ΅λλ€. κ·Έλ€μκ²λ ν¨κ³Όκ° μμ΅λλ€. 400
Bad Request
λ₯Ό λ°νν©λλ€.
μΉ μ±λ μλνμ§λ§ μ½ 4κ°μ μ μ κ°μ μΌμ΄ λ°μνμ¬ λͺ μκ° νμ μμ λ κ²μΌλ‘ κΈ°μ΅ν©λλ€.
μ, μ΄μ μ λ°μνμ§λ§ μ°λ¦¬λ 400
λ₯Ό λλ €λ°μμ΅λλ€. μ΄λ ν©λ¦¬μ μ
λλ€.
μ΄λ²μλ μ§μ μ‘μΈμ€κ° 405
μ
λλ€. HEAD
κ° μμ΄λ.
λλ κ·Έλ€μ΄ λ¨μ§ κ·Έκ³³μμ μ΄μ£Όνλ κ²μ΄ λλ ΅μ΅λλ€.
π€ μκ°λ½λ§ κΌ¬μ§μ΄ λ΄
μλ€.
μλ νμΈμ μ λ κ°μ λ¬Έμ κ° λ°μνλλ° ν΄κ²°λμ ¨λμ?
λΆννλ @Emretelli7μ μμ§ ν΄κ²°λμ§ μμμ΅λλ€.
λμ μ λ°μλ€μ¬μΌ ν κ² κ°μ λλμ΄ λ€μ΄μ π’
μλ
νμΈμ, μ΄μ μΈμ€νκ·Έλ¨μ "enc_password" λ₯Ό μ¬μ©ν©λλ€ . "password" λ μ¬μ©ν μ μμ΅λλ€.
enc_passwordλ AES 256 GCM μνΈνλ₯Ό μ¬μ©ν©λλ€.
@xmmti
burp μ νκ΅°μμ λ΄ enc_passwordλ₯Ό 볡μ¬νκ³ λ΄ μ¬μ©μ μ΄λ¦μΌλ‘ κ²μνλ €κ³ μλνμ§λ§ μΈμ¦λ¨: false
λ°λΌμ μ΄ enc_passwordλ³΄λ€ λ λ§μ κ²μ΄ μλ€κ³ μκ°ν©λλ€.
@xmmti
burp μ νκ΅°μμ λ΄ enc_passwordλ₯Ό 볡μ¬νκ³ λ΄ μ¬μ©μ μ΄λ¦μΌλ‘ κ²μνλ €κ³ μλνμ§λ§ μΈμ¦λ¨: falseλ°λΌμ μ΄ enc_passwordλ³΄λ€ λ λ§μ κ²μ΄ μλ€κ³ μκ°ν©λλ€.
λ³Έλ¬Έ μμ²
μ¬μ©μ μ΄λ¦= μ¬μ©μ μ΄λ¦ &enc_password= enc_password
λλ μΌμ΄μΌ...
λ€. κ·Έ μ΄μμ
λλ€. λλ 첫 λ²μ§Έ λ©λͺ¨μμ κ·Έκ²μ μμν©λλ€.
μλ‘μ΄ ν€λλ¦¬μ€ μΈμ¦ λ°©λ²μλ Swiftμμ νμ€ν νμ€μ΄ μλ μνΈν λκ΅¬κ° νμν©λλ€. ν΄μλ λ§€μ° μ½κ² μ»μ μ μμ§λ§(κ·Έλ¦¬κ³ μ΄λ―Έ CryptoSwiftλ₯Ό ν΅ν΄ SwiftyInsta μ μμ) κ³Όκ±°μλ μ λ’°ν μ μλ RSA λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°Ύμ μ μμμΌλ©°(νμ¬ λ¦΄λ¦¬μ€κ° μλ κ²½μ°), (μ μ΄λ) νλ λ μμ κ²μ
λλ€. μμ‘΄.
API λ‘κ·ΈμΈμ μ μλν©λλ€ ... κ·Έμ enc_passwordλ₯Ό ajaxνλ©΄ λ©λλ€.
μ λκΈ @xmmtiλ₯Ό μ½μ΄μ£ΌμΈμ.
μ°λ¦¬λ λͺ¨λ μμ μ¬νμ μμ ν μκ³ μμ΅λλ€. μ°λ¦¬λ λ¬Έμ λ₯Ό μ°κΈ°λ μ μ μμκ³ μ΄κ²μ΄ μ‘°λ§κ° μΌμ΄λ κ²μ΄λΌλ κ²μ μκ³ μμ΅λλ€.
λ¬Έμ λ μμ μ¬νμ΄ Node JS λλ Pythonμμλ λ§€μ° μ½μ§λ§ Swiftμμλ νμ€ν κ·Έλ μ§ μλ€λ κ²μ
λλ€. νμ¬ SwiftyInsta μμ μꡬνλ μνΈν λ° CryptoSwift μ λν μ’μ λΌμ΄λΈλ¬λ¦¬κ° μκ±°λ ν΄λΉ λ¬Έμ μ λν΄ CommonCrypto λ₯Ό κΈ°λ°μΌλ‘ νλ λͺ¨λ κ²μ΄ κ΄λ²μνμ§ μκΈ° λλ¬Έμ
λλ€. μΆ©λΆν.
μΆκ°ν λ΄μ©μ΄ μκΈ° λλ¬Έμ μ΄ μ€λ λμ λν λκΈμ μ°¨λ¨ν΄μΌ ν©λλ€.λμμ ꡬννκΈ°λ‘ κ²°μ ν κ²½μ°(μ ν¨ν μνΈν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°Ύμ μ μλ κ²½μ°) κ²μλ¬Όμ μ λ°μ΄νΈν©λλ€.κΈ°μ¬νκ³ μΆλ€λ©΄ PRμ 보λ΄μ£Όμμμ€.
@sbertix
μλ
νμΈμ μ λ κ°μ λ¬Έμ κ° λ°μνκΈ° λλ¬Έμ νμ΄μ¬ νλ‘μ νΈλ₯Ό μν΄ μ¬κΈ°μ μμ΅λλ€.
λͺ¨λ°μΌ μ±μμ μ¬μ©νλ €λ©΄ python μ€ν¬λ¦½νΈλ₯Ό μ€ννλ μλ²λ₯Ό μ€ννμ¬ λͺ¨λ°μΌ μ±κ³Ό μ°κ²°ν μ μμ΅λλ€.
μ΄κ²μ @Emretelli7 μκ²λ λ¬Έμ κ° λμ§ μμ§λ§ κ°μ¬ν©λλ€. π
μ΄λ―Έ λ
Έλ μ±μ ν΅ν΄ μΈμ¦μ λΌμ°ν
νμ΅λλ€.
μ΄κ²μ SwiftyInsta μμ μ§μ κΈ°λ³Έ μΈμ¦μ μ 곡νλ κ²μ
λλ€.
μ΄μ κΈ°λ³Έ λ‘κ·ΈμΈμ΄ μλνλ κ² κ°μ΅λλ€. 2FA
κ° μκ±°λ μλ λ κ°μ λ€λ₯Έ κ³μ μ νμΈνμ΅λλ€.
AES-GCM-256μ swift-sodiumμ μ¬μ©νλ €κ³ ν©λλ€.
κ·Έλ¦¬κ³ RSA λΆλΆμ λν SwiftyRSA.
@MatoMA μ λ무 λ§μ μ’
μμ±μ μΆκ°ν λ μ£Όμνκ³ SwiftyRSAλ macOSμμ μλνμ§ μλ λ°λ©΄ swift-sodiumμ iOS λ° macOS(Catalyst μμ, watchOS μμ, tvOS μμ, Linux μμ)μμλ§ μλνλ―λ‘ κΈ°λ₯ λ° κ΅¬λ©μ μλ―Έν©λλ€. λΌμ΄λΈλ¬λ¦¬κ° λ€λ₯Έ λμμ ν¨ν€μ§λμ΄ μμ§ μμ κ²½μ° iOSμμλ§ μλνλ©°, μ΄λ―Έ μλ μμ΄ μΉ λ³΄κΈ° κΈ°λ° μΈμ¦μ μ¬μ©ν μ μμ΅λλ€...\
SwCryptμμ ꡬνμ μλνκ³ (μκ° λΆμ‘±μΌλ‘ μΈν΄ μλ£νμ§ μκ³ ) μ½κ°μ μ μ¬λ ₯μ 보μ¬μ£Όμμ΅λλ€(μ¬μ ν OpenCrypto μ§μ μμ€ν
μΌλ‘ μ νλμ΄ μμ).\
νμ§λ§ μλ£λλ©΄ ꡬνμ μμ ν λΉκ΅ν μ μμ΅λλ€.
@MatoMA μ λ무 λ§μ μ’ μμ±μ μΆκ°ν λ μ£Όμνκ³ SwiftyRSAλ macOSμμ μλνμ§ μλ λ°λ©΄ swift-sodiumμ iOS λ° macOS(Catalyst μμ, watchOS μμ, tvOS μμ, Linux μμ)μμλ§ μλνλ―λ‘ κΈ°λ₯ λ° κ΅¬λ©μ μλ―Έν©λλ€. λΌμ΄λΈλ¬λ¦¬κ° λ€λ₯Έ λμμ ν¨ν€μ§λμ§ μμ κ²½μ° iOSμμλ§ μλνλ©°, μλ μμ΄ μ΄λ―Έ μΉ λ³΄κΈ° κΈ°λ° μΈμ¦μ μ¬μ©ν μ μμ΅λλ€...
SwCryptμμ ꡬνμ μλνλλ°(μκ° λΆμ‘±μΌλ‘ μλ£νμ§ μκ³ ) μ½κ°μ κ°λ₯μ±μ 보μ¬μ£Όμμ΅λλ€(μ¬μ ν OpenCrypto μ§μ μμ€ν μΌλ‘ μ νλμ΄ μμ).
νμ§λ§ μλ£λλ©΄ ꡬνμ μμ ν λΉκ΅ν μ μμ΅λλ€.
λ΅μ₯ ν΄μ£Όμ
μ λ§€μ° κ°μ¬ν©λλ€.
μ½ 1/4μ μ¬μ©μκ° webview μΈμ¦μΌλ‘ λ‘κ·ΈμΈνμ§ λͺ»νλ κ²μ λ°κ²¬νμ΅λλ€. κ·Έλ¦¬κ³ μ°λ¦¬κ° λ¬Έμ λ₯Ό νμ
νλ κ²μ μ΄λ ΅μ΅λλ€. μ΄κ²μ΄ Android(Device) APIμμ μλνλλ‘ νλ €λ μ΄μ μ
λλ€.
κ·Έλ¦¬κ³ μ¬μ©μκ° Auth App(λ¬Έμ λ©μμ§ μλ)μΌλ‘ 2FAλ₯Ό νμ±ννλ©΄ webview μΈμ¦μ΄ μλνμ§ μλ κ²μΌλ‘ μλ €μ Έ μμ΅λλ€.
μμ λΌμ΄λΈλ¬λ¦¬κ° μλνμ§ μμΌλ©΄ μ¬μ ν opensslμ΄ μμ΅λλ€. μ°λ¦¬κ° μλν λ§μ§λ§ κ²½λ‘λ...
μΉ κΈ°λ° λ‘κ·ΈμΈμ΄ μλνμ§ μλ κ²μ νμ¬ κ΅¬νμ λ¬Έμ μΌ λΏμ΄λ©° μμ νκΈ°κ° ν¨μ¬ μ½μ΅λλ€.\
λλ κ·Έκ²μ Swiftagram μμ μλνκ² λ§λ€μμ΅λλ€. μ±κ³΅λ₯ μ΄ κ·Έλ κ² λμ κ²½μ° SwiftyInsta μμ λμΌν ν΄λμ€λ₯Ό κ°μ Έμ¬ κ²μ
λλ€.\
μ΄λ μͺ½μ΄λ κΈ°λ³Έ μΈμ¦μ λ°±μ
νκ³ μ λλ‘ μλνλ κ²μ΄ μ¬μ ν μ°μ μμμ΄λ―λ‘ κ±±μ νμ§ λ§μμμ€ π
κ·Έλ λ€λ©΄ @TheM4hd1λ, νΈνμ±κ³Ό κ΄λ ¨νμ¬ μμΌλ‘ λμκ°λ κ²μ΄ κ°μ₯ μ’μ λ°©λ²μ΄λΌκ³ μκ°νμλκΉ?\
λλ Swiftagramμμ BasicAuthenticator
λ₯Ό μ¬κ΅¬ννμ¬ SwiftyInsta μ© μΌλ‘ μμ ν λ²μν μ μμ§λ§ λ¨Όμ ν΄κ²°ν΄μΌ ν©λλ€(μ: μλνλ €λ©΄ Linux μ§μ μ€λ¨, μ΅μ OS λ²μ , μ’
μμ± κ΄λ¦¬μ, λ±).
@sbertix λ μ¬μ ν λΉνμ±νλμ΄ μμ΅λκΉ? κ·Έκ²μ μ§κΈ λλ₯Ό μν΄ λ€μ μλνλ κ² κ°μ΅λλ€.
μ§λ μ£Όμ μλνμ§λ§ μ¬μ ν μλνμ§ μμ΅λλ€.\
λΆλͺ
ν λͺ¨λ κ³μ μ μν₯μ λ―ΈμΉμ§λ μμ§λ§ λ§μ΄ λ§μ΄κ·Έλ μ΄μ
νκ³ μμ΅λλ€( instagram-private-api μμ enc_password
μ λν κ°±μ λ κ΄μ¬μ κΈ°λ°μΌλ‘ ν¨).\
SwiftyInsta μμλ ν΄κ²°ν΄μΌ ν©λλ€.
ꡬνμ κ·Έ μμ²΄λ‘ λ¬Έμ κ° μλλ©° Swiftagram μ μμ ν μ΄μν μ μμΌλ―λ‘ μ’ μμ± λ±μ λν μ€μ μΌ λΏμ λλ€.
openssl
λ₯Ό μ¬μ©νλ κ²μ μ΄λ»μ΅λκΉ? Instagram μ체λ openssl
λ₯Ό μ¬μ©νλ κ² κ°μ΅λλ€. μ΄λ κ² νλ©΄ μ΅μ νΈνμ± λ²μ κ³Ό Linux νΈνμ±λ μ μ§ν μ μμ΅λλ€.
λλ Swiftμμ OpenSSL (μ μ΄λ μ§μ μ μΌλ‘)μ μμ‘΄νλ κ²μ μ λ§λ‘ μ«μ΄ν©λλ€(λλΆλΆμ μ¬λλ€μ²λΌ hahaha).\
μ΄κ²μ νμ€ν "ν΄κ²°μ±
"μ΄μ§λ§ λ²κ±°λ‘κ² κ΅¬νν κ°μΉκ° μλμ§ νμ€νμ§ μμ΅λλ€... @TheM4hd1\
κΌ, λΉμ μ΄ κ·Έκ²μ νκ³ μΆλ€λ©΄, μ’μ΅λλ€. κ·Έλ μ§ μμΌλ©΄ μ¬μ ν "λ λμ μμ€"μΌλ‘ κ°λ κ²μ΄ μΆ©λΆν΄μΌ νλ€κ³ μκ°ν©λλ€.
OpenSSL
ꡬνμ μλνμ§λ§ κ°λ³ νλ‘μ νΈμμ μ μλνμ§λ§ μ’
μμ±μΌλ‘ μΆκ°νλ©΄ κ·Έλ κ² ν μ μμκ³ λ§μ μμ
μ΄ νμνκ³ λΌμ΄λΈλ¬λ¦¬ ν¬κΈ°κ° μ¦κ°νμ΅λλ€.
μ κ°μΈ νλ‘μ νΈλΌλ©΄ μ΅μ iOS λ²μ μ μ§μνλ μ©λλ‘ μ¬μ©νκ³ μΆμ΅λλ€. κ·Έλ¬λ λμκ΄μ μν΄ κ·Έκ²μ ν κ°μΉκ°μλ κ² κ°μ΅λλ€.
λ°λΌμ SwiftaGram
μ΄μμ λμν©λλ€. μ΄κ²μ΄ νμ¬λ‘μλ μ΅κ³ μ μ루μ
μ
λλ€.