提交方式注入 - get post cookie http头等
出现不同提交方式的原因:数据大小,类型,功能
SQL注入的原理是在于 源码与数据库交互的时候未对用户输入的数据进行过滤,所以我们常规的可见的注入点往往就是在url上 例如 :http://127.0.0.1/index.php?id=1 的id参数处存在sql注入。
常见payload http://127.0.0.1/index.php?id=1 union select database()–+
但是我们往往还有其他的注入点容易被忽略
不同接收方式产生的注入
POST注入方式及其他提交方式产生的注入
常常我们在登录框进行登录的时候,就是采用的POST的提交方式,常规url还是
http://127.0.0.1/login.php但是当我们把数据包抓取下来时,往往可以看到我们提交的数据包为POST的请求数据包,在最下面的数据处会存在 user=admin&pass=password的参数进行传递
这个时候我们对下面提交的user和pass值进行注入也是可以的。
在PHP中还有其他的接受参数的方法,常见应用点在 接受UA头判断是什么设备访问,接受IP值。判断是哪个IP地址在访问:如登录框判断一个IP地址的登录失败次数。接受cookie判断购买或操作是谁
PHP中接受其他访问的数据常见代码如下
这些接受数据的地方如果和数据库产生交互且过滤不严谨都是可能存在sql注入的
部分语言接受代码块
<?php header("Content-Type: text/html; charset=utf-8"); $get=$_GET['g']; $post=$_POST['p']; $cookie=$_COOKIE['c']; $request=$_REQUEST['r']; $host=$_SERVER['HTTP_HOST']; $user_agent=$_SERVER["HTTP_USER_AGENT"]; $ip=$_SERVER["HTTP_X_FORWARDED_FOR"]; echo$get.""; echo$post."
"; echo$cookie."
"; echo$request."
"; echo$host."
"; echo$user_agent."
"; echo$ip; ?>
Java Spring 不同框架,不同写法
method=RequestMethod.GET
method=RequestMethod.POST
request.getParameter(“参数名”);
可以直接获取get请求的参数key对应的value
也可以从请求体中获取参数的key对应的value
Python flask 不同框架,不同写法
requests.get
requests.post
request.args.get(key)
request.form.get(key)
request.values.get(key)
sqlmap的使用
常见的且好用的方法就是 抓个其他方式的请求包 直接
python sqlmap.py -r 1.txt 在有注入的参数处加上星号就可以了
或者 Python sqlmap.py -u “http://127.0.0.1/login.php” --data “username=xxx&pass=password”
这种命令也是可以的 但是不推荐,因为使用 -u参数的时候 sqlmap发送出去的数据包可能会少很多原装的参数。有时候缺少部分参数会无法访问站点 或者误判等