Less-24
POST型基于存储的二次注入
随意输入
点击:Forgot your password?
翻译:如果你忘记了密码,去黑掉它。
点击:New User click here?
注册用户。
尝试注册一个用户: 用户:test1 密码:test1
翻译:
用户成功
创建
重定向到5中的登录页面......
如果未重定向,请点击右上角的主页(HOME)按钮
尝试注册过后的用户进行登录:
尝试更改用户test1的密码为tese2
从上面的情况中我们可以分析出:
- 登录界面,具有登录功能,同时有忘记密码和注册的链接。
- 注册界面,具有注册功能。
- 忘记密码界面,返回一张图片
- 修改密码界面,登陆成功后,1.显示用户名,2.可以重置密码,3.有登出的链接。
- 登录失败界面,返回一张图片。
综上,可推断出注入点在更改密码上。
分析下源文件:
这三个文件与数据库进行交互,剩下的五个文件分别对应上述几个显示的界面。
代码审计:
这几个文件出现频率最高的代码是:
session_start()
可参考php手册
session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
session_start的作用是开启$_SESION,需要在$_SESION使用之前调用。
PHP $_SESION 变量用于存储关于用户会话(session)的信息
接着分析:
1. login.php
PHP mysql_real_escape_string() 函数
定义和用法
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法
mysql_real_escape_string(string,connection)
参数 描述 string 必需。规定要转义的字符串。 connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 说明
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
可以看到代码对username和passseord的特殊字符进行了转义,想要在这里进行注入就得采取“绕过”,但这不是我们这道题想要的解法,我们就当这里无法注入好了,也就是说在登录页面login.php处无法进行注入。
登录成功后创建session
和cookie
,session
存储username
,但session
是建立在服务器上的对象,所以无法获取;cookie
只是个登录标记,几乎没有任何用处。(会话15分钟后过期)
2. login_create.php