南邮oj几道有意思的题

南邮oj用户体验贼差,好多题不是打不开就是假flag,还有的题照着正确的输都是错的,然后过一会又能输对了,服了,还有那个综合题二,做到一半把代码都下载下来了,题目竟然被改了?????跪了,然后第二天看的时候竟然连接不上数据库......

SQL注入2

早就听说过有md5绕过登陆的方法,今天终于看到源码了

Logged in! Key: ntcf{**************} 

"; } else { echo("

Log in failure!

"); } } ?>

要想得到flag,只需要同时满足

($query[pw]) && (!strcasecmp($pass, $query[pw]))

$user变量我们是可以控制的,然后又没有任何过滤措施
我们就可以直接利用这个语句选择一个相应的密码给对应的pw

tips
如果前面的用户名不存在的话
mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
取到的东西就是空,然后在加上我们的md5密码,就可以实现成功登陆

最后payload

user=1' union select md5(1)%23&pass=1

综合题

常规操作,可以看到头部有提示tip: history of bash,就需要查找相关的bash历史文件

Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。

直接访问,然后拿到flag

sql injection 4

#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';

function clean($str){
    if(get_magic_quotes_gpc()){
        $str=stripslashes($str);
    }
    return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
    die('Invalid password!');
}

echo $flag;

clean函数是第一个需要考虑的
这几个函数官方手册如下

bool get_magic_quotes_gpc ( void )
如果 magic_quotes_gpc 为关闭时返回 0,否则返回 1。在 PHP 5.4.O 起将始终返回 FALSE。
在 PHP 5.4之 前默认是开启的
string stripslashes ( string $str )
返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
在这里
htmlentities($str, ENT_QUOTES); // 转换双引号和单引号
方法将把字符转换为 HTML 实体

将上面的sql语句简化一下

SELECT * FROM users WHERE name='.$username.' AND pass='.$password.';

username和password是我们可以控制的
很显然的一个方法就是把$username.' AND pass=中的 ' 用某种正规手段弄掉,
然后password
后面输入一些合法的东西使得搜索恒成立(中间那个东西弄没是一种很常用的点)
一种很显而易见的payload就是

username=\&password=or 1%23

此时查询语句就是

'SELECT * FROM users WHERE name=无用的' or 1';

丘比龙De女神

老套路,将图片保存本地,然后用notepad++打开


last.png

可以看到最后两行显示了另外一张图片,老套路,分离图片.
继续老套路,搜索相应的文件名


南邮oj几道有意思的题_第1张图片
two_pic.png

然后看那个nvshen.png
南邮oj几道有意思的题_第2张图片
nvshen.png

可以看到这里的头部有问题


南邮oj几道有意思的题_第3张图片
lasT.png

而且这里的尾部是PK文件,也就是压缩文件
所以要将这里的文件头修改为压缩文件头
50 4B 03 04 00 00 00

然后修改文件后缀名,取图片(密码为love,曾经的文件头)
然后根据题目提示计算md5
然后在线md5

你可能感兴趣的:(南邮oj几道有意思的题)