• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • CTF – RootMe解题报告 [Web-Server : SQL injection – authentication]

    渗透测试 EXP 612阅读 0评论

    挑战入口:Root-Me(https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-authentication)
      分类目录:Link to …(http://exp-blog.com/2019/01/02/pid-2597/12/)

    SQLi 水题,为了方便构造 payload 建议使用 Burp Suite 。

    初步猜想 SQL 是这样的:

    select * from account where Login = '{Login}' and Password = '{Password}'

    Login 和 Password 都可以注入,注入任意一个即可。

    由于题目要求我们找到 administrator 的密码,我们把 Login 的值固定为 administrator 就好了。


    在 Password 输入任意值提交,报错 Error : no such user/password

    尝试在 Password 构造探针 :exp' or '1'='1

    虽然注入成功,但是查询结果只返回了一个账密: user1 / TYsgv75zgtq

    不要着急用这个密码去验证,题目要求找到 administrator 的密码,而不是 user1 的密码。

    换言之可能 account 表里面只有普通用户的账号记录,我们需要把目标转移到 系统表

    由此先想办法找到数据库类型,这样就可以间接确定系统表名称,再跨表查询


    要知道数据库类型,可以尝试构造错误的 payload 令 SQL 解析失败,看看会不会抛出异常到前端。

    尝试在 Password 构造 payload :'exp error' (即不闭合引号),前端抛出异常,发现这是 SQLite3 数据库。

    在 SQLite3 中只有一个系统隐藏表 sqlite_master ,其表结构如下:

    虽然这张表不是用来存储用户账密的,但他存储了数据库中每个数据表的信息,可以通过它找到其他数据表。

    在 Password 构造 payload 跨表查询 (注意末尾 -- 注释掉原 SQL 中多余的内容) :

    exp' or 1=1 union select name, sql from sqlite_master --

    直接就获得 administrator 的密码,挑战成功。

    其实这题不像是真正的数据库环境,感觉就是一个沙箱根据输入的内容做出对应的预设反应。


    转载请注明:EXP 技术分享博客 » CTF – RootMe解题报告 [Web-Server : SQL injection – authentication]

    喜欢 (0) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址