jarvis题库解题思路
下面是题库官网有兴趣的同学可以访问尝试
https://www.jarvisoj.com/
Login
- 访问题目网页 有一个密码登录页面 先检查源码 没有特殊信息 链接也没有什么特别之处
- 抓取一个数据包跑弱密码有反应 但是输入以后并没有看到flag
- 下面是正确的解题思路 抓取一个返回包 看返回包中的内容
- 看到有一个提示 密码是直接拼接到查询语句里面的 提示使用了一个PHP的MD5函数 查一下技术文档
- 技术文档说 如果是TRUE的话 会返回16字符长度的原始二进制字符串字符串的值 那么我们尝试加密以后MD5的值刚好含有闭合符号 以及特殊字符
- 加密后的值比如说是 ‘or’6�]��!r,��b
- 第一个单引号 会和前面的password字段闭合 后面的单引号会和后面的单引号 进行闭合
- 这里面我们引入一个概念 在mysql中查询数据时�]��!r,��b这一段数据将不会出现
- 同时’1’ 会被数据库当做TRUE返回 其实不仅仅是数字 在数据库中单引号括起来的以数字开头的字符串 会被当做布尔类型进行判断
- 因此最后的查询语句就是 select from
admin
where password=’’or’6�]��!r,��b’ 转换为select from admin
where password=’’or TRUE - 那么这句话就横为真值
- 还有一个问题没有解决就是如何生成这种特定的字符串 我们可以使用当函数表达式为false时 使用32字符16进制返回的散列值进行判断 十进制ASCII码转化为十六进制确定前几位’or’ 同时需要保证字符串的是一个字符不可以是0就完成整个推导过程
LOCALHOST
- 访问页面告诉我只有localhost过来的地址才可以进行访问 第一反应就是修改x-forward-for
PORT51
- 这道题要求我们使用指定的端口进行访问 这里的端口指的是我们发送请求的端口 不是访问页面的端口
- 但是我们使用的公网地址发送出去的时候不一定使用的是51端口 路由器会自己选择一个空闲端口进行数据发送
- 理论上我们需要租借一个服务器 通过服务器的51端口进行访问才可以
- curl —local -port 51 http://web.jarvisoj.com:32770/