[PwnThyBytes 2019]Baby_SQL
我们打开页面源码,发现有个source.zip,我们访问它进行下载
我们进行代码审计
我们发现在index.php里会对传入的值进行转义
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(’)
- 双引号(”)
- 反斜杠(\)
- NULL
register和login都没有啥过滤,但register必须要为admin注册
我们发现登录存在注入点
我们可以通过username来进行注入,但前提是要先连接数据库
我们在login和register最上方代码发现要连接数据库,需要存在session
session数组是在session_start()初始化后才产生,所以我们可以伪造一个session来直接访问login和register,从而绕过index的过滤,来进行sql注入
在phpsession里如果在php.ini中设置session.auto_start=On,那么PHP每次处理PHP文件的时候都会自动执行session_start(),但是session.auto_start默认为Off。与Session相关的另一个叫session.upload_progress.enabled,默认为On,在这个选项被打开的前提下我们在multipart POST的时候传入PHP_SESSION_UPLOAD_PROGRESS,PHP会执行session_start()
这个方法同样可以用来进行文件包含和反序列化
我们来写个脚本
1 | import requests |
返回try again
说明我们成功构造,就可以绕过index/php来注入了,login没有任何过滤,可以直接注入,但是没有回显,我们使用盲注
库名
ptbctf
表名
flag_tbl,ptbctf
字段名
flag_tbl:secret
ptbctf:username password
查flag_tbl的字段值即可
1 | import requests |
得到flag