PHPB2B某处sql注入
官网下载的最新版本
绕过全局防注入。
我们先看看全局防注入怎么写的。
以下是全局防注入用到的函数
其核心在于,对post和get传递过来的参数值进行了一次过滤
但是还是有不足的地方。
librabies/core/controllers/friendlink_controller.php
18-29行
传入参数friendlink并传入save函数中。
跟入save函数
只看关键行
$id默认为空
所以最后拼接成的sql为
$cols是怎么来的?
原来是取出了post传递过来的参数的键名数组,然后用,分割成字符串。而键名是不在全局sql注入过滤中的,于是产生了注入。
我们知道php是可以传递数组的,包括二维数组。于是很轻易的在此处构造出一个sql注入。
演示如下。
先访问
localhost/phpb2b/?do=friendlink
查看源代码。获取csrf的formhash
得到当前formhash=95a43736362e5dd0
访问
localhost/phpb2b/?do=friendlink&action=add
post提交
为了演示方便,我把sql语句打印出来了。
1=1成功延时
1=2不延时
借此可以用来做一个延时注入。
比如要猜测管理员的MD5
延时成功,MD5密码的第一位ascii大于40
以此类推,可以猜解出管理员md5.
PHPB2B某处sql注入
官网下载的最新版本
绕过全局防注入。
我们先看看全局防注入怎么写的。
以下是全局防注入用到的函数
其核心在于,对post和get传递过来的参数值进行了一次过滤
但是还是有不足的地方。
librabies/core/controllers/friendlink_controller.php
18-29行
传入参数friendlink并传入save函数中。
跟入save函数
只看关键行
$id默认为空
所以最后拼接成的sql为
$cols是怎么来的?
原来是取出了post传递过来的参数的键名数组,然后用,分割成字符串。而键名是不在全局sql注入过滤中的,于是产生了注入。
我们知道php是可以传递数组的,包括二维数组。于是很轻易的在此处构造出一个sql注入。
演示如下。
先访问
localhost/phpb2b/?do=friendlink
查看源代码。获取csrf的formhash
得到当前formhash=95a43736362e5dd0
访问
localhost/phpb2b/?do=friendlink&action=add
post提交
为了演示方便,我把sql语句打印出来了。
1=1成功延时
1=2不延时
借此可以用来做一个延时注入。
比如要猜测管理员的MD5
延时成功,MD5密码的第一位ascii大于40
以此类推,可以猜解出管理员md5.