18번 문제에요.
배점은 362점, 이름은 SimpleBoard 네요.
SimpleBoard
Simple Union SQL injection Challenge.
(but you need script... maybe?)
문제 이름에 맞게 BBS가 있어요.
소스코드를 보면
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<?php
if (isset($_GET['view-source'])){
if (array_pop(split("/",$_SERVER['SCRIPT_NAME'])) == "classes.php") {
show_source(__FILE__);
exit();
}
}
Class DB {
private $connector;
function __construct(){
$this->connector = mysql_connect("localhost", "SimpleBoard", "SimpleBoard_pz");
mysql_select_db("SimpleBoard", $this->connector);
}
public function get_query($query){
$result = $this->real_query($query);
return mysql_fetch_assoc($result);
}
public function gets_query($query){
$rows = [];
$result = $this->real_query($query);
while ($row = mysql_fetch_assoc($result)) {
array_push($rows, $row);
}
return $rows;
}
public function just_query($query){
return $this->real_query($query);
}
private function real_query($query){
if (!$result = mysql_query($query, $this->connector)) {
die("query error");
}
return $result;
}
}
Class Board {
private $db;
private $table;
function __construct($table){
$this->db = new DB();
$this->table = $table;
}
public function read($idx){
$idx = mysql_real_escape_string($idx);
if ($this->read_chk($idx) == false){
$this->inc_hit($idx);
}
return $this->db->get_query("select * from {$this->table} where idx=$idx");
}
private function read_chk($idx){
if(strpos($_COOKIE['view'], "/".$idx) !== false) {
return true;
} else {
return false;
}
}
private function inc_hit($idx){
$this->db->just_query("update {$this->table} set hit = hit+1 where idx=$idx");
$view = $_COOKIE['view'] . "/" . $idx;
setcookie("view", $view, time()+3600, "/SimpleBoard/");
}
public function get_list(){
$sql = "select * from {$this->table} order by idx desc limit 0,10";
$list = $this->db->gets_query($sql);
return $list;
}
}
|
cs |
이렇게 생겼어요.
대충 쿠키에 "/" . $idx
가 존재하면 값을 읽어오고 아니면 에러를 띄우게 되어있는것같네요.
이것때문에 스크립트가 필요하다고 한걸까요?
아무튼 1번글을 누르면
readme.php?idx=1
로 이동하긴 하네요.
그리고 쿠키도 구워지고요.
저기에 구문을 집어넣으려면
이런식으로 쿠키까지 구워야 된다는거네요.
쿠키를 굽고 구문을 넣으면
작동해요.
아무튼 information_schema.table 와 limit를 사용해서 수상한 테이블을 찾아야되는데
limit 0,1에
떡하니 README 라는게 튀어나오네요.
보통 이런거 가장 끝에 있던데
:thinking:
아무튼 column_name 도 limit 0,1 를 써서 뽑아내면
flag 네요.
너무 정직한 이름들이네요.
아무튼 flag를 읽어보면
6b09d887003faff2a39164a8c632280b68524756
빠밤!
키가 나왔네요.
뭐야 이게
'연구글 > wargame.kr' 카테고리의 다른 글
wargame.kr 17 / pyc decompile (0) | 2020.11.03 |
---|---|
wargame.kr 16 / web chatting (0) | 2020.11.02 |
wargame.kr 14 / php? c? (0) | 2020.10.27 |
wargame.kr 13 / img recovery (0) | 2020.10.26 |
wargame.kr 12 / type confusion (0) | 2020.10.23 |