注入—全方位利用 之 POST注入/HEAD注入

humbie   ·   发表于 2022-09-16 13:41:43   ·   学习杂记

POST注入:
POST=>传参方式GET/POST
注入=>用户输入的数据被当做代码执行
POST注入=>用POST类型传递数据的SQL注入(上节课都是GET传参类型)
GET要有URL编码,POST一般是表单。
靶场就和之前一样,只不过要在表单内注入
判断是否是GET/POST:
1.看源码,method=’post’
2.抓数据包,开头就是POST。

SQLmap跑POST:

  1. —form 自动定位POST传参(就是直接在SQLmap语句后面加—form)
  2. -r 抓包法(推荐)
    首先在表单里随便写点东西,抓包,把包内容复制,放到txt里,在需要注入的地方后面加* ,比如username=add*,
    这样就可以指定注入username。(不加*就是全部表单都跑)。
    指令为:python sqlmap.py -r txt绝对路径。
    (跑不出来可以加等级)。
    有些SQL注入需要登录,这时候不能直接SQLmap(它没有cookie),这时就可以-r,这里面有cookie就可以正常跑了。

HEAD注入:HEAD就是包里的各种数据头,存放一些全局变量的值,通过改变他们来注入。
核心:数据库保存了HEAD信息。
问题:没有回显(网站不告诉你他存了HEAD头)
解决方法:盲注、报错
本次课程讲解报错法。
报错法核心:致命性错误会被输出在页面上。
updatexml() 更新xml文件内容。
updatexml(目标xml内容,xml文档路径,更新内容)
这个时候利用这个函数,使路径报错,从而显示报错路径。(也可利用其他函数)
但是报错路径里要有特殊符号才能引发报错,所以
updatexml(‘1’,database(),’2’)不行,要利用concat()字符串连接函数,来将需要的输出和特殊字符连接。
比如:updatexm1(‘1’,,concat(‘!’,database()),’1’)这样就会报错显示!+库名。
这样就会将所有需要输出(报错只能报字符串,注意用limit)
group_concat()多行数据一起输出(就是把表换成字符串)这个函数问题在于表太大就不全转换了,所以慎用。
$_SERVER是php全局变量,存放各种系统信息。
比如存在UA HEAD($_SERVER[‘HTTP_USER_AGENT’])
注意:一般网站不会记录所有人,只会记录登录者,所以需要先爆破一个账号。
此处靶场,把网站登录包抓了,利用intruder,把需要爆破的加个$,然后更改选项(注意更改效率,防止BAN IP)。
跑完之后看返回值,页面长度明显不一样的,可能就是登录成功的。(其他判定成功方法,看手册)。
常用注入:USER_AGENT REFERER IP 三个HEAD。
你的设备是什么 流量从哪过来的 IP地址。
本题根据源码,在UA注入。(把包发给Repeater选项,可以多次发包)
本题因为源码中SQL语句插入语句需要插入两个字段,本题就需要在后面多添一个字段。(以后遇到不对了,可以依照此方法多添几个字段试试)
靶场二就是根据REFERER改。
靶场三是记录IP:
两种情况:
1.记录通信IP
2.使用代理
当使用CDN时,通信IP无效,所以这个时候需要改XFF头,(透明代理,知道是谁让代理来到。)
X-Forwarded-For,此处记录的IP优先级一般高于IP。
请求头后面有个空格别忘了,不能删掉X-Forwarded-For:空格xxxx
更改头可以利用插件(上节课课件有),但是最好用抓包验证一下,最好就是抓包。
靶场之所以用这么复杂的注入,是因为单引号被过滤了,但是可以在username填写反斜杠,password中填写语句,这样就可以巧妙地避开过滤。

打赏我,让我更有动力~

0 Reply   |  Until 17天前 | 77 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.