1 sql注入的类型
字符型,数字型,布尔盲注,时间盲注,堆叠注入,宽字节注入,二次注入
2 面试常问
1 你有没有手工注入过,手工注入的流程是什么
2 有没有用过sqlmap,他的某些参数
3 sql注入的绕过
4 sql注入如何防御
5 给你个登录框你有什么注入思路
3 常见的函数
user():查看当前登录的用户名,可以查看权限的大小
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
database():当前所处数据库
version():版本信息
@@datadir():读取当前数据库的路径
load_file:读取本地文件的函数
substr/substring:截取函数

if():

mid():当substr被禁用了可以使用

ascii():

concat(), group_concat():group_concat可以将输出放在一行输出,因为有些时候子查询只让显示一行


4 MySQL如何写shell,如何getshell
1 权限为root
2 secure_file_priv为空

3 必须要知道网站的物理路径
例题:
http://127.0.0.1/sqliabs/Less-7/?id=-1%27))%20union%20select%20%22%3C?php%20phpinfo();%20?%3E%22,2,3%20into%20outfile%20%22E:\phpstudy_pro\WWW\sqliabs\Less-7\web.php%22--+

闲谈:
user-agent(uagent)字段:保存的是浏览器的内核和引擎
referer:保存的是从那个地方来的(跳转之前的网址)
5 注入流程
联合注入查询,首先得知道他有多少列,因为只有列数相同才能用union select,用order by注入

闭合:
如果不闭合,mysql就会默认查询gid'为1的,把后面的自动去除

但是闭合后还是会有一个单引号,我们如何逃出呢?
and ‘1’=1
--+注释,在MySQL中--(空格)是注释,#也是注释
为什么id=-1
正常查询来说当id=1时就会查询gid为1的值,就查到了第一排的数据,但是我们注入主要是在虚拟表里面注入出数据的,就得让id=-1或者一个不存在的值,他就会走到虚拟表中来,就会展示在前端

回显user(),database()

有数据库和用户了,那么接下来我就可以去回显我们的数据库的管理员表名,列名和数据
表
总结:

字符型注入如上:
报错注入:
updatexml等函数他只能显示32个字节所以需要用substr把他一个一个列出来


例题:
因为如果用联合查询页面不会回显,这时我们能用报错注入让路径报错回显到页面上面来
?id=1%27%20and%20%20updatexml(1,concat(0x7e,user(),0x7e),1)--+

盲注:
你的页面有两种状态,一个成功一个失败,对的就显示,错误就无任何回显,就是一个ture,一个fales;
- 第一个
1表示从database()函数返回的数据库名字符串的第1个位置(字符串的索引通常从1开始,也有些情况从0开始,这里结合 SQL 注入中常见的用法,是从第1个字符开始)开始截取。 - 第二个
1表示截取的长度为1个字符
当ascii等于115的时候有返回
http://127.0.0.1/sqliabs/Less-8/?id=1%27%20and%20ascii(substr(database(),1,1))=115--+

但是当大于115的时候就没了。大于114也有,说明第一个字符的ascii值为115

1,我们可以先用length判断出数据库的位数,然后再慢慢注入

2 sqlmap跑
直接跑出来的payload可以用,有时间盲注和Boolean盲注

1096

被折叠的 条评论
为什么被折叠?



