php? c?
do you know "integer type" of 32bit application?
입력칸이 2개가 있다.
D1
D2
소스를 보자
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
32
|
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
require("../lib.php"); // include for auth_code function.
if(isset($_POST['d1']) && isset($_POST['d2'])){
$input1=(int)$_POST['d1'];
$input2=(int)$_POST['d2'];
if(!is_file("/tmp/p7")){exec("gcc -o /tmp/p7 ./p7.c");}
$result=exec("/tmp/p7 ".$input1);
if($result!=1 && $result==$input2){echo auth_code("php? c?");}else{echo "try again!";}
}else{echo ":p";}
?>
<style>
table {background-color:#000; color:#fff;}
td {background-color:#444;}
</style>
<hr />
<center>
<form method='post'>
<table>
<tr><td>D1:</td><td><input type='text' id="firstf" style="width:75px;" maxlength="9" name='d1'></td></tr>
<tr><td>D2:</td><td><input type='text' style="width:75px;" name='d2'></td></tr>
<tr><td colspan="2" style="text-align:center;"><input type='submit' value='try'></td></tr>
</table>
</form>
<div><a href='?view-source'>get source</a></div>
</center>
<script>
document.getElementById("firstf").focus();
</script>
|
cs |
p7 에 인자값으로 input1을 줘서 실행 값이 1이 아니면서 input2와 값이 같으면 플래그를 얻을 수 있다.
p7.c를 확인해보자
http://wargame.kr:8080/php_c/p7.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
#include <stdlib.h>
void nono();
int main(int argc,char **argv){
int i;
if(argc!=2){nono();}
i=atoi(argv[1]);
if(i<0){nono();}
i=i+5;
if(i>4){nono();}
if(i<5){printf("%d",i);}
return 0;
}
void nono(){
printf("%d",1);
exit(1);
}
|
cs |
8행 : i가 음수이면 안됨
10행 : i+5 가 4보다 크면 안됨
11행 : i+5가 5보다 작으면 안됨
이 조건을 모두 만족하는 i는 없는 것 처럼 보이지만, intager overflow를 하면 모든 조건문을 통과할 수 있다.
int의 최댓값+1이 되면 0 또는 음수값으로 인식을 하기 때문이다.
https://m.blog.naver.com/wwwkasa/80180210172
d1 : 2147483643
d2 : -2147483648
'WAR GAME > wargame.kr' 카테고리의 다른 글
Wargame.kr [web chatting] 풀이 (0) | 2020.01.01 |
---|---|
Wargame.kr [EASY_CrackMe] 풀이 (0) | 2020.01.01 |
Wargame.kr [img recovery] 풀이 (0) | 2019.12.31 |
Wargame.kr [type confusion] 풀이 (0) | 2019.12.31 |
Wargame.kr [tmitter] 풀이 (0) | 2019.12.31 |