第43天:PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类

PHP-MYSQL-数据请求类型

1
sql语句由于在黑河中是无法预知写法的,sql注入能发成功是需要拼接原sql语句,大部分黑盒能做的就是分析后各种尝试去判断。所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原sql语句的未知性导致的拼接失败!(其实说白了就是不知道怎么进行闭合)

1
2
3
4
5
6
7
8
9
1、数字型 无符号干扰
select * from news where id=$id;
2、字符型(有符号干扰)
select * from news where id='$id';
3、搜索型(有多符号干扰
select * from news where id like '%$id%'
4、框架型(有各种符号干扰)
select * from news where id=('$id');
select * from news where (id='$id');

总结:不同类型进行的sql,在闭合符号上面都会有区别,这里还是一些例子,实战情况下只能靠猜。

PHP-MYSQL-数据请求方法

1
2
3
4
5
requext的提交方式,如果是这种方式的话,就不用管是什么提交方式,因为如果是这种方式的话,不管是get方式还是post提交方式,以及cookie的方式,都是可以正常接收的。

那么为什么要说明这几种方式的不同或者说区别呢?因为在对网站进行注入的时候,一个网站可能只对一种提交方式做了过滤,那么我这个时候就可以用另外的提交方式进行绕过。如果是get,那么我就可以改为post,或者反过来,如果是cookie我就可以从post和get上下手,如果是requext那么我三种方式都可以试一试

如何判断网站可以使用哪几种的接收方式,如果目标网站默认是用get方式进行提交的话,那么我就可以更改这个get方式提交的内容,用post进行提交,如果网站没有变化,说明网站是可以用这种方式进行提交的
  1. User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
  2. Cookie:网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的
  3. X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).
  4. Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.
  5. Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

安全问题

试想一下,如果开发者在对网站进行编写的时候,在对一些敏感的页面,只能本地ip进行访问,或者白名单的ip进行访问,那么如果此时他将这个名单保存在数据库中,那么在判断是否白名单ip的时候就需要进行数据库查询,那么如果这里没有对数据库的数据进行过滤,那么就会出现注入。(这里需要注意的是,实际情况可能并没有直接在数据包中将ip这个参数进行体现,那么你在看到多次回显诸如,拒绝访问,或者需要内网ip进行访问这样的提示,那么你就可以判断这个有对IP进行限制,有可能需要手动加上XFF头,也就是:X-Forwarded-For

image-20250808100122632

小tips

1
2
3
4
5
6
#在闭合的时候不一定非要 # 或者 --+

#如果查询语句是:select * from xxx where '$id';
还可以在注入的后面加上:
1' union select 1,2,xxx from xxx and '=
1' union select 1,2,xxx from xxx and '1'='1

数据格式

base64

1
2
就是在进行注入的时候,如果对方的传参的方式是使用例如 base64的方式
那么你在注入的时候,也要进行base64才能进行注入

image-20250808100747467

诸如这样的网站,那么你在进行传参的时候,也要进行base64编码才行。

JSON

1
{"firstName":"Brett"}

如果是这样的格式,那么在进行注入的时候,同样是在json的格式里面进行注入。

image-20250808101451538

思路是一样的,只不过在json里面进行注入了而已。但是有时候需要注意,为了保证json格式的正确性,所这里需要闭合json的格式

image-20250808105347263