1. 보물
처음엔 페이지 3개중 하나를 디코딩하면 flag가 나오는 그런 형식일줄 알았는데 쿼리에서 page=4도 나와서 무작위대입을 해봤다.
import requests
url = 'http://ctf.j0n9hyun.xyz:2025/?page='
i = 0
while True:
i = i + 1
response = requests.get(url+str(i))
if "Hack" in response.text:
print(i)
break
print(i)
쓰읍.......
2. Guess me
php 쿼리로 받는 변수는 각 guess, filename, secretcode로 총 3가지다.
secretcode와 guess 변수가 같아야 통과하는데, secretcode변수는 secret.txt의 trim이다. 근데 쿼리로 filename을 조작할 수 있게 만들어 놨으니, 파일 이름을 바꿔주면 secretcode는 NULL이 된다.(실제로 null값을 리턴하는진 모르겠다. 아무튼 없다는 말임)
3. Read File
command에 있는 주소로 이동한다. 파일 이름은 flag.php
문자열을 필터링한다. 필터링을 우회하는 방법은 여러가지가 있는데, 보통 flag을 우회하려면 flflagag 이런식이나, 문자열 선언방식을 바꾸거나, ascii코드로 넣어주는등 아주 다양하다. 허나 소스코드가 없으므로 노가다를 해야한다.
4. Login
<?php
highlight_FILE(__FILE__);
require_once("dbcon.php");
$id = $_GET['id'];
$pw = $_GET['pw'];
$pw = hash('sha256',$pw);
$sql = "select * from jhyeonuser where binary id='$id' and pw='$pw'";
$result = mysqli_fetch_array(mysqli_query($db,$sql));
if($result['id']){
$_SESSION['id'] = $result['id'];
mysqli_close($db);
header("Location:welcome.php");
}
?>
우선 pw는 hash값이라 생각하지 않는다. sql 쿼리를 보니 전형적인 sql_injection인것 같다.
sql injection은 los.rubiya.kr/ 이게 짱이다
admin'#
작년 4월쯤에 학교 선배랑 진행한 웹 스터디에서 배웠다. 그땐 그분이 엄청 대단하다는걸 몰랐지... 지금생각하면 어떻게 그런분이랑 같이 스터디를 했는지 믿기지도 않는다/
5. 마법봉
이 문제는 사진도 조금 그렇고 별로였다.
<?php
show_source(__FILE__);
$flag = "if_you_solved";
$input = $_GET['flag'];
if(md5("240610708") == sha1($input)){
echo $flag;
}
else{
echo "Nah...";
}
?>
hash값의 특정 취약한 값 하나를 주제로 한 문제다. 음.........
원리는 지수승의 밑이 0인데 php에서 ==구문을 처리할때의 특성때문에 다 같은 0으로 나온다고 한다.
이 수를 찾는 과정이 궁금해진다.
'web > HackCTF' 카테고리의 다른 글
Rate50 (3문항) (0) | 2021.03.17 |
---|