各位牛牛们想想这段代码可否有可乘之机!

  • A+
所属分类:网络安全

post提交的内容为: 
POST /xxx/admin/login/login_check.php?langset=cn HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: http://www.phptest.com/xxx/admin/login/login.php 
Accept-Language: zh-CN 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Proxy-Connection: Keep-Alive 
Content-Length: 108 
DNT: 1 
Host: www.phptest.com 
Pragma: no-cache 
Cookie: ts_email=141%40qq.com; ts_autologin=17xy55gq4wpws48g8o4wk84cg8s8cgk; CNZZDATA1670348=cnzz_eid%3D919512166-1402449882-%26ntime%3D1402537211%26cnzz_a%3D1%26ltime%3D1402537222272%26rtime%3D1; recordurl=%2Chttp%253A%252F%252Fwww.phptest.com%252Fxxx%252F%2Chttp%253A%252F%252Fwww.phptest.com%252Fxxx%252F 

action=login&loginlang=login.php%3Flangset%3Dcn&login_name=admin&login_pass=123456&Submit=%E7%99%BB%E5%BD%95


login_check.php文件 
接受参数的地方 
foreach(array('_COOKIE','_POST','_GET') as $_request) { 
  foreach($$_request as $_key => $_value) {              
    $_key{0} != '_' && $$_key = daddslashes($_value,0,0,1); 
  } 
}

接下来就是通过接收的参数查询数据库。牛牛看看发挥发挥login_check.php 这样接收参数是不是有可乘之机……


1#神在堕落 | 2014-06-12 11:53

我来消灭个零回复.思路不错.服务器不会这么傻的接受这样POST的

 

2#loopx9 | 2014-06-12 12:02

试试提交GLOBALS看能不能覆盖变量

 

3#hkAssassin | 2014-06-12 12:08

@神在堕落 我可以说这是审计的别人的代码么……觉得这地方可能会出问题所以拿出来讨论下!

 

4#hkAssassin | 2014-06-12 12:10

@loopx9 求详情。我测试不成功。变量不能覆盖……

 

5#寂寞的瘦子 | 2014-06-12 12:59

@hkAssassin 代码逻辑没问题。

 

6#小森森 | 2014-06-12 13:11

@hkAssassin get或post中加上一个&GLOBAL[xxx]=a 有用否……,这样按理说全局的$xxx应该为字符串a了

 

7#Mody | 2014-06-12 13:11

是metinfo的吧,而且前台和后台的daddslashes不一样的,后台有点问题的,前台好难呀,xfkxfk大牛发了几篇metinfo的SQL注入,关注中,膜拜阿

最后,悄悄的告诉你,$met_webkeys可以覆盖的。。。

 

8#hkAssassin | 2014-06-12 13:28

@Mody daddslashes 是一样的。人家重新写了,传的参数不一样,然后起的作用就不一样。反正这个代码比较变态,不遵循mvc啊!看累了都!!

 

9#hkAssassin | 2014-06-12 13:29

@寂寞的瘦子 是的逻辑没问题……

 

10#索马里的海贼 | 2014-06-12 13:33

@小森森 不是的哦亲 提交x.php?foo=GLOBALS[a]=b 然后用那段代码覆盖掉$GLOBALS的话 $GLOBALS就不再是超全局变量了 $a不会被改成b  var_dump($GLOBALS)你会看到只有一个数组array('a'=>'b');

 

11#索马里的海贼 | 2014-06-12 13:34

写错了 x.php?GLOBALS[a]=b 无视那个foo

 

12#loopx9 | 2014-06-12 16:58

的确提交GLOBALS[xxx]会直接把整个GLOBALS数组覆盖掉,只留一个$xxx。所以要利用的话机会很小。除非提交全部代码所需的变量,但object之类的变量没法通过这种方式提交。


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: