SQL注入续篇(Web漏洞及防御)

SQL注入续篇(Web漏洞及防御)

报错注入

CMS系统:

已知:数字型注入

1. group by 虚拟表主键重复冲突

原理:

https://blog.csdn.net/he_and/article/details/80455884?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param


SQL注入续篇(Web漏洞及防御)

http://10.1.1.8/cms/show.php?id=33 and (select 1 from (select count(*),concat(0x5e,(select database()),0x5e,floor(rand()*2))x from information_schema.tables group by x)a)


SQL注入续篇(Web漏洞及防御)

2. extractvalue()函数


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

3. updatexml()函数


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

数据库名:cms


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

cms的一张表的表名:cms_article

改变limit 0,1中的0继续查询其他表!


延时注入(sleep)

没有任何报错信息输出,无法判断SQL注入测试语句是否正确,通过构造sleep注入的SQL测试语句,根据页面的返回时间判断数据库中存储了哪些信息!

sleep():让执行SQL语句时间变长!

sleep()常与if(expression1,expression2,expression3)结合使用!

if(expression1,expression2,expression3):

如果expresson1为TRUE,if()返回expression2,否则返回expression3!


获取数据库名长度

http://10.1.1.8/DVWA-master/vulnerabilities/sqli_blind/?id=1' and if(length(database()) >8 ,sleep(5),1) --+&Submit=Submit#

分析:

如果数据库的长度大于8,休眠5秒后,执行id=1的查询,id=1的查询时间大约只有几十毫秒,否则(小于等于8),直接查询id=1!

结论:通过sleep()产生的时间差来判断SQL语句的执行结果!

......

堆叠查询注入

结束了一个sql语句后(;),继续构造下一条语句,但会不会执行取决于相应的数据库系统是否支持!

oralce不支持,mysql支持 ......

SQL注入续篇(Web漏洞及防御)


http://10.1.1.8/sqli-labs-master/Less-38/?id=1' ; insert into users(id,username,password)values('66','wenxin','123.com') --+


SQL注入续篇(Web漏洞及防御)

insert插入成功!

查看堆叠查询注入源码:


SQL注入续篇(Web漏洞及防御)

箭头指示的代码中允许批量执行SQL,这就有可能存在堆叠查询注入的可能

mysqli_multi_query()函数支持多条sql语句同时执行!

================================================

但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁!

================================================

获取数据库的长度

http://10.1.1.8/sqli-labs-master/Less-38/?id=1';select if(length(database())>5,sleep(5),1) --+


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

堆叠查询与联合查询(union select)的区别:

联合查询只能查询(select),堆叠注入可以执行任意语句!

(insert/update/create/delete...等)

......


二次注入


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

用户正常登录!


SQL注入续篇(Web漏洞及防御)

登录页面还有"忘记密码"和注册新用户的功能!

注册账户:


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

登录数据库系统,查看用户信息!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

此页面下修改admin'#的密码:


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

数据库查看修改情况:


SQL注入续篇(Web漏洞及防御)

结论:admin'#并没有被修改,但修改了原数据库里的admin的密码(原来admin的密码是admin)

用admin/123456登录:

返回HOME,注销当前账户(Logout)!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

admin用户成功登录!

查看注册页面源码:


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

跳转到:login_create.php


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";

注册后,插入数据库的SQL语句!

代码审计:

结论:仅对特殊字符"进行了转义!

查看修改密码页面源码:


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

代码审计:

$username= $_SESSION["username"]; // admin'#$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";// username='$username' ==> username='admin'#' ==>username='admin'// 所以,实际上修改的是admin的密码!

宽字节注入

================================================

当某字符的大小为一个字节时,称其字符为窄字节.

当某字符的大小为两个字节时,称其字符为宽字节.

所有英文默认占一个字节,汉字占两个字节!

常见的宽字节编码:

GB2312

GBK

GB18030

BIG5

Shift_JIS

......

================================================

