일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- reversing
- union sql injection
- volvolatility
- Import/Export Wordpress Users
- LifterLMS
- 네트워크
- wargame.kr
- 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드
- zap 파일
- steghide
- CSV Injection
- xcz
- 스테가노그래피
- ctf-d
- 취약점 진단
- zip 파일 구조
- Stored Cross-Site Scripting
- 암호학
- scapy
- forensic
- Python
- strcmp 취약점
- multimedia
- 보고서
- Wordpress
- Whitespace Programming
- DOS
- 포렌식
- QR코드
- CVE
- Today
- Total
광팔이 보안이야기
[xcz.kr] 18번 Web Basic 본문
음... 가장 자신 없는 웹 해킹 문제이다.
View source를 누르면 소스코드를 준다.
일단 코드를 보기전에 보기 복잡한 변수명을 바꾸는 게 좋겠다.
<?
$key = "Congratulations!</br>Key is ??????????????????";
$liillillilliliili = @$_COOKIE['c'];
$liillillliiiliili = @$_GET['g'];
$lilllillliiiliili = @$_POST['p'];
if(empty($liillillilliliili) || empty($liillillliiiliili) || empty($lilllillliiiliili)){exit ('wrong T.T');}
$lililillliiiliili = $liillillliiiliili . $liillillilliliili;
$lilililliiiiliill = $lilllillliiiliili;
function test($a){
$b = '';
for($i=0; $i < strlen($a); $i++){
$b = $b . ' - ' . ord(substr($a,$i,1));
}
return $b;
}
if(test($lililillliiiliili)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($lilililliiiiliill) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
echo $key;
}
else{
echo 'wrong T.T';
}
?>
li 뭐시기로 시작하는 변수명은 총 5개가 존재한다.(A, B, C, D, E)로 바꿔 줄 거다.
$key = "Congratulations!</br>Key is ??????????????????";
$A = @$_COOKIE['c'];
$B = @$_GET['g'];
$C = @$_POST['p'];
if(empty($C) || empty($A) || empty($B)){exit ('wrong T.T');}
$D = $B . $A;
$E = $C;
function test($a){
$b = '';
for($i=0; $i < strlen($a); $i++){
$b = $b . ' - ' . ord(substr($a,$i,1));
}
return $b;
}
if(test($D)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($E) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
echo $key;
}
else{
echo 'wrong T.T';
이제 코드를 이해를 해보면 생각보다 간단하다.
$key = "Congratulations!</br>Key is ??????????????????";
$A = @$_COOKIE['c'];
$B = @$_GET['g'];
$C = @$_POST['p'];
if(empty($C) || empty($A) || empty($B)){exit ('wrong T.T');}
$D = $B . $A;
$E = $C;
A, B, C 변수에 대입을 해주는데 A는 쿠키값, B는 GET 메서드, C는 POST 메서드를 받는다.
조건문 if를 보면 C, A, B 중에 하나라도 값이 없으면 문구가 띄어준다.
조건 문 밑에는 변수 두 개를 새로 받는데 D는 B와 A의 문자열을 합친 값, E는 C를 대입
function test($a){
$b = '';
for($i=0; $i < strlen($a); $i++){
$b = $b . ' - ' . ord(substr($a,$i,1));
}
return $b;
}
여기서 test 함수를 만드는데, 문자열을 받으면 한 글자 씩 잘라 아스키코드로 만들고 '-' 문자가 들어가면 이어 붙여 리턴해주는 함수이다.
if(test($D)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($E) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
echo $key;
}
else{
echo 'wrong T.T';
이 부분에서는 test 함수를 쓰는데 값을 미리 계산해보면 D는 givemepassword / E는 keyplz! 가 되어야 한다.
그럼 key를 응답해주고 아니면 실패 문구가 뜬다.
그럼 이제 우리는 처음에 봤던 변수들의 대입 값들을 알아내서 대입을 하면 key 값을 받을 수 있다는 것을 알 수 있다.
여기서 우리는 D와 E 값을 알기 때문에 A, B, C 값을 구할 수 있다.
D가 givemepassword이기 때문에 A와 B는 그냥 아무렇게 나눠서 A는 giveme / B는 password를 입력시켤줄 것이다.
E의 값 keyplz! 를 C에 입력하면 된다.
진짜 왜 안될까..... 코드도 다 짜고 여러 가지 방법으로 했는데 왜 안될까...... write up 봐도 나랑 풀이가 같은데... 왜지
2일간 해도 될 생각이 없네... 다음에 다시 해보자....
'Wargame > xcz.kr' 카테고리의 다른 글
[xcz.kr] 21번 PHP Obfuscation Crack (0) | 2021.01.20 |
---|---|
[xcz.kr] 20번 Bonus Problem! (0) | 2021.01.19 |
[xcz.kr] 17번 Password Recover... (0) | 2021.01.18 |
[xcz.kr] 16번 Mountains beyond mountains (0) | 2021.01.18 |
[xcz.kr] 15번 Tic-Tac-Toe! (0) | 2021.01.16 |