Webhacking.kr old-30
Challenge
Understand database connection hijacking through upload configuration.
分析通过上传配置劫持数据库连接的机制。
1 | http://webhacking.kr:10003/ |
Analysis
入口每次请求都会分配一个会话专属目录,并把上传的表单指向它:
1 | Your personal directory is ./upload/<random>/ |
该目录里预置的 index.php 源码(实测):
1 |
|
无参数 mysqli_connect() 会读取
mysqli.default_host / default_port /
default_user /
default_pw。原意是用上传的配置覆盖这些值,把连接指向自建
MySQL,让 chall30_answer.flag 非空,从而走进
include "/flag"。
上传行为实测:内容里的 < 会被剥掉,所以落不了带 PHP
标签的 webshell;.php 会被当 PHP
执行但没标签也没用;.htaccess 能上传成功(直接 GET 是
403)。
Solution
不必自建 MySQL:.htaccess 的 php_value
就能改 PHP 配置,其中 auto_prepend_file
会在目录内每个脚本执行前先包含一个文件。把它指向
/flag,该目录的 index.php 一执行就先把
/flag 的内容打出来,mysqli_connect()
成不成功都不影响。
向入口上传 .htaccess(表单字段
upfile,action=index.php):
1 | php_value auto_prepend_file /flag |
然后请求会话目录的 index.php:
1 | GET /upload/<dir>/index.php -> FLAG{uhoh-db-connection-hijacking?} |
判据:php_value auto_prepend_file /flag 单独放
.htaccess 即可生效;换成 auto_append_file
不生效(脚本在 mysqli_connect() or die() 处就结束了);把
.htaccess 覆盖成注释后 flag 消失,说明确实是
.htaccess 在起作用。