开发人员为了防止SQL注入,对用户输入的单引号(')会进行转义处理(\'),转义后的单引号,不能起到前后单引号闭合的作用(''),它只能作为两个单引号闭合后的内容('\''==>' ' '),这样会导致id=1'中的'不能跟前一个单引号闭合,而只能作为前一个单引号和最后一个单引号闭合内的内容,所以在一般情况下,此时不会存在SQL注入漏洞!所以,要实施SQL漏洞注入,需要绕过转义(\)!

思路:

1. \ 失去转义作用(开发人员才能做)

2. 让\ 消失

让\消失:使用宽字节注入(数据库的编码方式必须为宽字节编码,如:GBK!)


SQL注入续篇(Web漏洞及防御)

方法:

在地址后先加一个%df,再加单引号,因为\的编码为%5c,而在GBK编码中,%df%5c是繁体字"連",这样\就消失了,那么'不是作为内容了,最后开发人员构建的SQL语句中,由于多出一个不是内容的'就会报错!这时我们可以构建SQL语句,把多余的‘注释掉,让其消失,那么最后的SQL语句就能正确执行了!

思路:(范围:%81-%FE)

' \' ' ===> 初始状态,转义后的('),作为首尾(')的内容!' 連' ' ===> \消失,但SQL语法错误,不能正确执行SQL语句!注释掉最后一个(') ===> ' 連' ===> SQL语法正确,便能正确执行SQL语句了!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


加了(')后,由于开发人员进行了转义,所以程序运行正常!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

http://10.1.1.8/sqli-labs-master/Less-32/ ?id=1%df'

加了%df后,开发人员的转义失效,('''),造成SQL语法错误,所以报错!也说明,加了%df起作用了!

SQL语法错误,注释掉最后一个(')使其正确:


SQL注入续篇(Web漏洞及防御)

http://10.1.1.8/sqli-labs-master/Less-32/?id=1%df'--+


SQL注入续篇(Web漏洞及防御)

SQL语句正确执行,不报错!

进一步探究使用何种注入方式:


SQL注入续篇(Web漏洞及防御)

SQL注入续篇(Web漏洞及防御)

正确执行,页面回显登录名和密码信息!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

正确执行,查询不到匹配的条件,页面不回显登录名和密码信息!

结论:根据回显不同信息,可以使用联合查询注入!

1. 字符型注入

2. 获取显示位

http://10.1.1.8/sqli-labs-master/Less-32/?id=1%df' order by 1 --+


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

......

cookie注入


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

发现url中没有GET参数,但页面返回正常,还显示Cookie ID set!

BP抓包分析(提交页面):


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


分析:Cookie中存在id=1的参数,但请求的方式是POST!


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

修改id=1':


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


继续尝试:

id 1' and 1=1 --+

id 1' and 1=2 --+

sleep()

....


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

发现页面都没变化!(提交页面不存在SQL漏洞!)

BP抓包显示页面分析:


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

结论:存在字符注入,并且是通过cookie的id参数注入!

由于页面回显,存在或不存在信息,使用布尔类型注入


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)


SQL注入续篇(Web漏洞及防御)

结论:数据库长度为4!

......


SQL注入续篇(Web漏洞及防御)

base64注入

XFF注入

下一篇分析 ......

SQL注入续篇(Web漏洞及防御)

没有任何报错信息输出,无法判断SQL注入测试语句是否正确,通过构造sleep注入的SQL测试语句,根据页面的返回时间判断数据库中存储了哪些信息!

数据分析中的用户画像,原来就是这么简单

转载自:接地气学堂有同学问:到处都看到吹用户画像的,可就是没见过真正例子。今天我们来一个:利用用户画像提升交易额的实战例子。而且这个例子就发生在我们身边。1、一个活生生的用户画像实例秋高气爽,爸比带着coco出去玩,在某个湖边看到好多人在放风筝。突发奇想:我们也去放吧!

C++ 如何避免内存泄露?

(给程序员的那些事加星标)来源:知乎-张凯(yle hang… equestontext ctx(req); andleequest(&ctx);}void andleequest(equesttx* ctx) { ubmitsync(ctx); oroutine::elf()…、++ string 类详解关注『开发者』看精选++技术文章

一个Bug损失200亿!如何搭建业务异常检测系统?

DataPipelineHead of AI 王睿在51CTO大咖来了公开课上作了题为《业务异常实时自动化检测 — 基于人工智能的系统实战》的分享,本文根据分享内容整理而成。

10年3度创业,他总结了7条保持企业韧性的经验 |【经纬低调分享】

企业韧性,可以理解为一个企业分析调查、学习和行动的能力,且事…我们的答案是,一个能够将现在零散的全新云端数据仓库业务整合起来并且抢占市场份额的产品,同时,这个产品能够像ooker一样能够用更好的解决方案为客户提供更优质的用户体验。这一次,与其坐以待毙,或者直接复制ooker的现有模式,etrics的一…次我们仍然只谈实战pace载人龙飞船发射,未来会更好就是航天