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 |
|
大概意思就是根据报错来回显信息,这得搓代码多少年才能想到这个…会用就行了……
attention: 由于rand()函数的随机性,需要多次刷新,会得到下图结果
获得当前database: security 可恶,是幻术
然后把上述语句的database()换成user(),刷新几次,获得当前user
再获得table_name以及其他信息:
1 |
|
刷新几次后….
0hhhhhhhhhhhhhhhh!!!!!!!
lesson_7 文件反弹shell
首先,盲注
1 |
|
(ps: 所以有时候括号要闭合好几次啊)
根据返回结果可知,这又是个错误回显注入,然后尝试用双查询、updatexml()等各种错误回显,发现8行,错误回显没有数据
网上搜索可知,这里根据回显结果’Use outfile’提示,要用到php反弹shell,原理见俺另一个记录sql注入姿势原理的博客
于是我们就阔以构造:
1 |
|
于是,就报错了
因为mysql在配置文件里限制了导出文件的路径,既然如此,就要知道这个路径
为此我们要用到这个: datadir、basedir(具体原理见俺另一个记录sql注入姿势原理的博客)
1 |
|
投个机,在第一关试试:
就知道了
然后开始构造:
.
.
.
这关迟迟过不了,太菜了,网上的payload原封不动地上都没反应,阔能是环境错了。还是先学学基础,比如这关要用到的基础知识: 一句话木马
然后周四再去问问210这关咋搞
后续:
今天去210,bw师傅给俺解决了,大致原因是: 首先linux里的路径阔以是’/‘也阔以是’',但windows里则只能是’/‘;其次你的secure_file_priv一开始的值是”NULL”,mysql里NULL和空是2个概念,俺的理解就是:NULL表示没有,空表示没有限制,想是啥都行
如图,虽然报错,但是生成了文件,记得以后路径要用’/‘
lesson_8 我超,盲注
所谓盲注,就是在注入过程中数据不能回显到前端页面,全靠猜,猜对和猜错的回显8一样(所以叫布尔)
而又因为全靠猜,所以得搓脚本
具体的分类以及姿势,写在另一个博客里了
到这里就要再学一些函数了
操作:
首先判断你要查的东东的名字长度, 比如数据库:
1 |
|
比如mysql版本(一般是4或5):
1 |
|
然后就通过ascii一个一个猜
1 |
|
此处自然是要写脚本,之前学的爬虫排上用场了,可是俺的Python在装双环境时出问题了,一直没解决….
但是还有burp和sqlmap阔以用,过了
lesson_9 时间盲注
此处的特点是,无论后面拼接的语句是否正确,都只会返回同样的结果: You are in….
而布尔盲注一般会返回2个结果,所以此关要用到时间盲注
eg:
1 |
|
lesson_13 基于报错的布尔盲注
本关闭合错误会有回显,但闭合正确了啥都不显示(比如输入Dumb、Dumb分别为username、password,不会回显)
同时正确闭合后时间盲注也没卵用
同时这个也没卵用
1 |
|
但是,基于报错的布尔盲注是有用的!!(因为人家会返回报错)
add: 关于hackbar里post和get传参的区别
我草….来回几遍以为是语法错误检查不出来,后来才发现hackbar在post传参时是要用url码的…..
比如: 在get传参时,可以用’– ‘来表示注释,但在post传参里则必须为’–+’
而如果在post里不用url码,则会出现以下结果: