首先进入题目
接着扫描一下后台文件
然后访问index.php
结果还是处在原页面
那么index.php访问结果还是和原来的一样就访问index.phps得到
接着要进行代码审计,但是在此之前要搞清楚urdecode和urlencode的区别。
urlencode和urldecode
urlencode对URL进行编码。URL是一个字符串,urlencode把它理解为一个字节流,直接对每个字节进行转换,转换规则是把每个字节转换为%HH的形式,HH等于字节的ASCII码值。如果URL中包含了中文参数,根据中文参数编码的区别,会决定urlecode的结果有所不同。
urldecode是把经过urlencode编码后得到的字符串还原为原始状态,根据urlencode的规则可知,urldecode的输入字符都在ASCII编码的范围内。
代码审计发现变量id='admin'要进行url编码,将编码后的admin赋予id,如果有人不信要对admin进行url编码,那不妨试一下/?id=admin,得到
所以要搞清楚对‘admin’进行url编码
注意:浏览器本身会进行url解码,这里就相当于对注入的id进行两次解码,所以'admin'要进行两次编码
首先搞清楚url编码,可以分别对'admin'进行编码,然后拆分组合,同时也可以一次性对'admin'进行编码,拆分组合的数据和统一编码的数据一致就得到两次编码后正确的值
再一次进行编码
接着进行分析,a 第一次编码得到%61,第二次编码得到%25%36%31,a的ascii值是97,而97的十六进制是61,再加上一个%,得到%61,第二次编码分别对%,6,1进行编码,%的ascii值是37,37的hex值是25,再加上一个%,就得到%25,剩下的同理
url编码得到的值是%加上两个数字,解码时也就是%25解码为%,但是在解码时,数字就不会被解码,所以a进行两次编码后得到的值为%2561,即就找到了两次编码的规则,a=%2561,同理其他字母编码也是一样的。(%25解码得到%,61不会被解码,但是%2561最终的解码还是会得到a)
所以对'admin‘进行编码得到%2561%2564%256d%2569%256e
最后一步请求/?id=%2561%2564%256d%2569%256e
得到flag