注入,大概就是把用户可控的一些变量,带入到数据库操作当中,并且造成改变sql原意的效果。譬如注册用户的逻辑中,检测用户名是否存在的时候,把用户提交过来的用户名拿到数据库中去查询。如果代码逻辑中没有对用户名做好过滤的话,用户就可以提交一些特殊字符来完成注入。
现在注入的主要原因是很多程序员在写sql语句的时候,还是喜欢搞语句拼接。
根据sql分类,注入一般分四种类型:
-
select
-
update
-
insert
-
delete
如果有mysql error的话,这四种都能用报错注入,非常方便;
如果没有mysql error
-
select的注入:可以试下用 union select+回显来注入,如果没有回显,那就只能够用盲注了。
-
update的注入:如果是在 update set的位置的话,那么我们可以找找这个表的哪个column会被展示出来。例如如果一个update的注入点是在用户表且是在set位置可控的话,那么我们可以update email这个column,然后去用户资料看一下自己的email就出数据了,语句例如 update table set email=(select user());如果是在where后的话,那么一般也就是盲注了。
-
insert的注入:一般也是通过找哪个column会不会显示出来,尽量把要出的数据插入到这个column里面去。 如果没显示的话,也是盲注。
-
delete的注入:一般都是盲注了。
数字型注入主要就是因为他的变量并没有用单引号引住。但是基本上都是被强制类型转换了,譬如 intval($username)啥的。但是有时候会有遗漏的嘛。
而字符型和搜索型的,都是会有单引号引住的。所以需要闭合单引号再来进行注入。
说到单引号不得不说个php.ini里的配置 Magic_quotes_gpc,在稍微高点的版本默认都是on,但是却在5.4就已经废除了。
从字面意思上来看,就是对GPC QUOTE嘛。GPC对应的就是GET、POST和COOKIE,其中的内容,会被转义的字符为 ' “ \ NULL,转义的方式是在前面添加上一个转义符。从而导致了失去本来的意义,无法闭合单引号进行注入。
全局没有做addslashes的
像这种全局没有对GET/POST/COOKIE做addslashes的,这种厂商基本是会在查询的时候,再对一些用户可控的变量进行addslashes,甚至是不进行addslashes直接带入查询的。
这样的就算在查询的时候进行addslashes,在很多时候也都能找到几处遗漏了addslashes的。这种的比较简单,不多说。
全局做addslashes
现在稍微好一点的厂商都知道了在全局文件中对GET/POST/COOKIE做addslashes (甚至是在带入查询的函数中再做了转义或者预编译,这种给跪) 所以基本不用担心哪里遗漏了哪里忘记了addslashes) 这种的基本是首先先get magic quotes gpc 判断gpc是否开启,如果没开启的话,再调用addslashes来转义。如果开启的话,就不用来addslashes了。没开启就addslashes。
下面讲一些常见的注入方式
宽字节注入
这个是一个老生常谈的问题, 从一开始的数据库字符集GBK的宽字节注入,到现在也有很久了。但是并不是字符集为GBK的就能宽字节注入。
总有一些小伙伴说咋我看的cms字符集是gbk的,但是咋不能宽字节呢?
这是因为数据库的连接方式不同。数据库连接的时候,使用了 Set names gbk这样的就能宽字节。
但是现在这样的基本都看不到了。因为基本都是设置了二进制读取了。这样的宽字节基本没了, 却有了另外一种,因为转换字符集造成的宽字节注入。譬如从utf8转到gbk,或者从gbk转到utf8什么的。
例子: WooYun: 74cms 最新版 注入8-9
解析:“錦”字,从UTF8转成GBK之后成了 %e5%5c 74,cms对GET/POST/COOKIE等都做了addslashes ,所以'转义后为\' ->%5C %e5%5c%5c' 两个\,则单引号出来了。
例子2: WooYun: qibocms 下载系统SQL注入一枚(官网可重现)
解码导致注入
因为在全局文件中addslashes,如果我们能找到一些解码的,例如urldecode、base64_decode之类的,那么我们先提交encode之后的,那么就能不被转义了。然后decode后,再带入查询,造成了注入,无视gpc。
这种的很常见。例子很多 随便找一个
例子: WooYun: qibocms B2b 注入一枚//qibocms 注入
例子: WooYun: phpdisk V7 sql注入2//phpdisk 注入
变量覆盖导致的注入
常见的变量覆盖 有啥extract 和 parse_str 函数啥的,当然还有$$。
变量覆盖得结合一些具体的场景了。例如extract($_POST)啥的,直接从POST数组中取出变量。这样的还是遇到过几个,然后覆盖掉之前的一些变量。
覆盖的话,一般是覆盖掉表前缀之类的。譬如 Select * from $pre_admin where xxx像这种的就覆盖掉$pre,然后直接补全语句然后注入。
例子: WooYun: qibocms分类注入一枚可提升自己为管理
例子2: WooYun: phpmps 注入一枚
当然 $$ 也挺经常用到的 这个例子很不错。
例子3: WooYun: MetInfo最新版(5.2.4)一处SQL盲注漏洞
一些replace造成的注入
一些cms中,总有一些逗比过滤函数,譬如会把’ 啥的replace成空,但是他似乎忘记了自己全局有转义。
这时,当用户提交一个',全局转义成\',然后这过滤函数又会把'替换成空,那么就留下了\,导致可以吃掉一个单引号,是double query的话
select * from c_admin where username=’admin\’ and email=’inject#’
这样就可以注入了。
例子: WooYun: PHPCMS全版本通杀SQL注入漏洞
当然还有一些replace是用户可控的。就是说用户可以想把啥提交成空就提交成空,例如很久前的cmseasy和ecshop的那个注入。
例如这段代码:
$order_sn = str_replace($_GET['subject'],'',$_GET['out_trade_no']);
这里因为会被转义,如果提交'就成 \',这里可以看到,这里清成空的,是我们get来的,那我们就想办法把\给replace掉。
但是如果我们GET提交把\给replace,那么会被转义,就是replace掉\。但是我们只是\',所以不能把\去掉,如果我有\,还要你清空个毛啊。
这里我们来理清一下思路:
Addslashes 会对' " \ NULL 转义
' => \'" => \"\ => \\NULL => \0
那这里我们就提交%00’,就会被转义生成 \0\' ,这时候我们再提交把0替换成空,那么就成了\',单引号也就成功出来了。
例子: WooYun: cmseasy绕过补丁SQL注入一枚
SERVER未转义导致的注入
因为在很多cms中,基本上都只是对GET POST COOKIE 进行addslashes,而没有对SERVER进行转义。而一些SERVER的变量也是用户可以控制的。例如什么 QUERY_STRING X_FORWARDED_FOR CLIENT_IP HTTP_HOST ACCEPT_LANGUAGE 很多。
这里最常见的当然也就是X_FORWARDED_FOR,这个一般是在ip函数中用到。如果后面没有进行验证ip是否合法的话就直接return,这个大部分时候都会导致注入。
例子1: WooYun: Phpyun注入漏洞二
这里说到验证ip,这里基本都是用的正则来验证是否合法。而一些厂商连正则都写错。例如在cmseasy中的验证ip的正则中(%.+),导致了后面可以写任意字符。
例子2: WooYun: CmsEasy最新版本无限制SQL注射
FILES未转义导致的注入
这个也差不多,也是因为全局只对COOKIE GET POST 转义,遗漏了FILES,且不受gpc。
FILES注入一般是因为上传,会把上传的名字带到insert当中入库。然后这里文件的名字是我们可以控制的,所以导致了注入。
例子: WooYun: qibocms 黄页系统SQL注入一枚
还有一些,在入库的时候才对文件的名字进行了转义,而在获取后缀后,在入库的时候对文件名转义了却没有对后缀转义也导致了注入
例子: WooYun: Supesite 前台注入 #2 (Insert)
未初始化造成的注入
很久以前php
而到了现在, 很多cms却喜欢模仿register_globals 搞起了伪全局机制。例如啥qibocms metinfo destoon 啥的啊。
这样是方便了不少, 但是如果哪里遗漏了初始化,那么就会导致注入了。感觉这种的挺好玩的 多找了几个例子。
例子: WooYun: qibocms地方门户系统注入一个问题(demo测试)
例子: WooYun: qibocms地方门户系统注入(多处类似,demo测试)
例子: WooYun: 齐博地方门户系统SQL注入漏洞(无需登录可批量)
例子: WooYun: 齐博整站/地方门户SQL注入漏洞
数组中的key导致的注入
因为在对全局转义的时候,很多cms都只是判断gpc是否开启,如果off,就对数组中的value就行addslashes,却忘记了对数组中的key进行转义。
那么这样也导致了一个问题。也就是在Gpc off的时候那么数组的key没有被过滤,导致可以引入单引号。(听说低版本的php对二维数组中的key就算gpc on 也不会转义)
如果哪里把数组中的key,读取出来,然后把key带入到了查询当中,那么也会造成安全问题。
而且这样的例子很多。 简直惨不忍睹。
例子: WooYun: qibocms V7 整站系统最新版SQL注入一枚 & 另外一处能引入转义符的地方。//数组key的注入
例子: WooYun: qibocms多个系统绕过补丁继续注入2
例子: WooYun: qibocms全部开源系统 Getshell
例子: WooYun: Discuz 5.x 6.x 7.x 前台SQL注入漏洞一枚
offset造成的注入
这种算是比较常见的一种注入的。
代码大概如下:
<?php$key=0;$a=$_GET[a][$key];$b=$_GET[b];Mysql_query("select * from table where xxx='$a' and xx='$b'")
如果这里$_GET[a] 提交的是一个数组,且含有一个key为0的,那么$a就是对应的这个key的value。
但是这里并没有强制要求为数组。那么我们提交一个字符串,那么后面的[0]就是截取的第一个字符。在全局中,单引号被转义为\',截取第一个字符就为了\。\会吃掉一个单引号,然后就在$b处写入inject可以注入了。
例子: WooYun: qibocms 地方门户系统 注入#4(demo测试)
还有map发的那Disucz 7.2的那注入也一样。
第三方插件导致的注入
很常见的一种洞。比较常见的uc和alipay tenpay chinabank 啥的特别是uc,因为默认uc里面都会striplashes
Uc的话,一般会遇到的问题是uckey默认的。或者是uckey这个常量根本就没有初始化,导致了uckey可控,再导致了Getshell或者注入啥的。
还有tenpay 和 alipay 啥的,一些是因为忘记把过滤的文件包含进来,且key默认是空的,导致可以通过验证。
例子: WooYun: phpmps 注入 (可修改其他用户密码,官网成功)// phpmps uc致注入
例子: WooYun: PHPEMS (在线考试系统) 设计缺陷 Getshell一枚(官网已shell)/phpems uc致getshell
例子: WooYun: 最土团购注入一枚可直接提升自己为管理 & 无限刷钱。//最土团购 chinabank致注入
例子: WooYun: Destoon Sql注入漏洞2(有条件)//destoon tenpay致注入
例子: WooYun: CSDJCMS程式舞曲最新版Sql 一枚//csdj tenpay致注入
数字型注入
其实也不只是数字型,只是说一些忘记加单引号的地方都这样。这里只是一般数字型的都不会加单引号的。
一般的是这样:
$id=$_GET[id];Select * from table where id=$id;
$id,没被单引号,且没有被强制类型转换,那么就算addslashes了,由于不需要去闭合单引号,所以也无影响。
例子: WooYun: qibocms 地方门户系统 注入#3 (demo测试)
并不是一些数字型,一些其他的点也有些忘记加单引号,导致了注入。
例子: WooYun: Supesite 前台注入 #3 (Delete)
二次注入
也是一种比较常见的注入。涉及到的是入库和出库。因为有全局转义,然后入库的时候
insert into table (username) values ('a\'');
这样入库后,转义符就会消失,那么就是a'。如果哪里再把这个查询出来,那么也就是出库的是a',如果再把出库的 再带入到了查询啥的,那么就再次成功的引入了单引号导致了注入。
例子: WooYun: phpyun v3.2 (20141226) 两处注入。
例子: WooYun: qibocms 地方门户系统 二次注入#5(demo测试)
例子: WooYun: 74cms (20140709) 二枚二次注入
例子: WooYun: Hdwiki最新版二次注入一枚
截取字符导致的注入
有些cms有的时候会限制用户输入的长度,所以只截取一部分
例如uchome的cutstr($asd,32);
这样只允许输入32个字符,而且uchome里面的这个也没有像dz那样截取字符的后面加...
那么如果我们提交一个 1111111111111111111111111111111’被转义后成 1111111111111111111111111111111\’然后截取32个字符,就是 1111111111111111111111111111111\
如果又是double query的话,吃掉一个单引号,然后下一个连着的可控变量又可以注入了。
例子: WooYun: Hdwiki (20141205) 存在7处SQL注入漏洞(含之前处理不当安全的漏洞) //里面的0x06
例子: WooYun: Hdwiki (20141205) 存在7处SQL注入漏洞(含之前处理不当安全的漏洞) //里面的0x06
转载自: http://drops.wooyun.org/papers/4544,在原文基础上有简单整理修改。

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
