SQL注入---POST注入

文章目录


一. POST提交概述

在Webshell文章中介绍过post提交和get提交的区别,这里不再赘述

post提交和get提交的区别:

  • get方式提交URL中的参数信息,post方式则是将信息保存在HTTP请求的body中传递
  • get提交的参数可以被缓存并会保留在浏览器的历史记录里,post提交不会。
  • get方式提交的URL页面可以被收藏,post提交则无法被收藏
  • get提交最长2048个字符,而post提交没有长度限制

综上所述,post方式提交的数据保密性更强,因此登录界面输入的账号密码信息常用post方式提交。

GET方式抓包分析:

POST方式抓包分析:

当我们通过登录页面输入账号密码信息后,数据库又是如何判断查询输入的密码是否正确呢,这里让我们来了解一下登录页面的PHP源码。

下图是一个登录界面:

下面是构建sql语句的PHP源码

#接收post方式提交的账户-->赋值给$uname,密码-->赋值给$passwd
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
	$uname=$_POST['uname'];
	$passwd=$_POST['passwd'];


#
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd'LIMIT 0,1";
    #使用mysql_query()将括号中的参数交给mysql数据库执行
	$result=mysql_query($sql);
    #使用mysql_fetch_array获取mysql数据库执行的结果
	$row = mysql_fetch_array($result);


if($row) #若$row有数据返回
	{
  		//echo '<font color= "#0000ff">';	
  		
  		echo "<br>";
		echo '<font color= "#FFFF00" font size = 4>';
		//echo " You Have successfully logged in\n\n " ;
		echo '<font size="3" color="#0000ff">';	
		echo "<br>";
        #返回账号信息
		echo 'Your Login name:'. $row['username'];
		echo "<br>";
        #返回密码信息
		echo 'Your Password:' .$row['password'];
		echo "<br>";
		echo "</font>";
		echo "<br>";
		echo "<br>";
		echo '<img src="../images/flag.jpg"  />';	
		
  		echo "</font>";
  	}
	else  
	{
		echo '<font color= "#0000ff" font size="3">';
		//echo "Try again looser";
        #mysql_error()函数用于返回最后一次MySQL操作产生的错误信息。
		print_r(mysql_error());
		echo "</br>";
		echo "</br>";
		echo "</br>";
		echo '<img src="../images/slap.jpg" />';	
		echo "</font>";  
	}

 二.SQL注入原理---万能密钥

SQL注入中常用的万能密钥如:admin' or 1=1 # 万能密钥是在源代码中没有对输入框中的信息进行审核而引起的一种漏洞,上述源代码中给出如下代码用于拼接出SQL语句:

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd'LIMIT 0,1";

当我们在账号框中 输入万能密钥:admin‘ or 1=1 源代码中的 $uname 将会被万能密码替代

如下述代码:

 WHERE username='admin' or 1=1 #' and password='$passwd'LIMIT 0,1";


分析:当我们在admin后面加上单引号' 用于和开头的单引号闭合从而将字符串admin闭合

      or 是一个判断语句即 username='admin' or 1=1 二者之一正确即可,而1=1是常识永远为真
      因此万能密钥中注入的用户名是否正确不重要
      
      #符号用于将后面的代码注释掉,最终执行的源代码如下:

      WHERE username='admin' or 1=1  由于1=1是常识永远为真 即username永远为1=1为真

三.其它类ing的post注入

报错注入,union联合注入,盲注等和前文的唯一区别是前文中的演示案例都是在URL中注入即get注入,而在post注入中则需要在http报文消息体中注入,其余无任何区别,使用post注入需要借助工具如hackbar,如下图在post data中注入。


总结

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北 染 星 辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值